Added code to determine the location of the discovery document.
[arvados.git] / lib / google / api_client / discovery / discovery.rb
1 # Copyright 2010 Google Inc.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 require "json"
16 require "addressable/template"
17
18 module Google #:nodoc:
19   class APIClient #:nodoc:
20     class Discovery
21       ##
22       # The default discovery configuration values.  These may be overrided
23       # simply by passing in the same key to the constructor.
24       DEFAULTS = {
25       }
26       
27       ##
28       # A set of default configuration values specific to each service.  These
29       # may be overrided simply by passing in the same key to the constructor.
30       SERVICE_DEFAULTS = {
31       }
32
33       ##
34       # Creates a new API discovery handler.
35       #
36       # @param [Hash] options
37       #   <code>:service</code>::
38       #     The name of the service.
39       #   <code>:service_version</code>::
40       #     The version of the service.
41       #   <code>:discovery_uri</code>::
42       #     The URI of the discovery document.
43       #
44       # @return [Google::APIClient::Discovery] The API discovery handler.
45       def initialize(options={})
46         if options[:service] && SERVICE_DEFAULTS[options[:service]]
47           @options = DEFAULTS.merge(SERVICE_DEFAULTS[options[:service]])
48         else
49           @options = DEFAULTS.clone
50         end
51         @options.merge!(options)
52         if @options[:service] && !@options[:discovery_uri]
53           service_id = @options[:service]
54           service_version = @options[:service_version] || "1.0"
55           @options[:discovery_uri] =
56             "http://www.googleapis.com/discovery/0.1/describe" +
57             "?api=#{service_id}&apiVersion=#{service_version}"
58         end
59         unless @options[:discovery_uri]
60           raise ArgumentError,
61             "Missing required configuration value, :discovery_uri."
62         end
63         # Handle any remaining configuration here
64       end
65
66       ##
67       # Returns the configuration of the handler.  Configuration options that
68       # are not recognized by the handler are ignored.
69       #
70       # @return [Hash] The configuration options.
71       def options
72         return @options
73       end
74     end
75   end
76 end