diff --git a/bin/google-api b/bin/google-api index a017685ee..f34ebba04 100755 --- a/bin/google-api +++ b/bin/google-api @@ -132,6 +132,11 @@ HTML "Sets the URI to perform a request against") do |u| options[:uri] = u end + opts.on( + "--discovery-uri ", String, + "Sets the URI to perform discovery") do |u| + options[:discovery_uri] = u + end opts.on( "-m", "--method ", String, "Sets the HTTP method to use for the request") do |m| @@ -264,10 +269,17 @@ HTML def list service_name = options[:service_name] + unless service_name + STDERR.puts('No service name supplied.') + exit(1) + end client = Google::APIClient.new( :service => service_name, :authorization => nil ) + if options[:discovery_uri] + client.discovery_uri = options[:discovery_uri] + end service_version = options[:service_version] || client.latest_service_version(service_name).version @@ -334,6 +346,9 @@ HTML method ||= request_body == '' ? 'GET' : 'POST' method.upcase! client = Google::APIClient.new(:authorization => authorization_type) + if options[:discovery_uri] + client.discovery_uri = options[:discovery_uri] + end configure_authorization.call(client) if signed request = [method, uri.to_str, headers, [request_body]] request = client.sign_request(request) @@ -353,6 +368,9 @@ HTML :service => service_name, :authorization => authorization_type ) + if options[:discovery_uri] + client.discovery_uri = options[:discovery_uri] + end configure_authorization.call(client) if signed service_version = options[:service_version] || diff --git a/lib/google/api_client.rb b/lib/google/api_client.rb index 177f60878..32da5f9eb 100644 --- a/lib/google/api_client.rb +++ b/lib/google/api_client.rb @@ -131,6 +131,15 @@ module Google end) end + ## + # Sets the discovery URI for the client. + # + # @param [Addressable::URI, #to_str, String] new_discovery_uri + # The new discovery URI. + def discovery_uri=(new_discovery_uri) + @options[:discovery_uri] = Addressable::URI.parse(new_discovery_uri) + end + ## # Returns the parsed discovery document. # diff --git a/lib/google/api_client/discovery.rb b/lib/google/api_client/discovery.rb index cb33d28f6..3de33bcef 100644 --- a/lib/google/api_client/discovery.rb +++ b/lib/google/api_client/discovery.rb @@ -155,7 +155,11 @@ module Google split_version = lambda do |version| dotted_version = version[/^v?(\d+(.\d+)*)-?(.*?)?$/, 1] suffix = version[/^v?(\d+(.\d+)*)-?(.*?)?$/, 3] - [dotted_version.split('.').map { |v| v.to_i }, suffix] + if dotted_version && suffix + [dotted_version.split('.').map { |v| v.to_i }, suffix] + else + [[-1], version] + end end self_sortable, self_suffix = split_version.call(self.version) other_sortable, other_suffix = split_version.call(other.version) diff --git a/spec/google/api_client/discovery_spec.rb b/spec/google/api_client/discovery_spec.rb index 46d628101..2d8d32f4f 100644 --- a/spec/google/api_client/discovery_spec.rb +++ b/spec/google/api_client/discovery_spec.rb @@ -156,6 +156,8 @@ describe Google::APIClient, 'configured for the prediction API' do Google::APIClient::Service.new('two', 'v2', {}) @client.discovered_services << Google::APIClient::Service.new('two', 'v2beta1', {}) + @client.discovered_services << + Google::APIClient::Service.new('two', 'test2', {}) @client.latest_service_version('two').version.should == 'v2' end