add parser configuration to http transport, will add tests next commit
[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     ##
21     # A discovery document handler.
22     class Discovery
23
24       ##
25       # The default discovery configuration values.  These may be overrided
26       # simply by passing in the same key to the constructor.
27       DEFAULTS = {
28       }
29
30       ##
31       # A set of default configuration values specific to each service.  These
32       # may be overrided simply by passing in the same key to the constructor.
33       SERVICE_DEFAULTS = {
34       }
35
36       ##
37       # Creates a new API discovery handler.
38       #
39       # @param [Hash] options
40       #   <code>:service</code>::
41       #     The name of the service.
42       #   <code>:service_version</code>::
43       #     The version of the service.
44       #   <code>:discovery_uri</code>::
45       #     The URI of the discovery document.
46       #
47       # @return [Google::APIClient::Discovery] The API discovery handler.
48       def initialize(options={})
49         if options[:service] && SERVICE_DEFAULTS[options[:service]]
50           @options = DEFAULTS.merge(SERVICE_DEFAULTS[options[:service]])
51         else
52           @options = DEFAULTS.clone
53         end
54         @options.merge!(options)
55         if @options[:service] && !@options[:discovery_uri]
56           service_id = @options[:service]
57           service_version = @options[:service_version] || '1.0'
58           @options[:discovery_uri] =
59             "http://www.googleapis.com/discovery/0.1/describe" +
60             "?api=#{service_id}&apiVersion=#{service_version}"
61         end
62         unless @options[:discovery_uri]
63           raise ArgumentError,
64             'Missing required configuration value, :discovery_uri.'
65         end
66         # Handle any remaining configuration here
67       end
68
69       ##
70       # Returns the configuration of the handler.  Configuration options that
71       # are not recognized by the handler are ignored.
72       #
73       # @return [Hash] The configuration options.
74       def options
75         return @options
76       end
77
78       ##
79       # Returns the URI of the discovery document.
80       #
81       # @return [String] The URI of the discovery document.
82       def discovery_uri
83         return @options[:discovery_uri]
84       end
85     end
86   end
87 end