From 0ee39c67feb7a7d35a9b6a655e95f4907164c5b7 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 31 Mar 2015 01:28:33 +0800 Subject: [PATCH] fix rspec, update ruby client default configuration --- .../ruby/swagger/configuration.mustache | 6 +- .../resources/ruby/swagger/request.mustache | 5 +- samples/client/petstore/ruby/Gemfile.lock | 54 +++-- .../ruby/lib/swagger/configuration.rb | 6 +- .../petstore/ruby/lib/swagger/request.rb | 5 +- samples/client/petstore/ruby/models/pet.rb | 1 - samples/client/petstore/ruby/spec/pet_spec.rb | 38 ++-- .../client/petstore/ruby/spec/request_spec.rb | 21 +- .../petstore/ruby/spec/response_spec.rb | 10 +- .../client/petstore/ruby/spec/spec_helper.rb | 7 + .../petstore/ruby/swagger/configuration.rb | 22 -- .../client/petstore/ruby/swagger/request.rb | 199 ------------------ .../client/petstore/ruby/swagger/response.rb | 70 ------ .../client/petstore/ruby/swagger/version.rb | 4 - 14 files changed, 89 insertions(+), 359 deletions(-) delete mode 100644 samples/client/petstore/ruby/swagger/configuration.rb delete mode 100644 samples/client/petstore/ruby/swagger/request.rb delete mode 100644 samples/client/petstore/ruby/swagger/response.rb delete mode 100644 samples/client/petstore/ruby/swagger/version.rb diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache index 1cf6e0dfa0e..2a3728483f5 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache @@ -9,10 +9,10 @@ module Swagger def initialize @format = 'json' @scheme = 'http' - @host = 'api.wordnik.com' - @base_path = '/v4' + @host = 'petstore.swagger.io' + @base_path = '/v2' @user_agent = "ruby-swagger-#{Swagger::VERSION}" - @inject_format = true + @inject_format = false @force_ending_format = false @camelize_params = true end diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache index 34401827982..fb1c57298bb 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -157,8 +157,9 @@ module Swagger end def make - logger = Logger.new STDOUT - logger.debug self.url + #TODO use configuration setting to determine if debugging + #logger = Logger.new STDOUT + #logger.debug self.url response = case self.http_method.to_sym when :get,:GET Typhoeus::Request.get( diff --git a/samples/client/petstore/ruby/Gemfile.lock b/samples/client/petstore/ruby/Gemfile.lock index f90e3382ed2..2fb53785500 100644 --- a/samples/client/petstore/ruby/Gemfile.lock +++ b/samples/client/petstore/ruby/Gemfile.lock @@ -9,35 +9,43 @@ PATH GEM remote: http://rubygems.org/ specs: - ZenTest (4.7.0) - addressable (2.2.8) + ZenTest (4.11.0) + addressable (2.3.8) autotest (4.4.6) ZenTest (>= 4.4.1) - autotest-fsevent (0.2.8) + autotest-fsevent (0.2.10) sys-uname autotest-growl (0.2.16) autotest-rails-pure (4.1.2) - crack (0.3.1) - diff-lcs (1.1.3) - ffi (1.0.11) - json (1.7.0) - mime-types (1.18) - rspec (2.9.0) - rspec-core (~> 2.9.0) - rspec-expectations (~> 2.9.0) - rspec-mocks (~> 2.9.0) - rspec-core (2.9.0) - rspec-expectations (2.9.1) - diff-lcs (~> 1.1.3) - rspec-mocks (2.9.0) - sys-uname (0.9.0) + crack (0.4.2) + safe_yaml (~> 1.0.0) + diff-lcs (1.2.5) + ethon (0.7.3) + ffi (>= 1.3.0) + ffi (1.9.8) + json (1.8.2) + rspec (3.2.0) + rspec-core (~> 3.2.0) + rspec-expectations (~> 3.2.0) + rspec-mocks (~> 3.2.0) + rspec-core (3.2.2) + rspec-support (~> 3.2.0) + rspec-expectations (3.2.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.2.0) + rspec-mocks (3.2.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.2.0) + rspec-support (3.2.2) + safe_yaml (1.0.4) + sys-uname (0.9.2) ffi (>= 1.0.0) - typhoeus (0.3.3) - mime-types - vcr (2.1.1) - webmock (1.8.6) - addressable (>= 2.2.7) - crack (>= 0.1.7) + typhoeus (0.7.1) + ethon (>= 0.7.1) + vcr (2.9.3) + webmock (1.21.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) PLATFORMS ruby diff --git a/samples/client/petstore/ruby/lib/swagger/configuration.rb b/samples/client/petstore/ruby/lib/swagger/configuration.rb index 1cf6e0dfa0e..2a3728483f5 100644 --- a/samples/client/petstore/ruby/lib/swagger/configuration.rb +++ b/samples/client/petstore/ruby/lib/swagger/configuration.rb @@ -9,10 +9,10 @@ module Swagger def initialize @format = 'json' @scheme = 'http' - @host = 'api.wordnik.com' - @base_path = '/v4' + @host = 'petstore.swagger.io' + @base_path = '/v2' @user_agent = "ruby-swagger-#{Swagger::VERSION}" - @inject_format = true + @inject_format = false @force_ending_format = false @camelize_params = true end diff --git a/samples/client/petstore/ruby/lib/swagger/request.rb b/samples/client/petstore/ruby/lib/swagger/request.rb index 34401827982..fb1c57298bb 100644 --- a/samples/client/petstore/ruby/lib/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/swagger/request.rb @@ -157,8 +157,9 @@ module Swagger end def make - logger = Logger.new STDOUT - logger.debug self.url + #TODO use configuration setting to determine if debugging + #logger = Logger.new STDOUT + #logger.debug self.url response = case self.http_method.to_sym when :get,:GET Typhoeus::Request.get( diff --git a/samples/client/petstore/ruby/models/pet.rb b/samples/client/petstore/ruby/models/pet.rb index 38767b46dd7..95de114ec74 100644 --- a/samples/client/petstore/ruby/models/pet.rb +++ b/samples/client/petstore/ruby/models/pet.rb @@ -17,7 +17,6 @@ class Pet def initialize(attributes = {}) return if attributes.empty? # Morph attribute keys into undescored rubyish style - if self.class.attribute_map[:"id"] @id = attributes["id"] end diff --git a/samples/client/petstore/ruby/spec/pet_spec.rb b/samples/client/petstore/ruby/spec/pet_spec.rb index eaa9ebb05fe..63753b8c89c 100644 --- a/samples/client/petstore/ruby/spec/pet_spec.rb +++ b/samples/client/petstore/ruby/spec/pet_spec.rb @@ -4,30 +4,30 @@ describe "Pet" do before do Swagger.configure do |config| config.api_key = 'special-key' - config.host = 'petstore.swagger.wordnik.com' - config.base_path = '/api' + config.host = 'petstore.swagger.io' + config.base_path = '/v2' end end describe "pet methods" do it "should fetch a pet object" do - pet = Pet_api.get_pet_by_id(1) - pet.id.should == 1 - pet.name.should == "Cat 1" + pet = PetApi.getPetById(5) + pet.id.should == 5 + pet.name.should == "Dog 2" end it "should find pets by status" do - pets = Pet_api.find_pets_by_status('available') + pets = PetApi.findPetsByStatus('available') pets.length.should >= 3 end it "should not find a pet with invalid status" do - pets = Pet_api.find_pets_by_status('dead') + pets = PetApi.findPetsByStatus('dead') pets.length.should == 0 end it "should find a pet by status" do - pets = Pet_api.find_pets_by_status("available,sold") + pets = PetApi.findPetsByStatus("available,sold") pets.map {|pet| if(pet.status != 'available' && pet.status != 'sold') raise "pet status wasn't right" @@ -36,19 +36,19 @@ describe "Pet" do end it "should update a pet" do - pet = Pet.new({:id => 99, :name => 'programmer', :status => 'coding'}) - Pet_api.add_pet(pet) + pet = Pet.new({'id' => 99, 'name' => 'programmer', 'status' => 'coding'}) + PetApi.addPet(pet) - fetched = Pet_api.get_pet_by_id(99) + fetched = PetApi.getPetById(99) fetched.id.should == 99 end it "should create a pet" do - pet = Pet.new({:id => 100, :name => "Gorilla"}) - raise pet.inspect - Pet_api.add_pet(pet) + pet = Pet.new('id' => 100, 'name' => "Gorilla") + #raise pet.inspect + PetApi.addPet(pet) - pet = Pet_api.get_pet_by_id(100) + pet = PetApi.getPetById(100) pet.id.should == 100 end end @@ -58,13 +58,13 @@ describe "Store" do before do Swagger.configure do |config| config.api_key = 'special-key' - config.host = 'petstore.swagger.wordnik.com' - config.base_path = '/api' + config.host = 'petstore.swagger.io' + config.base_path = '/v2' end end it "should fetch an order" do - item = Store_api.get_order_by_id(1) + item = StoreApi.getOrderById(1) item.id.should == 1 end -end \ No newline at end of file +end diff --git a/samples/client/petstore/ruby/spec/request_spec.rb b/samples/client/petstore/ruby/spec/request_spec.rb index e2afd126873..f81716f792c 100644 --- a/samples/client/petstore/ruby/spec/request_spec.rb +++ b/samples/client/petstore/ruby/spec/request_spec.rb @@ -2,9 +2,16 @@ require 'spec_helper' describe Swagger::Request do - before(:each) do + before(:each) do + Swagger.configure do |config| + inject_format = true + config.api_key = 'special-key' + config.host = 'petstore.swagger.io' + config.base_path = '/v2' + end + @default_http_method = :get - @default_path = "pet/fancy" + @default_path = "pet.{format}/fancy" @default_params = { :params => {:foo => "1", :bar => "2"} } @@ -44,7 +51,7 @@ describe Swagger::Request do end it "constructs a full url" do - @request.url.should == "http://petstore.swagger.wordnik.com/api/pet.json/fancy?bar=2&foo=1" + @request.url.should == "http://petstore.swagger.io/v2/pet.json/fancy?bar=2&foo=1" end end @@ -66,13 +73,13 @@ describe Swagger::Request do describe "path" do it "accounts for a total absence of format in the path string" do - @request = Swagger::Request.new(:get, "/word/{word}/entries", @default_params.merge({ + @request = Swagger::Request.new(:get, "/word.{format}/{word}/entries", @default_params.merge({ :format => "xml", :params => { :word => "cat" } })) - @request.url.should == "http://petstore.swagger.wordnik.com/api/word.xml/cat/entries" + @request.url.should == "http://petstore.swagger.io/v2/word.xml/cat/entries" end it "does string substitution on path params" do @@ -82,7 +89,7 @@ describe Swagger::Request do :word => "cat" } })) - @request.url.should == "http://petstore.swagger.wordnik.com/api/word.xml/cat/entries" + @request.url.should == "http://petstore.swagger.io/v2/word.xml/cat/entries" end it "leaves path-bound params out of the query string" do @@ -193,4 +200,4 @@ describe Swagger::Request do end -end \ No newline at end of file +end diff --git a/samples/client/petstore/ruby/spec/response_spec.rb b/samples/client/petstore/ruby/spec/response_spec.rb index 1092ee9d198..92790c9e901 100644 --- a/samples/client/petstore/ruby/spec/response_spec.rb +++ b/samples/client/petstore/ruby/spec/response_spec.rb @@ -5,7 +5,8 @@ describe Swagger::Response do before(:each) do VCR.use_cassette('pet_resource', :record => :new_episodes) do - @raw = Typhoeus::Request.get("http://petstore.swagger.wordnik.com/api/pet.json") + #@raw = Typhoeus::Request.get("http://petstore.swagger.wordnik.com/api/pet.json") + @raw = Typhoeus::Request.get("http://petstore.swagger.io/v2/pet/5") end @response = Swagger::Response.new(@raw) @@ -14,7 +15,7 @@ describe Swagger::Response do describe "initialization" do it "sets body" do @response.body.class.should == Hash - @response.body.has_key?('apis').should == true + @response.body.has_key?('name').should == true end it "sets code" do @@ -35,7 +36,8 @@ describe Swagger::Response do it "recognizes xml" do VCR.use_cassette('xml_response_request', :record => :new_episodes) do - @raw = Typhoeus::Request.get("http://petstore.swagger.wordnik.com/api/pet.xml") + @raw = Typhoeus::Request.get("http://petstore.swagger.io/v2/pet/5", + :headers => {'Accept'=> "application/xml"}) end @response = Swagger::Response.new(@raw) @response.format.should == 'xml' @@ -56,4 +58,4 @@ describe Swagger::Response do end -end \ No newline at end of file +end diff --git a/samples/client/petstore/ruby/spec/spec_helper.rb b/samples/client/petstore/ruby/spec/spec_helper.rb index 926f8e2abd6..dbdcdeda579 100644 --- a/samples/client/petstore/ruby/spec/spec_helper.rb +++ b/samples/client/petstore/ruby/spec/spec_helper.rb @@ -14,8 +14,15 @@ Dir[File.join(File.dirname(__FILE__), "../resources/*.rb")].each {|file| require RSpec.configure do |config| # some (optional) config here + config.expect_with :rspec do |c| + c.syntax = :should + end + config.mock_with :rspec do |c| + c.syntax = :should + end end + WebMock.allow_net_connect! if defined? WebMock def help diff --git a/samples/client/petstore/ruby/swagger/configuration.rb b/samples/client/petstore/ruby/swagger/configuration.rb deleted file mode 100644 index c0b3c46268c..00000000000 --- a/samples/client/petstore/ruby/swagger/configuration.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Swagger - - class Configuration - require 'swagger/version' - - attr_accessor :format, :api_key, :username, :password, :auth_token, :scheme, :host, :base_path, :user_agent, :logger, :inject_format, :force_ending_format, :camelize_params - - # Defaults go in here.. - def initialize - @format = 'json' - @scheme = 'http' - @host = 'api.wordnik.com' - @base_path = '/v4' - @user_agent = "ruby-#{Swagger::VERSION}" - @inject_format = true - @force_ending_format = false - @camelize_params = true - end - - end - -end \ No newline at end of file diff --git a/samples/client/petstore/ruby/swagger/request.rb b/samples/client/petstore/ruby/swagger/request.rb deleted file mode 100644 index 7836cb0bf03..00000000000 --- a/samples/client/petstore/ruby/swagger/request.rb +++ /dev/null @@ -1,199 +0,0 @@ -module Swagger - - class Request - require 'uri' - require 'addressable/uri' - require 'typhoeus' - require "swagger/version" - - attr_accessor :host, :path, :format, :params, :body, :http_method, :headers - - - # All requests must have an HTTP method and a path - # Optionals parameters are :params, :headers, :body, :format, :host - # - def initialize(http_method, path, attributes={}) - attributes[:format] ||= Swagger.configuration.format - attributes[:params] ||= {} - - # Set default headers - default_headers = { - 'Content-Type' => "application/#{attributes[:format].downcase}", - :api_key => Swagger.configuration.api_key - } - - # api_key from headers hash trumps the default, even if its value is blank - if attributes[:headers].present? && attributes[:headers].has_key?(:api_key) - default_headers.delete(:api_key) - end - - # api_key from params hash trumps all others (headers and default_headers) - if attributes[:params].present? && attributes[:params].has_key?(:api_key) - default_headers.delete(:api_key) - attributes[:headers].delete(:api_key) if attributes[:headers].present? - end - - # Merge argument headers into defaults - attributes[:headers] = default_headers.merge(attributes[:headers] || {}) - - # Stick in the auth token if there is one - if Swagger.authenticated? - attributes[:headers].merge!({:auth_token => Swagger.configuration.auth_token}) - end - - self.http_method = http_method.to_sym - self.path = path - attributes.each do |name, value| - send("#{name.to_s.underscore.to_sym}=", value) - end - end - - # Construct a base URL - # - def url(options = {}) - u = Addressable::URI.new( - :scheme => Swagger.configuration.scheme, - :host => Swagger.configuration.host, - :path => self.interpreted_path, - :query => self.query_string.sub(/\?/, '') - ).to_s - - # Drop trailing question mark, if present - u.sub! /\?$/, '' - - # Obfuscate API key? - u.sub! /api\_key=\w+/, 'api_key=YOUR_API_KEY' if options[:obfuscated] - - u - end - - # Iterate over the params hash, injecting any path values into the path string - # - # e.g. /word.{format}/{word}/entries => /word.json/cat/entries - def interpreted_path - p = self.path.dup - - # Fill in the path params - self.params.each_pair do |key, value| - p = p.gsub("{#{key}}", value.to_s) - end - - # Stick a .{format} placeholder into the path if there isn't - # one already or an actual format like json or xml - # e.g. /words/blah => /words.{format}/blah - if Swagger.configuration.inject_format - unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s } - p = p.sub(/^(\/?\w+)/, "\\1.#{format}") - end - end - - # Stick a .{format} placeholder on the end of the path if there isn't - # one already or an actual format like json or xml - # e.g. /words/blah => /words/blah.{format} - if Swagger.configuration.force_ending_format - unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s } - p = "#{p}.#{format}" - end - end - - p = p.sub("{format}", self.format.to_s) - - URI.encode [Swagger.configuration.base_path, p].join("/").gsub(/\/+/, '/') - end - - # Massage the request body into a state of readiness - # If body is a hash, camelize all keys then convert to a json string - # - def body=(value) - if value.is_a?(Hash) - value = value.inject({}) do |memo, (k,v)| - memo[k.to_s.camelize(:lower).to_sym] = v - memo - end - end - @body = value - end - - # If body is an object, JSONify it before making the actual request. - # - def outgoing_body - body.is_a?(String) ? body : body.to_json - end - - # Construct a query string from the query-string-type params - def query_string - - # Iterate over all params, - # .. removing the ones that are part of the path itself. - # .. stringifying values so Addressable doesn't blow up. - query_values = {} - self.params.each_pair do |key, value| - next if self.path.include? "{#{key}}" # skip path params - next if value.blank? && value.class != FalseClass # skip empties - if Swagger.configuration.camelize_params - key = key.to_s.camelize(:lower).to_sym unless key.to_sym == :api_key # api_key is not a camelCased param - end - query_values[key] = value.to_s - end - - # We don't want to end up with '?' as our query string - # if there aren't really any params - return "" if query_values.blank? - - # Addressable requires query_values to be set after initialization.. - qs = Addressable::URI.new - qs.query_values = query_values - qs.to_s - end - - def make - logger = Logger.new STDOUT - logger.debug self.url - response = case self.http_method.to_sym - when :get,:GET - Typhoeus::Request.get( - self.url, - :headers => self.headers.stringify_keys, - ) - - when :post,:POST - Typhoeus::Request.post( - self.url, - :body => self.outgoing_body, - :headers => self.headers.stringify_keys, - ) - - when :put,:PUT - Typhoeus::Request.put( - self.url, - :body => self.outgoing_body, - :headers => self.headers.stringify_keys, - ) - - when :delete,:DELETE - Typhoeus::Request.delete( - self.url, - :body => self.outgoing_body, - :headers => self.headers.stringify_keys, - ) - end - Response.new(response) - end - - def response - self.make - end - - def response_code_pretty - return unless @response.present? - @response.code.to_s - end - - def response_headers_pretty - return unless @response.present? - # JSON.pretty_generate(@response.headers).gsub(/\n/, '
') # <- This was for RestClient - @response.headers.gsub(/\n/, '
') # <- This is for Typhoeus - end - - end -end \ No newline at end of file diff --git a/samples/client/petstore/ruby/swagger/response.rb b/samples/client/petstore/ruby/swagger/response.rb deleted file mode 100644 index 02a1a458eb4..00000000000 --- a/samples/client/petstore/ruby/swagger/response.rb +++ /dev/null @@ -1,70 +0,0 @@ -module Swagger - - class Response - require 'json' - - attr_accessor :raw - - def initialize(raw) - self.raw = raw - - case self.code - when 500..510 then raise(ServerError, self.error_message) - when 299..426 then raise(ClientError, self.error_message) - end - end - - def code - raw.code - end - - # Account for error messages that take different forms... - def error_message - body['message'] - rescue - body - end - - # If body is JSON, parse it - # Otherwise return raw string - def body - JSON.parse raw.body - rescue - raw.body - end - - # `headers_hash` is a Typhoeus-specific extension of Hash, - # so simplify it back into a regular old Hash. - def headers - h = {} - raw.headers_hash.each {|k,v| h[k] = v } - h - end - - # Extract the response format from the header hash - # e.g. {'Content-Type' => 'application/json'} - def format - headers['Content-Type'].split("/").last.downcase - end - - def json? - format == 'json' - end - - def xml? - format == 'xml' - end - - def pretty_body - return unless body.present? - case format - when 'json' then JSON.pretty_generate(body).gsub(/\n/, '
') - end - end - - def pretty_headers - JSON.pretty_generate(headers).gsub(/\n/, '
') - end - - end -end \ No newline at end of file diff --git a/samples/client/petstore/ruby/swagger/version.rb b/samples/client/petstore/ruby/swagger/version.rb deleted file mode 100644 index 39357c0ed6d..00000000000 --- a/samples/client/petstore/ruby/swagger/version.rb +++ /dev/null @@ -1,4 +0,0 @@ -module Swagger - VERSION = "4.06.08" -end -