From 229ea9362760ce23d26f2891a29d70b68614c70f Mon Sep 17 00:00:00 2001 From: xhh Date: Sat, 20 Jun 2015 12:16:53 +0800 Subject: [PATCH 01/19] Add debugging switch to Ruby generator --- .../src/main/resources/ruby/swagger.mustache | 6 +---- .../ruby/swagger/configuration.mustache | 12 +++++++++- .../resources/ruby/swagger/request.mustache | 23 ++++++++++++------- samples/client/petstore/ruby/README.md | 4 +++- .../ruby/lib/swagger_client/swagger.rb | 6 +---- .../swagger_client/swagger/configuration.rb | 12 +++++++++- .../lib/swagger_client/swagger/request.rb | 23 ++++++++++++------- 7 files changed, 57 insertions(+), 29 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache index 239e3cfac268..21c4e8cd04ec 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache @@ -1,6 +1,3 @@ -require 'logger' -require 'json' - module {{moduleName}} module Swagger class << self @@ -25,8 +22,7 @@ module {{moduleName}} def configure yield(configuration) if block_given? - # Configure logger. Default to use Rails - self.logger ||= configuration.logger || (defined?(Rails) ? Rails.logger : Logger.new(STDOUT)) + self.logger = configuration.logger # remove :// from scheme configuration.scheme.sub!(/:\/\//, '') 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 e9a8af9c1628..485bcb3cf814 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache @@ -1,7 +1,11 @@ +require 'logger' + module {{moduleName}} module Swagger class Configuration - attr_accessor :format, :api_key, :api_key_prefix, :username, :password, :auth_token, :scheme, :host, :base_path, :user_agent, :logger, :inject_format, :force_ending_format, :camelize_params, :user_agent, :verify_ssl + attr_accessor :format, :api_key, :api_key_prefix, :username, :password, :auth_token, + :scheme, :host, :base_path, :user_agent, :debug, :logger, :inject_format, + :force_ending_format, :camelize_params, :user_agent, :verify_ssl # Defaults go in here.. def initialize @@ -23,6 +27,12 @@ module {{moduleName}} # Note: do NOT set it to false in production code, otherwise you would # face multiple types of cryptographic attacks @verify_ssl = true + + # whether to enable debugging + @debug = false + + # configure logger, default to logger of Rails (if in Rails) or STDOUT + @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT) end end 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 99b58d58be85..70eb319ed954 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -125,12 +125,17 @@ module {{moduleName}} data.each do |key, value| data[key] = value.to_s if value && !value.is_a?(File) # remove emtpy form parameter end - data elsif @body # http body is JSON - @body.is_a?(String) ? @body : @body.to_json + data = @body.is_a?(String) ? @body : @body.to_json else - nil + data = nil end + + if Swagger.configuration.debug + Swagger.logger.debug "HTTP request body param ~BEGIN~\n#{data}\n~END~\n" + end + + data end # Construct a query string from the query-string-type params @@ -159,13 +164,10 @@ module {{moduleName}} end def make - #TODO use configuration setting to determine if debugging - #logger = Logger.new STDOUT - #logger.debug self.url - request_options = { :ssl_verifypeer => Swagger.configuration.verify_ssl, - :headers => self.headers.stringify_keys + :headers => self.headers.stringify_keys, + :verbose => Swagger.configuration.debug } response = case self.http_method.to_sym when :get,:GET @@ -198,6 +200,11 @@ module {{moduleName}} request_options.merge(:body => self.outgoing_body) ) end + + if Swagger.configuration.debug + Swagger.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n" + end + Response.new(response) end diff --git a/samples/client/petstore/ruby/README.md b/samples/client/petstore/ruby/README.md index 2a15c1661ccd..06ba93a5abc6 100644 --- a/samples/client/petstore/ruby/README.md +++ b/samples/client/petstore/ruby/README.md @@ -43,9 +43,11 @@ ruby -Ilib script.rb require 'swagger_client' SwaggerClient::Swagger.configure do |config| - config.api_key = 'special-key' + config.api_key['api_key'] = 'special-key' config.host = 'petstore.swagger.io' config.base_path = '/v2' + # enable debugging (default is false) + config.debug = true end ``` diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger.rb index 477ec89ba819..e6c1ca510968 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger.rb @@ -1,6 +1,3 @@ -require 'logger' -require 'json' - module SwaggerClient module Swagger class << self @@ -25,8 +22,7 @@ module SwaggerClient def configure yield(configuration) if block_given? - # Configure logger. Default to use Rails - self.logger ||= configuration.logger || (defined?(Rails) ? Rails.logger : Logger.new(STDOUT)) + self.logger = configuration.logger # remove :// from scheme configuration.scheme.sub!(/:\/\//, '') diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb index a2d4fe0e2918..b4d8b33d90db 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb @@ -1,7 +1,11 @@ +require 'logger' + module SwaggerClient module Swagger class Configuration - attr_accessor :format, :api_key, :api_key_prefix, :username, :password, :auth_token, :scheme, :host, :base_path, :user_agent, :logger, :inject_format, :force_ending_format, :camelize_params, :user_agent, :verify_ssl + attr_accessor :format, :api_key, :api_key_prefix, :username, :password, :auth_token, + :scheme, :host, :base_path, :user_agent, :debug, :logger, :inject_format, + :force_ending_format, :camelize_params, :user_agent, :verify_ssl # Defaults go in here.. def initialize @@ -23,6 +27,12 @@ module SwaggerClient # Note: do NOT set it to false in production code, otherwise you would # face multiple types of cryptographic attacks @verify_ssl = true + + # whether to enable debugging + @debug = false + + # configure logger, default to logger of Rails (if in Rails) or STDOUT + @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT) end end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb index 4cd5d84b0b9b..2e669df60cb0 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb @@ -124,12 +124,17 @@ module SwaggerClient data.each do |key, value| data[key] = value.to_s if value && !value.is_a?(File) # remove emtpy form parameter end - data elsif @body # http body is JSON - @body.is_a?(String) ? @body : @body.to_json + data = @body.is_a?(String) ? @body : @body.to_json else - nil + data = nil end + + if Swagger.configuration.debug + Swagger.logger.debug "HTTP request body param ~BEGIN~\n#{data}\n~END~\n" + end + + data end # Construct a query string from the query-string-type params @@ -158,13 +163,10 @@ module SwaggerClient end def make - #TODO use configuration setting to determine if debugging - #logger = Logger.new STDOUT - #logger.debug self.url - request_options = { :ssl_verifypeer => Swagger.configuration.verify_ssl, - :headers => self.headers.stringify_keys + :headers => self.headers.stringify_keys, + :verbose => Swagger.configuration.debug } response = case self.http_method.to_sym when :get,:GET @@ -197,6 +199,11 @@ module SwaggerClient request_options.merge(:body => self.outgoing_body) ) end + + if Swagger.configuration.debug + Swagger.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n" + end + Response.new(response) end From 3b6a3b4a38aba47e7bf9a3d7a8f2e80753c15d02 Mon Sep 17 00:00:00 2001 From: xhh Date: Sat, 20 Jun 2015 12:52:33 +0800 Subject: [PATCH 02/19] Add logging for API call entry and result --- .../src/main/resources/ruby/api.mustache | 12 +++- .../ruby/lib/swagger_client/api/pet_api.rb | 67 ++++++++++++++++--- .../ruby/lib/swagger_client/api/store_api.rb | 35 ++++++++-- .../ruby/lib/swagger_client/api/user_api.rb | 66 +++++++++++++++--- 4 files changed, 159 insertions(+), 21 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index 531f8710e696..af87882fbe1a 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -14,6 +14,9 @@ module {{moduleName}} {{#allParams}}{{^required}} # @option opts [{{{dataType}}}] :{{paramName}} {{description}} {{/required}}{{/allParams}} # @return [{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}nil{{/returnType}}] def self.{{nickname}}({{#allParams}}{{#required}}{{paramName}}, {{/required}}{{/allParams}}opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: {{classname}}#{{nickname}} ..." + end {{#allParams}}{{#required}} # verify the required parameter '{{paramName}}' is set raise "Missing the required parameter '{{paramName}}' when calling {{nickname}}" if {{{paramName}}}.nil? @@ -52,7 +55,14 @@ module {{moduleName}} auth_names = [{{#authMethods}}'{{name}}'{{#hasMore}}, {{/hasMore}}{{/authMethods}}] {{#returnType}}response = Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('{{{returnType}}}'){{/returnType}}{{^returnType}}Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + result = response.deserialize('{{{returnType}}}') + if Swagger.configuration.debug + Swagger.logger.debug "API called: {{classname}}#{{nickname}}. Result: #{result.inspect}" + end + result{{/returnType}}{{^returnType}}Swagger::Request.new(:{{httpMethod}}, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: {{classname}}#{{nickname}}" + end nil{{/returnType}} end {{/operation}} diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb index 4a421faef86a..8ec023a6f779 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb @@ -11,6 +11,9 @@ module SwaggerClient # @option opts [Pet] :body Pet object that needs to be added to the store # @return [nil] def self.update_pet(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#update_pet ..." + end # resource path @@ -38,7 +41,10 @@ module SwaggerClient auth_names = ['petstore_auth'] - Swagger::Request.new(:PUT, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:PUT, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#update_pet" + end nil end @@ -48,6 +54,9 @@ module SwaggerClient # @option opts [Pet] :body Pet object that needs to be added to the store # @return [nil] def self.add_pet(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#add_pet ..." + end # resource path @@ -75,7 +84,10 @@ module SwaggerClient auth_names = ['petstore_auth'] - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#add_pet" + end nil end @@ -85,6 +97,9 @@ module SwaggerClient # @option opts [Array] :status Status values that need to be considered for filter # @return [Array] def self.find_pets_by_status(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#find_pets_by_status ..." + end # resource path @@ -114,7 +129,11 @@ module SwaggerClient auth_names = ['petstore_auth'] response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('Array') + result = response.deserialize('Array') + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#find_pets_by_status. Result: #{result.inspect}" + end + result end # Finds Pets by tags @@ -123,6 +142,9 @@ module SwaggerClient # @option opts [Array] :tags Tags to filter by # @return [Array] def self.find_pets_by_tags(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#find_pets_by_tags ..." + end # resource path @@ -152,7 +174,11 @@ module SwaggerClient auth_names = ['petstore_auth'] response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('Array') + result = response.deserialize('Array') + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#find_pets_by_tags. Result: #{result.inspect}" + end + result end # Find pet by ID @@ -161,6 +187,9 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @return [Pet] def self.get_pet_by_id(pet_id, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#get_pet_by_id ..." + end # verify the required parameter 'pet_id' is set raise "Missing the required parameter 'pet_id' when calling get_pet_by_id" if pet_id.nil? @@ -192,7 +221,11 @@ module SwaggerClient auth_names = ['api_key', 'petstore_auth'] response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('Pet') + result = response.deserialize('Pet') + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#get_pet_by_id. Result: #{result.inspect}" + end + result end # Updates a pet in the store with form data @@ -203,6 +236,9 @@ module SwaggerClient # @option opts [String] :status Updated status of the pet # @return [nil] def self.update_pet_with_form(pet_id, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#update_pet_with_form ..." + end # verify the required parameter 'pet_id' is set raise "Missing the required parameter 'pet_id' when calling update_pet_with_form" if pet_id.nil? @@ -235,7 +271,10 @@ module SwaggerClient auth_names = ['petstore_auth'] - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#update_pet_with_form" + end nil end @@ -246,6 +285,9 @@ module SwaggerClient # @option opts [String] :api_key # @return [nil] def self.delete_pet(pet_id, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#delete_pet ..." + end # verify the required parameter 'pet_id' is set raise "Missing the required parameter 'pet_id' when calling delete_pet" if pet_id.nil? @@ -277,7 +319,10 @@ module SwaggerClient auth_names = ['petstore_auth'] - Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:DELETE, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#delete_pet" + end nil end @@ -289,6 +334,9 @@ module SwaggerClient # @option opts [file] :file file to upload # @return [nil] def self.upload_file(pet_id, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: PetApi#upload_file ..." + end # verify the required parameter 'pet_id' is set raise "Missing the required parameter 'pet_id' when calling upload_file" if pet_id.nil? @@ -321,7 +369,10 @@ module SwaggerClient auth_names = ['petstore_auth'] - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: PetApi#upload_file" + end nil end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb index a97f981f878f..7581c4d36d69 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb @@ -10,6 +10,9 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @return [Hash] def self.get_inventory(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: StoreApi#get_inventory ..." + end # resource path @@ -38,7 +41,11 @@ module SwaggerClient auth_names = ['api_key'] response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('Hash') + result = response.deserialize('Hash') + if Swagger.configuration.debug + Swagger.logger.debug "API called: StoreApi#get_inventory. Result: #{result.inspect}" + end + result end # Place an order for a pet @@ -47,6 +54,9 @@ module SwaggerClient # @option opts [Order] :body order placed for purchasing the pet # @return [Order] def self.place_order(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: StoreApi#place_order ..." + end # resource path @@ -75,7 +85,11 @@ module SwaggerClient auth_names = [] response = Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('Order') + result = response.deserialize('Order') + if Swagger.configuration.debug + Swagger.logger.debug "API called: StoreApi#place_order. Result: #{result.inspect}" + end + result end # Find purchase order by ID @@ -84,6 +98,9 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @return [Order] def self.get_order_by_id(order_id, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: StoreApi#get_order_by_id ..." + end # verify the required parameter 'order_id' is set raise "Missing the required parameter 'order_id' when calling get_order_by_id" if order_id.nil? @@ -115,7 +132,11 @@ module SwaggerClient auth_names = [] response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('Order') + result = response.deserialize('Order') + if Swagger.configuration.debug + Swagger.logger.debug "API called: StoreApi#get_order_by_id. Result: #{result.inspect}" + end + result end # Delete purchase order by ID @@ -124,6 +145,9 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @return [nil] def self.delete_order(order_id, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: StoreApi#delete_order ..." + end # verify the required parameter 'order_id' is set raise "Missing the required parameter 'order_id' when calling delete_order" if order_id.nil? @@ -154,7 +178,10 @@ module SwaggerClient auth_names = [] - Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:DELETE, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: StoreApi#delete_order" + end nil end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb index 8337a8b9dd0f..48407491fba9 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb @@ -11,6 +11,9 @@ module SwaggerClient # @option opts [User] :body Created user object # @return [nil] def self.create_user(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#create_user ..." + end # resource path @@ -38,7 +41,10 @@ module SwaggerClient auth_names = [] - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#create_user" + end nil end @@ -48,6 +54,9 @@ module SwaggerClient # @option opts [Array] :body List of user object # @return [nil] def self.create_users_with_array_input(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#create_users_with_array_input ..." + end # resource path @@ -75,7 +84,10 @@ module SwaggerClient auth_names = [] - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#create_users_with_array_input" + end nil end @@ -85,6 +97,9 @@ module SwaggerClient # @option opts [Array] :body List of user object # @return [nil] def self.create_users_with_list_input(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#create_users_with_list_input ..." + end # resource path @@ -112,7 +127,10 @@ module SwaggerClient auth_names = [] - Swagger::Request.new(:POST, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:POST, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#create_users_with_list_input" + end nil end @@ -123,6 +141,9 @@ module SwaggerClient # @option opts [String] :password The password for login in clear text # @return [String] def self.login_user(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#login_user ..." + end # resource path @@ -153,7 +174,11 @@ module SwaggerClient auth_names = [] response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('String') + result = response.deserialize('String') + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#login_user. Result: #{result.inspect}" + end + result end # Logs out current logged in user session @@ -161,6 +186,9 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @return [nil] def self.logout_user(opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#logout_user ..." + end # resource path @@ -188,7 +216,10 @@ module SwaggerClient auth_names = [] - Swagger::Request.new(:GET, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#logout_user" + end nil end @@ -198,6 +229,9 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @return [User] def self.get_user_by_name(username, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#get_user_by_name ..." + end # verify the required parameter 'username' is set raise "Missing the required parameter 'username' when calling get_user_by_name" if username.nil? @@ -229,7 +263,11 @@ module SwaggerClient auth_names = [] response = Swagger::Request.new(:GET, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make - response.deserialize('User') + result = response.deserialize('User') + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#get_user_by_name. Result: #{result.inspect}" + end + result end # Updated user @@ -239,6 +277,9 @@ module SwaggerClient # @option opts [User] :body Updated user object # @return [nil] def self.update_user(username, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#update_user ..." + end # verify the required parameter 'username' is set raise "Missing the required parameter 'username' when calling update_user" if username.nil? @@ -269,7 +310,10 @@ module SwaggerClient auth_names = [] - Swagger::Request.new(:PUT, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:PUT, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#update_user" + end nil end @@ -279,6 +323,9 @@ module SwaggerClient # @param [Hash] opts the optional parameters # @return [nil] def self.delete_user(username, opts = {}) + if Swagger.configuration.debug + Swagger.logger.debug "Calling API: UserApi#delete_user ..." + end # verify the required parameter 'username' is set raise "Missing the required parameter 'username' when calling delete_user" if username.nil? @@ -309,7 +356,10 @@ module SwaggerClient auth_names = [] - Swagger::Request.new(:DELETE, path, {:params => query_params,:headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + Swagger::Request.new(:DELETE, path, {:params => query_params, :headers => header_params, :form_params => form_params, :body => post_body, :auth_names => auth_names}).make + if Swagger.configuration.debug + Swagger.logger.debug "API called: UserApi#delete_user" + end nil end end From 46869df631312f8308d8233d92151bb5a4ad60b2 Mon Sep 17 00:00:00 2001 From: xhh Date: Tue, 23 Jun 2015 15:02:40 +0800 Subject: [PATCH 03/19] Make HTTP response accessible by storing the last response so that users are able to retrieve, for example, rate-limit headers from the response --- .../src/main/resources/ruby/swagger.mustache | 2 +- .../resources/ruby/swagger/request.mustache | 21 ++++++++++++------- .../resources/ruby/swagger/response.mustache | 15 ++++++------- .../ruby/lib/swagger_client/swagger.rb | 2 +- .../lib/swagger_client/swagger/request.rb | 21 ++++++++++++------- .../lib/swagger_client/swagger/response.rb | 15 ++++++------- 6 files changed, 46 insertions(+), 30 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache index 21c4e8cd04ec..f07bdec9c50b 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache @@ -1,7 +1,7 @@ module {{moduleName}} module Swagger class << self - attr_accessor :logger + attr_accessor :logger, :last_response # A Swagger configuration object. Must act like a hash and return sensible # values for all Swagger configuration options. See Swagger::Configuration. 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 70eb319ed954..ef2103766e49 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -5,7 +5,7 @@ module {{moduleName}} require 'addressable/uri' require 'typhoeus' - attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names + attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names, :response # All requests must have an HTTP method and a path # Optionals parameters are :params, :headers, :body, :format, :host @@ -169,7 +169,7 @@ module {{moduleName}} :headers => self.headers.stringify_keys, :verbose => Swagger.configuration.debug } - response = case self.http_method.to_sym + raw = case self.http_method.to_sym when :get,:GET Typhoeus::Request.get( self.url, @@ -201,15 +201,22 @@ module {{moduleName}} ) end + @response = Response.new(raw) + if Swagger.configuration.debug - Swagger.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n" + Swagger.logger.debug "HTTP response body ~BEGIN~\n#{@response.body}\n~END~\n" end - Response.new(response) - end + # record as last response + Swagger.last_response = @response - def response - self.make + unless @response.success? + fail ApiError.new(:code => @response.code, + :response_headers => @response.headers, + :response_body => @response.body), + @response.status_message + end + @response end def response_code_pretty diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache index b621110935a9..d712aa295401 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache @@ -8,23 +8,24 @@ module {{moduleName}} def initialize(raw) self.raw = raw - - unless raw.success? - fail ApiError.new(:code => code, - :response_headers => headers, - :response_body => body), - raw.status_message - end end def code raw.code end + def status_message + raw.status_message + end + def body raw.body end + def success? + raw.success? + end + # Deserialize the raw response body to the given return type. # # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]" diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger.rb index e6c1ca510968..285d92ae2c71 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger.rb @@ -1,7 +1,7 @@ module SwaggerClient module Swagger class << self - attr_accessor :logger + attr_accessor :logger, :last_response # A Swagger configuration object. Must act like a hash and return sensible # values for all Swagger configuration options. See Swagger::Configuration. diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb index 2e669df60cb0..4cc880165008 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb @@ -5,7 +5,7 @@ module SwaggerClient require 'addressable/uri' require 'typhoeus' - attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names + attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names, :response # All requests must have an HTTP method and a path # Optionals parameters are :params, :headers, :body, :format, :host @@ -168,7 +168,7 @@ module SwaggerClient :headers => self.headers.stringify_keys, :verbose => Swagger.configuration.debug } - response = case self.http_method.to_sym + raw = case self.http_method.to_sym when :get,:GET Typhoeus::Request.get( self.url, @@ -200,15 +200,22 @@ module SwaggerClient ) end + @response = Response.new(raw) + if Swagger.configuration.debug - Swagger.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n" + Swagger.logger.debug "HTTP response body ~BEGIN~\n#{@response.body}\n~END~\n" end - Response.new(response) - end + # record as last response + Swagger.last_response = @response - def response - self.make + unless @response.success? + fail ApiError.new(:code => @response.code, + :response_headers => @response.headers, + :response_body => @response.body), + @response.status_message + end + @response end def response_code_pretty diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb index f560006de6d7..61d899e1f3b4 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb @@ -8,23 +8,24 @@ module SwaggerClient def initialize(raw) self.raw = raw - - unless raw.success? - fail ApiError.new(:code => code, - :response_headers => headers, - :response_body => body), - raw.status_message - end end def code raw.code end + def status_message + raw.status_message + end + def body raw.body end + def success? + raw.success? + end + # Deserialize the raw response body to the given return type. # # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]" From 19ee56592e0cde1c79d0b8d15bad7c6fd45c0ba9 Mon Sep 17 00:00:00 2001 From: xhh Date: Tue, 23 Jun 2015 17:23:22 +0800 Subject: [PATCH 04/19] Allow customizing SSL CA certificate by adding a `ssl_ca_cert` configuration option --- .../main/resources/ruby/swagger/configuration.mustache | 8 ++++++++ .../src/main/resources/ruby/swagger/request.mustache | 1 + .../ruby/lib/swagger_client/swagger/configuration.rb | 8 ++++++++ .../petstore/ruby/lib/swagger_client/swagger/request.rb | 1 + 4 files changed, 18 insertions(+) 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 485bcb3cf814..5ed22afb1515 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache @@ -7,6 +7,14 @@ module {{moduleName}} :scheme, :host, :base_path, :user_agent, :debug, :logger, :inject_format, :force_ending_format, :camelize_params, :user_agent, :verify_ssl + # Set this to customize the certificate file to verify the peer. + # + # @return [String] the path to the certificate file + # + # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code: + # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145 + attr_accessor :ssl_ca_cert + # Defaults go in here.. def initialize @format = 'json' 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 ef2103766e49..c05167c7fdc4 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -166,6 +166,7 @@ module {{moduleName}} def make request_options = { :ssl_verifypeer => Swagger.configuration.verify_ssl, + :cainfo => Swagger.configuration.ssl_ca_cert, :headers => self.headers.stringify_keys, :verbose => Swagger.configuration.debug } diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb index b4d8b33d90db..9ed1673eff14 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb @@ -7,6 +7,14 @@ module SwaggerClient :scheme, :host, :base_path, :user_agent, :debug, :logger, :inject_format, :force_ending_format, :camelize_params, :user_agent, :verify_ssl + # Set this to customize the certificate file to verify the peer. + # + # @return [String] the path to the certificate file + # + # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code: + # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145 + attr_accessor :ssl_ca_cert + # Defaults go in here.. def initialize @format = 'json' diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb index 4cc880165008..df0987b0d22d 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb @@ -165,6 +165,7 @@ module SwaggerClient def make request_options = { :ssl_verifypeer => Swagger.configuration.verify_ssl, + :cainfo => Swagger.configuration.ssl_ca_cert, :headers => self.headers.stringify_keys, :verbose => Swagger.configuration.debug } From 621e3e7b1a42ea91037629b41d35f1d8a0b909ad Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 24 Jun 2015 15:57:01 +0800 Subject: [PATCH 05/19] Add comments for some configuration options --- .../ruby/swagger/configuration.mustache | 61 +++++++++++++++---- .../swagger_client/swagger/configuration.rb | 61 +++++++++++++++---- 2 files changed, 98 insertions(+), 24 deletions(-) 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 5ed22afb1515..1c7cb52c50f5 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache @@ -3,18 +3,63 @@ require 'logger' module {{moduleName}} module Swagger class Configuration - attr_accessor :format, :api_key, :api_key_prefix, :username, :password, :auth_token, - :scheme, :host, :base_path, :user_agent, :debug, :logger, :inject_format, - :force_ending_format, :camelize_params, :user_agent, :verify_ssl + attr_accessor :scheme, :host, :base_path, :user_agent, :format, :auth_token, :inject_format, :force_ending_format, :camelize_params + + # Defines the username used with HTTP basic authentication. + # + # @return [String] + attr_accessor :username + + # Defines the password used with HTTP basic authentication. + # + # @return [String] + attr_accessor :password + + # Defines API keys used with API Key authentications. + # + # @return [Hash] key: parameter name, value: parameter value (API key) + # + # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string) + # config.api_key['api_key'] = 'xxx' + attr_accessor :api_key + + # Defines API key prefixes used with API Key authentications. + # + # @return [Hash] key: parameter name, value: API key prefix + # + # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers) + # config.api_key_prefix['api_key'] = 'Token' + attr_accessor :api_key_prefix + + # Set this to false to skip verifying SSL certificate when calling API from https server. + # Default to true. + # + # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks. + # + # @return [true, false] + attr_accessor :verify_ssl # Set this to customize the certificate file to verify the peer. # # @return [String] the path to the certificate file # # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code: - # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145 + # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145 attr_accessor :ssl_ca_cert + # Set this to enable/disable debugging. When enabled (set to true), HTTP request/response + # details will be logged with `logger.debug` (see the `logger` attribute). + # Default to false. + # + # @return [true, false] + attr_accessor :debug + + # Defines the logger used for debugging. + # Default to `Rails.logger` (when in Rails) or logging to STDOUT. + # + # @return [#debug] + attr_accessor :logger + # Defaults go in here.. def initialize @format = 'json' @@ -26,20 +71,12 @@ module {{moduleName}} @force_ending_format = false @camelize_params = true - # keys for API key authentication (param-name => api-key) @api_key = {} - # api-key prefix for API key authentication, e.g. "Bearer" (param-name => api-key-prefix) @api_key_prefix = {} - # whether to verify SSL certificate, default to true - # Note: do NOT set it to false in production code, otherwise you would - # face multiple types of cryptographic attacks @verify_ssl = true - # whether to enable debugging @debug = false - - # configure logger, default to logger of Rails (if in Rails) or STDOUT @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT) end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb index 9ed1673eff14..50fe6a0bcc01 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb @@ -3,18 +3,63 @@ require 'logger' module SwaggerClient module Swagger class Configuration - attr_accessor :format, :api_key, :api_key_prefix, :username, :password, :auth_token, - :scheme, :host, :base_path, :user_agent, :debug, :logger, :inject_format, - :force_ending_format, :camelize_params, :user_agent, :verify_ssl + attr_accessor :scheme, :host, :base_path, :user_agent, :format, :auth_token, :inject_format, :force_ending_format, :camelize_params + + # Defines the username used with HTTP basic authentication. + # + # @return [String] + attr_accessor :username + + # Defines the password used with HTTP basic authentication. + # + # @return [String] + attr_accessor :password + + # Defines API keys used with API Key authentications. + # + # @return [Hash] key: parameter name, value: parameter value (API key) + # + # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string) + # config.api_key['api_key'] = 'xxx' + attr_accessor :api_key + + # Defines API key prefixes used with API Key authentications. + # + # @return [Hash] key: parameter name, value: API key prefix + # + # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers) + # config.api_key_prefix['api_key'] = 'Token' + attr_accessor :api_key_prefix + + # Set this to false to skip verifying SSL certificate when calling API from https server. + # Default to true. + # + # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks. + # + # @return [true, false] + attr_accessor :verify_ssl # Set this to customize the certificate file to verify the peer. # # @return [String] the path to the certificate file # # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code: - # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145 + # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145 attr_accessor :ssl_ca_cert + # Set this to enable/disable debugging. When enabled (set to true), HTTP request/response + # details will be logged with `logger.debug` (see the `logger` attribute). + # Default to false. + # + # @return [true, false] + attr_accessor :debug + + # Defines the logger used for debugging. + # Default to `Rails.logger` (when in Rails) or logging to STDOUT. + # + # @return [#debug] + attr_accessor :logger + # Defaults go in here.. def initialize @format = 'json' @@ -26,20 +71,12 @@ module SwaggerClient @force_ending_format = false @camelize_params = true - # keys for API key authentication (param-name => api-key) @api_key = {} - # api-key prefix for API key authentication, e.g. "Bearer" (param-name => api-key-prefix) @api_key_prefix = {} - # whether to verify SSL certificate, default to true - # Note: do NOT set it to false in production code, otherwise you would - # face multiple types of cryptographic attacks @verify_ssl = true - # whether to enable debugging @debug = false - - # configure logger, default to logger of Rails (if in Rails) or STDOUT @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT) end end From 16e80c65d7bf103c12f0100d446c5acfd7144917 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 26 Jun 2015 15:56:59 +0800 Subject: [PATCH 06/19] Avoiding monkey-patching in Ruby API client --- .../src/main/resources/ruby/monkey.mustache | 51 -------- .../src/main/resources/ruby/swagger.mustache | 4 +- .../ruby/swagger/configuration.mustache | 3 +- .../resources/ruby/swagger/request.mustache | 111 ++++-------------- .../resources/ruby/swagger/response.mustache | 10 +- .../ruby/swagger_client.gemspec.mustache | 1 - 6 files changed, 29 insertions(+), 151 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/monkey.mustache b/modules/swagger-codegen/src/main/resources/ruby/monkey.mustache index 0751d42ce63d..2f5b96f884fc 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/monkey.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/monkey.mustache @@ -1,39 +1,3 @@ -class Object - unless Object.method_defined? :blank? - def blank? - respond_to?(:empty?) ? empty? : !self - end - end - - unless Object.method_defined? :present? - def present? - !blank? - end - end -end - -class String - unless String.method_defined? :underscore - def underscore - self.gsub(/::/, '/'). - gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). - gsub(/([a-z\d])([A-Z])/,'\1_\2'). - tr("-", "_"). - downcase - end - end - - unless String.method_defined? :camelize - def camelize(first_letter_in_uppercase = true) - if first_letter_in_uppercase != :lower - self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } - else - self.to_s[0].chr.downcase + camelize(self)[1..-1] - end - end - end -end - class Hash unless Hash.method_defined? :stringify_keys def stringify_keys @@ -64,19 +28,4 @@ class Hash self.replace(self.symbolize_keys) end end - - unless Hash.method_defined? :symbolize_and_underscore_keys - def symbolize_and_underscore_keys - inject({}) do |options, (key, value)| - options[(key.to_s.underscore.to_sym rescue key) || key] = value - options - end - end - end - - unless Hash.method_defined? :symbolize_and_underscore_keys! - def symbolize_and_underscore_keys! - self.replace(self.symbolize_and_underscore_keys) - end - end end diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache index f07bdec9c50b..e11301327e0d 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache @@ -37,7 +37,7 @@ module {{moduleName}} end def authenticated? - Swagger.configuration.auth_token.present? + !Swagger.configuration.auth_token.nil? end def de_authenticate @@ -47,7 +47,7 @@ module {{moduleName}} def authenticate return if Swagger.authenticated? - if Swagger.configuration.username.blank? || Swagger.configuration.password.blank? + if Swagger.configuration.username.nil? || Swagger.configuration.password.nil? raise ApiError, "Username and password are required to authenticate." end 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 1c7cb52c50f5..0e693b23715d 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/configuration.mustache @@ -3,7 +3,7 @@ require 'logger' module {{moduleName}} module Swagger class Configuration - attr_accessor :scheme, :host, :base_path, :user_agent, :format, :auth_token, :inject_format, :force_ending_format, :camelize_params + attr_accessor :scheme, :host, :base_path, :user_agent, :format, :auth_token, :inject_format, :force_ending_format # Defines the username used with HTTP basic authentication. # @@ -69,7 +69,6 @@ module {{moduleName}} @user_agent = "ruby-swagger-#{Swagger::VERSION}" @inject_format = false @force_ending_format = false - @camelize_params = true @api_key = {} @api_key_prefix = {} 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 c05167c7fdc4..bd5b2991cab8 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -1,15 +1,14 @@ +require 'uri' +require 'typhoeus' + module {{moduleName}} module Swagger class Request - require 'uri' - require 'addressable/uri' - require 'typhoeus' - attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names, :response # All requests must have an HTTP method and a path # Optionals parameters are :params, :headers, :body, :format, :host - def initialize(http_method, path, attributes={}) + def initialize(http_method, path, attributes = {}) attributes[:format] ||= Swagger.configuration.format attributes[:params] ||= {} @@ -27,11 +26,10 @@ module {{moduleName}} attributes[:headers].merge!({:auth_token => Swagger.configuration.auth_token}) end - self.http_method = http_method.to_sym + self.http_method = http_method.to_sym.downcase self.path = path - attributes.each do |name, value| - send("#{name.to_s.underscore.to_sym}=", value) - end + + attributes.each { |name, value| send "#{name}=", value } update_params_for_auth! end @@ -54,26 +52,18 @@ module {{moduleName}} # Get API key (with prefix if set). # @param [String] param_name the parameter name of API key auth def get_api_key_with_prefix(param_name) - if Swagger.configuration.api_key_prefix[param_name].present? + if Swagger.configuration.api_key_prefix[param_name] "#{Swagger.configuration.api_key_prefix[param_name]} #{Swagger.configuration.api_key[param_name]}" else Swagger.configuration.api_key[param_name] end end - # Construct a base URL + # Construct the request 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! /\?$/, '' - - u + _path = self.interpreted_path + _path = "/#{_path}" unless _path.start_with?('/') + "#{Swagger.configuration.scheme}://#{Swagger.configuration.host}#{_path}" end # Iterate over the params hash, injecting any path values into the path string @@ -104,18 +94,6 @@ module {{moduleName}} 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. # For form parameters, remove empty value def outgoing_body @@ -138,70 +116,20 @@ module {{moduleName}} data 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 - 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 request_options = { + :method => self.http_method, + :headers => self.headers.stringify_keys, :ssl_verifypeer => Swagger.configuration.verify_ssl, :cainfo => Swagger.configuration.ssl_ca_cert, - :headers => self.headers.stringify_keys, :verbose => Swagger.configuration.debug } - raw = case self.http_method.to_sym - when :get,:GET - Typhoeus::Request.get( - self.url, - request_options - ) - when :post,:POST - Typhoeus::Request.post( - self.url, - request_options.merge(:body => self.outgoing_body) - ) - - when :patch,:PATCH - Typhoeus::Request.patch( - self.url, - request_options.merge(:body => self.outgoing_body) - ) - - when :put,:PUT - Typhoeus::Request.put( - self.url, - request_options.merge(:body => self.outgoing_body) - ) - - when :delete,:DELETE - Typhoeus::Request.delete( - self.url, - request_options.merge(:body => self.outgoing_body) - ) + if [:post, :patch, :put, :delete].include?(self.http_method) + request_options.update :body => self.outgoing_body end + raw = Typhoeus::Request.new(self.url, request_options).run @response = Response.new(raw) if Swagger.configuration.debug @@ -217,16 +145,17 @@ module {{moduleName}} :response_body => @response.body), @response.status_message end + @response end def response_code_pretty - return unless @response.present? + return unless @response @response.code.to_s end def response_headers_pretty - return unless @response.present? + return unless @response # JSON.pretty_generate(@response.headers).gsub(/\n/, '
') # <- This was for RestClient @response.headers.gsub(/\n/, '
') # <- This is for Typhoeus end diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache index d712aa295401..575bc5d0ae02 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache @@ -30,7 +30,7 @@ module {{moduleName}} # # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]" def deserialize(return_type) - return nil if body.blank? + return nil if body.nil? || body.empty? # ensuring a default content type content_type = raw.headers_hash['Content-Type'] || 'application/json' @@ -106,9 +106,11 @@ module {{moduleName}} end def pretty_body - return unless body.present? - case format - when 'json' then JSON.pretty_generate(JSON.parse(body)).gsub(/\n/, '
') + return unless body + if format == 'json' + JSON.pretty_generate(JSON.parse(body)).gsub(/\n/, '
') + else + body end end diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger_client.gemspec.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger_client.gemspec.mustache index 8ae4bfa1a492..38d70c07dd57 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger_client.gemspec.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger_client.gemspec.mustache @@ -14,7 +14,6 @@ Gem::Specification.new do |s| s.license = "Apache-2.0" s.add_runtime_dependency 'typhoeus', '~> 0.2', '>= 0.2.1' - s.add_runtime_dependency 'addressable', '~> 2.2', '>= 2.2.4' s.add_runtime_dependency 'json', '~> 1.4', '>= 1.4.6' s.add_development_dependency 'rspec', '~> 3.2', '>= 3.2.0' From 327128dbba56afca635548b7edffe8959ef76377 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 26 Jun 2015 15:57:46 +0800 Subject: [PATCH 07/19] Fix "date" type deserialization --- .../java/io/swagger/codegen/languages/RubyClientCodegen.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index c3c787106827..e7260d525d12 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -55,6 +55,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("float", "Float"); typeMapping.put("double", "Float"); typeMapping.put("number", "Float"); + typeMapping.put("date", "DateTime"); typeMapping.put("DateTime", "DateTime"); typeMapping.put("boolean", "BOOLEAN"); typeMapping.put("array", "Array"); From 0ac1ef266f56fab222eb5868d4f5a569f41a36ba Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 26 Jun 2015 16:04:18 +0800 Subject: [PATCH 08/19] Avoid more monkey-patching --- .../codegen/languages/RubyClientCodegen.java | 1 - .../src/main/resources/ruby/monkey.mustache | 31 ------------------- .../resources/ruby/swagger/request.mustache | 2 +- .../resources/ruby/swagger_client.mustache | 1 - 4 files changed, 1 insertion(+), 34 deletions(-) delete mode 100644 modules/swagger-codegen/src/main/resources/ruby/monkey.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index e7260d525d12..0ea0be21a787 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -107,7 +107,6 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { supportingFiles.add(new SupportingFile("swagger_client.gemspec.mustache", "", gemName + ".gemspec")); supportingFiles.add(new SupportingFile("swagger_client.mustache", libFolder, gemName + ".rb")); String baseFolder = libFolder + File.separator + gemName; - supportingFiles.add(new SupportingFile("monkey.mustache", baseFolder, "monkey.rb")); supportingFiles.add(new SupportingFile("swagger.mustache", baseFolder, "swagger.rb")); String swaggerFolder = baseFolder + File.separator + "swagger"; supportingFiles.add(new SupportingFile("swagger" + File.separator + "request.mustache", swaggerFolder, "request.rb")); diff --git a/modules/swagger-codegen/src/main/resources/ruby/monkey.mustache b/modules/swagger-codegen/src/main/resources/ruby/monkey.mustache deleted file mode 100644 index 2f5b96f884fc..000000000000 --- a/modules/swagger-codegen/src/main/resources/ruby/monkey.mustache +++ /dev/null @@ -1,31 +0,0 @@ -class Hash - unless Hash.method_defined? :stringify_keys - def stringify_keys - inject({}) do |options, (key, value)| - options[key.to_s] = value - options - end - end - end - - unless Hash.method_defined? :stringify_keys! - def stringify_keys! - self.replace(self.stringify_keys) - end - end - - unless Hash.method_defined? :symbolize_keys - def symbolize_keys - inject({}) do |options, (key, value)| - options[(key.to_sym rescue key) || key] = value - options - end - end - end - - unless Hash.method_defined? :symbolize_keys! - def symbolize_keys! - self.replace(self.symbolize_keys) - end - end -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 bd5b2991cab8..decf7aa7708c 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -119,7 +119,7 @@ module {{moduleName}} def make request_options = { :method => self.http_method, - :headers => self.headers.stringify_keys, + :headers => self.headers, :ssl_verifypeer => Swagger.configuration.verify_ssl, :cainfo => Swagger.configuration.ssl_ca_cert, :verbose => Swagger.configuration.debug diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger_client.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger_client.mustache index 0be00aaec953..4ed0839f6ebe 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger_client.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger_client.mustache @@ -1,5 +1,4 @@ # Swagger common files -require '{{gemName}}/monkey' require '{{gemName}}/swagger' require '{{gemName}}/swagger/configuration' require '{{gemName}}/swagger/api_error' From 8c10e4f2b0e4f1bea678cf9871f38f05b80110a0 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 26 Jun 2015 16:06:32 +0800 Subject: [PATCH 09/19] Remove unused code --- modules/swagger-codegen/src/main/resources/ruby/api.mustache | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index af87882fbe1a..76a44659f811 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -3,8 +3,6 @@ require "uri" module {{moduleName}} {{#operations}} class {{classname}} - basePath = "{{basePath}}" - # apiInvoker = APIInvoker {{#operation}} {{newline}} # {{summary}} From 2d3d35cfd796642c80226d5e55f9eb270c5c6f17 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 26 Jun 2015 16:37:58 +0800 Subject: [PATCH 10/19] Rebuild Ruby petstore client --- .../resources/ruby/swagger/request.mustache | 1 + samples/client/petstore/ruby/Gemfile.lock | 1 - .../petstore/ruby/lib/swagger_client.rb | 1 - .../ruby/lib/swagger_client/api/pet_api.rb | 2 - .../ruby/lib/swagger_client/api/store_api.rb | 2 - .../ruby/lib/swagger_client/api/user_api.rb | 2 - .../ruby/lib/swagger_client/monkey.rb | 82 ------------- .../ruby/lib/swagger_client/swagger.rb | 4 +- .../swagger_client/swagger/configuration.rb | 3 +- .../lib/swagger_client/swagger/request.rb | 112 ++++-------------- .../lib/swagger_client/swagger/response.rb | 10 +- .../client/petstore/ruby/spec/monkey_spec.rb | 33 ------ .../client/petstore/ruby/spec/request_spec.rb | 80 +------------ .../petstore/ruby/swagger_client.gemspec | 1 - 14 files changed, 33 insertions(+), 301 deletions(-) delete mode 100644 samples/client/petstore/ruby/lib/swagger_client/monkey.rb delete mode 100644 samples/client/petstore/ruby/spec/monkey_spec.rb 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 decf7aa7708c..8f07e5ab66c8 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -120,6 +120,7 @@ module {{moduleName}} request_options = { :method => self.http_method, :headers => self.headers, + :params => self.params, :ssl_verifypeer => Swagger.configuration.verify_ssl, :cainfo => Swagger.configuration.ssl_ca_cert, :verbose => Swagger.configuration.debug diff --git a/samples/client/petstore/ruby/Gemfile.lock b/samples/client/petstore/ruby/Gemfile.lock index e9e03f10b779..1b69e10f1fdd 100644 --- a/samples/client/petstore/ruby/Gemfile.lock +++ b/samples/client/petstore/ruby/Gemfile.lock @@ -2,7 +2,6 @@ PATH remote: . specs: swagger_client (1.0.0) - addressable (~> 2.2, >= 2.2.4) json (~> 1.4, >= 1.4.6) typhoeus (~> 0.2, >= 0.2.1) diff --git a/samples/client/petstore/ruby/lib/swagger_client.rb b/samples/client/petstore/ruby/lib/swagger_client.rb index 42380927f824..f91c8912d983 100644 --- a/samples/client/petstore/ruby/lib/swagger_client.rb +++ b/samples/client/petstore/ruby/lib/swagger_client.rb @@ -1,5 +1,4 @@ # Swagger common files -require 'swagger_client/monkey' require 'swagger_client/swagger' require 'swagger_client/swagger/configuration' require 'swagger_client/swagger/api_error' diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb index 8ec023a6f779..4b3e6bb6a509 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb @@ -2,8 +2,6 @@ require "uri" module SwaggerClient class PetApi - basePath = "http://petstore.swagger.io/v2" - # apiInvoker = APIInvoker # Update an existing pet # diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb index 7581c4d36d69..47e81d5af1c1 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb @@ -2,8 +2,6 @@ require "uri" module SwaggerClient class StoreApi - basePath = "http://petstore.swagger.io/v2" - # apiInvoker = APIInvoker # Returns pet inventories by status # Returns a map of status codes to quantities diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb index 48407491fba9..7d91c0bfd3d3 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb @@ -2,8 +2,6 @@ require "uri" module SwaggerClient class UserApi - basePath = "http://petstore.swagger.io/v2" - # apiInvoker = APIInvoker # Create user # This can only be done by the logged in user. diff --git a/samples/client/petstore/ruby/lib/swagger_client/monkey.rb b/samples/client/petstore/ruby/lib/swagger_client/monkey.rb deleted file mode 100644 index 0751d42ce63d..000000000000 --- a/samples/client/petstore/ruby/lib/swagger_client/monkey.rb +++ /dev/null @@ -1,82 +0,0 @@ -class Object - unless Object.method_defined? :blank? - def blank? - respond_to?(:empty?) ? empty? : !self - end - end - - unless Object.method_defined? :present? - def present? - !blank? - end - end -end - -class String - unless String.method_defined? :underscore - def underscore - self.gsub(/::/, '/'). - gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). - gsub(/([a-z\d])([A-Z])/,'\1_\2'). - tr("-", "_"). - downcase - end - end - - unless String.method_defined? :camelize - def camelize(first_letter_in_uppercase = true) - if first_letter_in_uppercase != :lower - self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } - else - self.to_s[0].chr.downcase + camelize(self)[1..-1] - end - end - end -end - -class Hash - unless Hash.method_defined? :stringify_keys - def stringify_keys - inject({}) do |options, (key, value)| - options[key.to_s] = value - options - end - end - end - - unless Hash.method_defined? :stringify_keys! - def stringify_keys! - self.replace(self.stringify_keys) - end - end - - unless Hash.method_defined? :symbolize_keys - def symbolize_keys - inject({}) do |options, (key, value)| - options[(key.to_sym rescue key) || key] = value - options - end - end - end - - unless Hash.method_defined? :symbolize_keys! - def symbolize_keys! - self.replace(self.symbolize_keys) - end - end - - unless Hash.method_defined? :symbolize_and_underscore_keys - def symbolize_and_underscore_keys - inject({}) do |options, (key, value)| - options[(key.to_s.underscore.to_sym rescue key) || key] = value - options - end - end - end - - unless Hash.method_defined? :symbolize_and_underscore_keys! - def symbolize_and_underscore_keys! - self.replace(self.symbolize_and_underscore_keys) - end - end -end diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger.rb index 285d92ae2c71..bf69f05b23a9 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger.rb @@ -37,7 +37,7 @@ module SwaggerClient end def authenticated? - Swagger.configuration.auth_token.present? + !Swagger.configuration.auth_token.nil? end def de_authenticate @@ -47,7 +47,7 @@ module SwaggerClient def authenticate return if Swagger.authenticated? - if Swagger.configuration.username.blank? || Swagger.configuration.password.blank? + if Swagger.configuration.username.nil? || Swagger.configuration.password.nil? raise ApiError, "Username and password are required to authenticate." end diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb index 50fe6a0bcc01..8811c44b4df4 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb @@ -3,7 +3,7 @@ require 'logger' module SwaggerClient module Swagger class Configuration - attr_accessor :scheme, :host, :base_path, :user_agent, :format, :auth_token, :inject_format, :force_ending_format, :camelize_params + attr_accessor :scheme, :host, :base_path, :user_agent, :format, :auth_token, :inject_format, :force_ending_format # Defines the username used with HTTP basic authentication. # @@ -69,7 +69,6 @@ module SwaggerClient @user_agent = "ruby-swagger-#{Swagger::VERSION}" @inject_format = false @force_ending_format = false - @camelize_params = true @api_key = {} @api_key_prefix = {} diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb index df0987b0d22d..8b0276d356ac 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb @@ -1,15 +1,14 @@ +require 'uri' +require 'typhoeus' + module SwaggerClient module Swagger class Request - require 'uri' - require 'addressable/uri' - require 'typhoeus' - attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names, :response # All requests must have an HTTP method and a path # Optionals parameters are :params, :headers, :body, :format, :host - def initialize(http_method, path, attributes={}) + def initialize(http_method, path, attributes = {}) attributes[:format] ||= Swagger.configuration.format attributes[:params] ||= {} @@ -27,11 +26,10 @@ module SwaggerClient attributes[:headers].merge!({:auth_token => Swagger.configuration.auth_token}) end - self.http_method = http_method.to_sym + self.http_method = http_method.to_sym.downcase self.path = path - attributes.each do |name, value| - send("#{name.to_s.underscore.to_sym}=", value) - end + + attributes.each { |name, value| send "#{name}=", value } update_params_for_auth! end @@ -53,26 +51,18 @@ module SwaggerClient # Get API key (with prefix if set). # @param [String] param_name the parameter name of API key auth def get_api_key_with_prefix(param_name) - if Swagger.configuration.api_key_prefix[param_name].present? + if Swagger.configuration.api_key_prefix[param_name] "#{Swagger.configuration.api_key_prefix[param_name]} #{Swagger.configuration.api_key[param_name]}" else Swagger.configuration.api_key[param_name] end end - # Construct a base URL + # Construct the request 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! /\?$/, '' - - u + _path = self.interpreted_path + _path = "/#{_path}" unless _path.start_with?('/') + "#{Swagger.configuration.scheme}://#{Swagger.configuration.host}#{_path}" end # Iterate over the params hash, injecting any path values into the path string @@ -103,18 +93,6 @@ module SwaggerClient 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. # For form parameters, remove empty value def outgoing_body @@ -137,70 +115,21 @@ module SwaggerClient data 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 - 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 request_options = { + :method => self.http_method, + :headers => self.headers, + :params => self.params, :ssl_verifypeer => Swagger.configuration.verify_ssl, :cainfo => Swagger.configuration.ssl_ca_cert, - :headers => self.headers.stringify_keys, :verbose => Swagger.configuration.debug } - raw = case self.http_method.to_sym - when :get,:GET - Typhoeus::Request.get( - self.url, - request_options - ) - when :post,:POST - Typhoeus::Request.post( - self.url, - request_options.merge(:body => self.outgoing_body) - ) - - when :patch,:PATCH - Typhoeus::Request.patch( - self.url, - request_options.merge(:body => self.outgoing_body) - ) - - when :put,:PUT - Typhoeus::Request.put( - self.url, - request_options.merge(:body => self.outgoing_body) - ) - - when :delete,:DELETE - Typhoeus::Request.delete( - self.url, - request_options.merge(:body => self.outgoing_body) - ) + if [:post, :patch, :put, :delete].include?(self.http_method) + request_options.update :body => self.outgoing_body end + raw = Typhoeus::Request.new(self.url, request_options).run @response = Response.new(raw) if Swagger.configuration.debug @@ -216,16 +145,17 @@ module SwaggerClient :response_body => @response.body), @response.status_message end + @response end def response_code_pretty - return unless @response.present? + return unless @response @response.code.to_s end def response_headers_pretty - return unless @response.present? + return unless @response # JSON.pretty_generate(@response.headers).gsub(/\n/, '
') # <- This was for RestClient @response.headers.gsub(/\n/, '
') # <- This is for Typhoeus end diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb index 61d899e1f3b4..0df6c2e54cd5 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb @@ -30,7 +30,7 @@ module SwaggerClient # # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]" def deserialize(return_type) - return nil if body.blank? + return nil if body.nil? || body.empty? # ensuring a default content type content_type = raw.headers_hash['Content-Type'] || 'application/json' @@ -106,9 +106,11 @@ module SwaggerClient end def pretty_body - return unless body.present? - case format - when 'json' then JSON.pretty_generate(JSON.parse(body)).gsub(/\n/, '
') + return unless body + if format == 'json' + JSON.pretty_generate(JSON.parse(body)).gsub(/\n/, '
') + else + body end end diff --git a/samples/client/petstore/ruby/spec/monkey_spec.rb b/samples/client/petstore/ruby/spec/monkey_spec.rb deleted file mode 100644 index 71c04921f1a0..000000000000 --- a/samples/client/petstore/ruby/spec/monkey_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'spec_helper' - -describe String do - - it "underscores" do - "thisIsATest".underscore.should == "this_is_a_test" - end - - it "camelizes" do - "camel_toe".camelize.should == "CamelToe" - end - - it "camelizes with leading minisculity" do - "dromedary_larry".camelize(:lower).should == "dromedaryLarry" - end - -end - -describe Hash do - - it "symbolizes keys" do - h = {'a' => 1, :b => 2 } - h.symbolize_keys.should be_a Hash - h.symbolize_keys.keys.should == [:a, :b] - end - - it "symbolizes and underscores keys" do - h = {'assHat' => 1, :bargainBasement => 2 } - h.symbolize_and_underscore_keys.should be_a Hash - h.symbolize_and_underscore_keys.keys.should == [:ass_hat, :bargain_basement] - end - -end \ No newline at end of file diff --git a/samples/client/petstore/ruby/spec/request_spec.rb b/samples/client/petstore/ruby/spec/request_spec.rb index 49bbc5cdd1e2..987a923547c6 100644 --- a/samples/client/petstore/ruby/spec/request_spec.rb +++ b/samples/client/petstore/ruby/spec/request_spec.rb @@ -25,7 +25,7 @@ describe SwaggerClient::Swagger::Request do it "allows params to be nil" do @request = SwaggerClient::Swagger::Request.new(@default_http_method, @default_path, :params => nil) - @request.query_string.should == "" + @request.params.should == {} end end @@ -46,26 +46,8 @@ describe SwaggerClient::Swagger::Request do describe "url" do - it "constructs a query string" do - @request.query_string.should == "?bar=2&foo=1" - end - it "constructs a full url" do - @request.url.should == "http://petstore.swagger.io/v2/pet.json/fancy?bar=2&foo=1" - end - - end - - describe "body" do - - it "camelCases parameters" do - @request = SwaggerClient::Swagger::Request.new(@default_http_method, @default_path, @default_params.merge({ - :body => { - :bad_dog => 'bud', - :goodDog => "dud" - } - })) - @request.body.keys.should == [:badDog, :goodDog] + @request.url.should == "http://petstore.swagger.io/v2/pet.json/fancy" end end @@ -90,36 +72,6 @@ describe SwaggerClient::Swagger::Request do @request.url.should == "http://petstore.swagger.io/v2/word.xml/cat/entries" end - it "leaves path-bound params out of the query string" do - @request = SwaggerClient::Swagger::Request.new(:get, "/word.{format}/{word}/entries", @default_params.merge({ - :params => { - :word => "cat", - :limit => 20 - } - })) - @request.query_string.should == "?limit=20" - end - - it "returns a question-mark free (blank) query string if no query params are present" do - @request = SwaggerClient::Swagger::Request.new(:get, "/word.{format}/{word}/entries", @default_params.merge({ - :params => { - :word => "cat", - } - })) - @request.query_string.should == "" - end - - it "removes blank params" do - @request = SwaggerClient::Swagger::Request.new(:get, "words/fancy", @default_params.merge({ - :params => { - :word => "dog", - :limit => "", - :foo => "criminy" - } - })) - @request.query_string.should == "?foo=criminy&word=dog" - end - it "URI encodes the path" do @request = SwaggerClient::Swagger::Request.new(:get, "word.{format}/bill gates/definitions", @default_params.merge({ :params => { @@ -129,34 +81,6 @@ describe SwaggerClient::Swagger::Request do @request.url.should =~ /word.json\/bill\%20gates\/definitions/ end - it "converts numeric params to strings" do - @request = SwaggerClient::Swagger::Request.new(@default_http_method, @default_path, @default_params.merge({ - :params => { - :limit => 100 - } - })) - - @request.interpreted_path.should_not be_nil - @request.query_string.should =~ /\?limit=100/ - @request.url.should =~ /\?limit=100/ - end - - it "camelCases parameters" do - @request = SwaggerClient::Swagger::Request.new(@default_http_method, @default_path, @default_params.merge({ - :params => { - :bad_dog => 'bud', - :goodDog => "dud" - } - })) - @request.query_string.should == "?badDog=bud&goodDog=dud" - end - - it "converts boolean values to their string representation" do - params = {:stringy => "fish", :truthy => true, :falsey => false} - @request = SwaggerClient::Swagger::Request.new(:get, 'fakeMethod', :params => params) - @request.query_string.should == "?falsey=false&stringy=fish&truthy=true" - end - end describe "#update_params_for_auth!" do diff --git a/samples/client/petstore/ruby/swagger_client.gemspec b/samples/client/petstore/ruby/swagger_client.gemspec index c0d507b3c5bc..bc09642eaf64 100644 --- a/samples/client/petstore/ruby/swagger_client.gemspec +++ b/samples/client/petstore/ruby/swagger_client.gemspec @@ -14,7 +14,6 @@ Gem::Specification.new do |s| s.license = "Apache-2.0" s.add_runtime_dependency 'typhoeus', '~> 0.2', '>= 0.2.1' - s.add_runtime_dependency 'addressable', '~> 2.2', '>= 2.2.4' s.add_runtime_dependency 'json', '~> 1.4', '>= 1.4.6' s.add_development_dependency 'rspec', '~> 3.2', '>= 3.2.0' From d8b0cb739fa186ffa717185fde60f8592ae03780 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 26 Jun 2015 17:15:14 +0800 Subject: [PATCH 11/19] Add config file for bin/ruby-petstore.sh to rename swagger_client to petstore --- bin/ruby-petstore.json | 5 ++++ bin/ruby-petstore.sh | 2 +- samples/client/petstore/ruby/Gemfile.lock | 4 +-- samples/client/petstore/ruby/README.md | 14 +++++------ samples/client/petstore/ruby/lib/petstore.rb | 25 +++++++++++++++++++ .../api/pet_api.rb | 2 +- .../api/store_api.rb | 2 +- .../api/user_api.rb | 2 +- .../models/base_object.rb | 4 +-- .../models/category.rb | 2 +- .../models/order.rb | 2 +- .../models/pet.rb | 2 +- .../models/tag.rb | 2 +- .../models/user.rb | 2 +- .../{swagger_client => petstore}/swagger.rb | 2 +- .../swagger/api_error.rb | 2 +- .../swagger/configuration.rb | 2 +- .../swagger/request.rb | 2 +- .../swagger/response.rb | 4 +-- .../swagger/version.rb | 2 +- .../petstore/ruby/lib/swagger_client.rb | 25 ------------------- ...wagger_client.gemspec => petstore.gemspec} | 6 ++--- 22 files changed, 60 insertions(+), 55 deletions(-) create mode 100644 bin/ruby-petstore.json create mode 100644 samples/client/petstore/ruby/lib/petstore.rb rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/api/pet_api.rb (99%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/api/store_api.rb (99%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/api/user_api.rb (99%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/models/base_object.rb (96%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/models/category.rb (97%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/models/order.rb (98%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/models/pet.rb (98%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/models/tag.rb (97%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/models/user.rb (98%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/swagger.rb (99%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/swagger/api_error.rb (96%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/swagger/configuration.rb (99%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/swagger/request.rb (99%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/swagger/response.rb (97%) rename samples/client/petstore/ruby/lib/{swagger_client => petstore}/swagger/version.rb (70%) delete mode 100644 samples/client/petstore/ruby/lib/swagger_client.rb rename samples/client/petstore/ruby/{swagger_client.gemspec => petstore.gemspec} (90%) diff --git a/bin/ruby-petstore.json b/bin/ruby-petstore.json new file mode 100644 index 000000000000..ddb753471a15 --- /dev/null +++ b/bin/ruby-petstore.json @@ -0,0 +1,5 @@ +{ + "gemName": "petstore", + "moduleName": "Petstore", + "gemVersion": "1.0.0" +} diff --git a/bin/ruby-petstore.sh b/bin/ruby-petstore.sh index 971cc154fb97..05cf1ee995ec 100755 --- a/bin/ruby-petstore.sh +++ b/bin/ruby-petstore.sh @@ -26,6 +26,6 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="$@ generate -t modules/swagger-codegen/src/main/resources/ruby -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l ruby -o samples/client/petstore/ruby" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/ruby -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l ruby -c bin/ruby-petstore.json -o samples/client/petstore/ruby" java $JAVA_OPTS -jar $executable $ags diff --git a/samples/client/petstore/ruby/Gemfile.lock b/samples/client/petstore/ruby/Gemfile.lock index 1b69e10f1fdd..05a6aa237905 100644 --- a/samples/client/petstore/ruby/Gemfile.lock +++ b/samples/client/petstore/ruby/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - swagger_client (1.0.0) + petstore (1.0.0) json (~> 1.4, >= 1.4.6) typhoeus (~> 0.2, >= 0.2.1) @@ -54,7 +54,7 @@ DEPENDENCIES autotest-fsevent (~> 0.2, >= 0.2.10) autotest-growl (~> 0.2, >= 0.2.16) autotest-rails-pure (~> 4.1, >= 4.1.2) + petstore! rspec (~> 3.2, >= 3.2.0) - swagger_client! vcr (~> 2.9, >= 2.9.3) webmock (~> 1.6, >= 1.6.2) diff --git a/samples/client/petstore/ruby/README.md b/samples/client/petstore/ruby/README.md index 06ba93a5abc6..c98d79e5a89b 100644 --- a/samples/client/petstore/ruby/README.md +++ b/samples/client/petstore/ruby/README.md @@ -5,20 +5,20 @@ You can build the generated client into a gem: ```shell -gem build swagger_client.gemspec +gem build petstore.gemspec ``` Then you can either install the gem: ```shell -gem install ./swagger_client-1.0.0.gem +gem install ./petstore-1.0.0.gem ``` or publish the gem to a gem server like [RubyGems](https://rubygems.org/). Finally add this to your Gemfile: - gem 'swagger_client', '~> 1.0.0' + gem 'petstore', '~> 1.0.0' ### Host as a git repository @@ -27,7 +27,7 @@ https://github.com/xhh/swagger-petstore-ruby Then you can reference it in Gemfile: - gem 'swagger_client', :git => 'https://github.com/xhh/swagger-petstore-ruby.git' + gem 'petstore', :git => 'https://github.com/xhh/swagger-petstore-ruby.git' ### Use without installation @@ -40,9 +40,9 @@ ruby -Ilib script.rb ## Configuration ```ruby -require 'swagger_client' +require 'petstore' -SwaggerClient::Swagger.configure do |config| +Petstore::Swagger.configure do |config| config.api_key['api_key'] = 'special-key' config.host = 'petstore.swagger.io' config.base_path = '/v2' @@ -54,6 +54,6 @@ end ## Getting Started ```ruby -pet = SwaggerClient::PetApi.get_pet_by_id(5) +pet = Petstore::PetApi.get_pet_by_id(5) puts pet.to_body ``` diff --git a/samples/client/petstore/ruby/lib/petstore.rb b/samples/client/petstore/ruby/lib/petstore.rb new file mode 100644 index 000000000000..245170ede612 --- /dev/null +++ b/samples/client/petstore/ruby/lib/petstore.rb @@ -0,0 +1,25 @@ +# Swagger common files +require 'petstore/swagger' +require 'petstore/swagger/configuration' +require 'petstore/swagger/api_error' +require 'petstore/swagger/request' +require 'petstore/swagger/response' +require 'petstore/swagger/version' + +# Models +require 'petstore/models/base_object' +require 'petstore/models/user' +require 'petstore/models/category' +require 'petstore/models/pet' +require 'petstore/models/tag' +require 'petstore/models/order' + +# APIs +require 'petstore/api/user_api' +require 'petstore/api/pet_api' +require 'petstore/api/store_api' + +module Petstore + # Initialize the default configuration + Swagger.configuration ||= Swagger::Configuration.new +end diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb similarity index 99% rename from samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb rename to samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index 4b3e6bb6a509..096d964752d8 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -1,6 +1,6 @@ require "uri" -module SwaggerClient +module Petstore class PetApi # Update an existing pet diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb similarity index 99% rename from samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb rename to samples/client/petstore/ruby/lib/petstore/api/store_api.rb index 47e81d5af1c1..456b8a2eebbe 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -1,6 +1,6 @@ require "uri" -module SwaggerClient +module Petstore class StoreApi # Returns pet inventories by status diff --git a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb similarity index 99% rename from samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb rename to samples/client/petstore/ruby/lib/petstore/api/user_api.rb index 7d91c0bfd3d3..d5aeae31513c 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb @@ -1,6 +1,6 @@ require "uri" -module SwaggerClient +module Petstore class UserApi # Create user diff --git a/samples/client/petstore/ruby/lib/swagger_client/models/base_object.rb b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb similarity index 96% rename from samples/client/petstore/ruby/lib/swagger_client/models/base_object.rb rename to samples/client/petstore/ruby/lib/petstore/models/base_object.rb index b0fa43c83595..8223b2e844d8 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/models/base_object.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore # base class containing fundamental method such as to_hash, build_from_hash and more class BaseObject @@ -39,7 +39,7 @@ module SwaggerClient false end else # model - _model = SwaggerClient.const_get(type).new + _model = Petstore.const_get(type).new _model.build_from_hash(value) end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/models/category.rb b/samples/client/petstore/ruby/lib/petstore/models/category.rb similarity index 97% rename from samples/client/petstore/ruby/lib/swagger_client/models/category.rb rename to samples/client/petstore/ruby/lib/petstore/models/category.rb index d856563b11dd..3a17b51a7ee2 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/models/category.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/category.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore # class Category < BaseObject attr_accessor :id, :name diff --git a/samples/client/petstore/ruby/lib/swagger_client/models/order.rb b/samples/client/petstore/ruby/lib/petstore/models/order.rb similarity index 98% rename from samples/client/petstore/ruby/lib/swagger_client/models/order.rb rename to samples/client/petstore/ruby/lib/petstore/models/order.rb index 2cd1ff18f5d4..bff403026507 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/models/order.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/order.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore # class Order < BaseObject attr_accessor :id, :pet_id, :quantity, :ship_date, :status, :complete diff --git a/samples/client/petstore/ruby/lib/swagger_client/models/pet.rb b/samples/client/petstore/ruby/lib/petstore/models/pet.rb similarity index 98% rename from samples/client/petstore/ruby/lib/swagger_client/models/pet.rb rename to samples/client/petstore/ruby/lib/petstore/models/pet.rb index f1f1d1434f45..5ee3d84aaf35 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/models/pet.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/pet.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore # class Pet < BaseObject attr_accessor :id, :category, :name, :photo_urls, :tags, :status diff --git a/samples/client/petstore/ruby/lib/swagger_client/models/tag.rb b/samples/client/petstore/ruby/lib/petstore/models/tag.rb similarity index 97% rename from samples/client/petstore/ruby/lib/swagger_client/models/tag.rb rename to samples/client/petstore/ruby/lib/petstore/models/tag.rb index 677c828aeded..fcbdd68f20ff 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/models/tag.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/tag.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore # class Tag < BaseObject attr_accessor :id, :name diff --git a/samples/client/petstore/ruby/lib/swagger_client/models/user.rb b/samples/client/petstore/ruby/lib/petstore/models/user.rb similarity index 98% rename from samples/client/petstore/ruby/lib/swagger_client/models/user.rb rename to samples/client/petstore/ruby/lib/petstore/models/user.rb index ed7a21e167ff..f45f7e0c3cb4 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/models/user.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/user.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore # class User < BaseObject attr_accessor :id, :username, :first_name, :last_name, :email, :password, :phone, :user_status diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb b/samples/client/petstore/ruby/lib/petstore/swagger.rb similarity index 99% rename from samples/client/petstore/ruby/lib/swagger_client/swagger.rb rename to samples/client/petstore/ruby/lib/petstore/swagger.rb index bf69f05b23a9..d2dcc6ab201e 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore module Swagger class << self attr_accessor :logger, :last_response diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/api_error.rb b/samples/client/petstore/ruby/lib/petstore/swagger/api_error.rb similarity index 96% rename from samples/client/petstore/ruby/lib/swagger_client/swagger/api_error.rb rename to samples/client/petstore/ruby/lib/petstore/swagger/api_error.rb index 12319927acec..9eab46b6eec7 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/api_error.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/api_error.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore module Swagger class ApiError < StandardError attr_reader :code, :response_headers, :response_body diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb b/samples/client/petstore/ruby/lib/petstore/swagger/configuration.rb similarity index 99% rename from samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb rename to samples/client/petstore/ruby/lib/petstore/swagger/configuration.rb index 8811c44b4df4..406f729f0681 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/configuration.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/configuration.rb @@ -1,6 +1,6 @@ require 'logger' -module SwaggerClient +module Petstore module Swagger class Configuration attr_accessor :scheme, :host, :base_path, :user_agent, :format, :auth_token, :inject_format, :force_ending_format diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb similarity index 99% rename from samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb rename to samples/client/petstore/ruby/lib/petstore/swagger/request.rb index 8b0276d356ac..049c6c15cb1d 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb @@ -1,7 +1,7 @@ require 'uri' require 'typhoeus' -module SwaggerClient +module Petstore module Swagger class Request attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names, :response diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb b/samples/client/petstore/ruby/lib/petstore/swagger/response.rb similarity index 97% rename from samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb rename to samples/client/petstore/ruby/lib/petstore/swagger/response.rb index 0df6c2e54cd5..770f04f6e2cb 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/response.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore module Swagger class Response require 'json' @@ -77,7 +77,7 @@ module SwaggerClient end else # models, e.g. Pet - SwaggerClient.const_get(return_type).new.tap do |model| + Petstore.const_get(return_type).new.tap do |model| model.build_from_hash data end end diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/version.rb b/samples/client/petstore/ruby/lib/petstore/swagger/version.rb similarity index 70% rename from samples/client/petstore/ruby/lib/swagger_client/swagger/version.rb rename to samples/client/petstore/ruby/lib/petstore/swagger/version.rb index c6e8d5aee53d..ff3c48bb59e6 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/version.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/version.rb @@ -1,4 +1,4 @@ -module SwaggerClient +module Petstore module Swagger VERSION = "1.0.0" end diff --git a/samples/client/petstore/ruby/lib/swagger_client.rb b/samples/client/petstore/ruby/lib/swagger_client.rb deleted file mode 100644 index f91c8912d983..000000000000 --- a/samples/client/petstore/ruby/lib/swagger_client.rb +++ /dev/null @@ -1,25 +0,0 @@ -# Swagger common files -require 'swagger_client/swagger' -require 'swagger_client/swagger/configuration' -require 'swagger_client/swagger/api_error' -require 'swagger_client/swagger/request' -require 'swagger_client/swagger/response' -require 'swagger_client/swagger/version' - -# Models -require 'swagger_client/models/base_object' -require 'swagger_client/models/user' -require 'swagger_client/models/category' -require 'swagger_client/models/pet' -require 'swagger_client/models/tag' -require 'swagger_client/models/order' - -# APIs -require 'swagger_client/api/user_api' -require 'swagger_client/api/pet_api' -require 'swagger_client/api/store_api' - -module SwaggerClient - # Initialize the default configuration - Swagger.configuration ||= Swagger::Configuration.new -end diff --git a/samples/client/petstore/ruby/swagger_client.gemspec b/samples/client/petstore/ruby/petstore.gemspec similarity index 90% rename from samples/client/petstore/ruby/swagger_client.gemspec rename to samples/client/petstore/ruby/petstore.gemspec index bc09642eaf64..40a169d1741a 100644 --- a/samples/client/petstore/ruby/swagger_client.gemspec +++ b/samples/client/petstore/ruby/petstore.gemspec @@ -1,10 +1,10 @@ # -*- encoding: utf-8 -*- $:.push File.expand_path("../lib", __FILE__) -require "swagger_client/swagger/version" +require "petstore/swagger/version" Gem::Specification.new do |s| - s.name = "swagger_client" - s.version = SwaggerClient::Swagger::VERSION + s.name = "petstore" + s.version = Petstore::Swagger::VERSION s.platform = Gem::Platform::RUBY s.authors = ["Zeke Sikelianos", "Tony Tam"] s.email = ["zeke@wordnik.com", "fehguy@gmail.com"] From fafddbf04028b8dd4fe2e1f244d5735064132806 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 26 Jun 2015 17:16:38 +0800 Subject: [PATCH 12/19] Fix naming in specs --- samples/client/petstore/ruby/spec/pet_spec.rb | 38 ++++++++--------- .../client/petstore/ruby/spec/request_spec.rb | 18 ++++---- .../petstore/ruby/spec/response_spec.rb | 8 ++-- .../client/petstore/ruby/spec/spec_helper.rb | 18 ++++---- .../client/petstore/ruby/spec/store_spec.rb | 4 +- .../client/petstore/ruby/spec/swagger_spec.rb | 42 +++++++++---------- 6 files changed, 64 insertions(+), 64 deletions(-) diff --git a/samples/client/petstore/ruby/spec/pet_spec.rb b/samples/client/petstore/ruby/spec/pet_spec.rb index 52030b7bf51d..990c5b3764f8 100644 --- a/samples/client/petstore/ruby/spec/pet_spec.rb +++ b/samples/client/petstore/ruby/spec/pet_spec.rb @@ -9,9 +9,9 @@ describe "Pet" do describe "pet methods" do it "should construct a new pet object" do - tag1 = SwaggerClient::Tag.new({'id' => 1, 'name'=> 'tag1'}) - tag2 = SwaggerClient::Tag.new({'id' => 2, 'name'=> 'tag2'}) - category1 = SwaggerClient::Category.new({:id => 1, :name => 'category unknown'}) + tag1 = Petstore::Tag.new({'id' => 1, 'name'=> 'tag1'}) + tag2 = Petstore::Tag.new({'id' => 2, 'name'=> 'tag2'}) + category1 = Petstore::Category.new({:id => 1, :name => 'category unknown'}) # initalize using both string and symbol key pet_hash = { :id => 10002, @@ -21,7 +21,7 @@ describe "Pet" do :category => category1, :tags => [tag1, tag2] } - pet = SwaggerClient::Pet.new(pet_hash) + pet = Petstore::Pet.new(pet_hash) # test new pet.name.should == "RUBY UNIT TESTING" pet.status.should == "pending" @@ -31,7 +31,7 @@ describe "Pet" do pet.category.name.should == 'category unknown' # test build_from_hash - pet2 = SwaggerClient::Pet.new + pet2 = Petstore::Pet.new pet2.build_from_hash(pet.to_hash) pet.to_hash.should == pet2.to_hash @@ -42,8 +42,8 @@ describe "Pet" do end it "should fetch a pet object" do - pet = SwaggerClient::PetApi.get_pet_by_id(10002) - pet.should be_a(SwaggerClient::Pet) + pet = Petstore::PetApi.get_pet_by_id(10002) + pet.should be_a(Petstore::Pet) pet.id.should == 10002 pet.name.should == "RUBY UNIT TESTING" pet.tags[0].name.should == "tag test" @@ -52,9 +52,9 @@ describe "Pet" do it "should not find a pet that does not exist" do begin - SwaggerClient::PetApi.get_pet_by_id(-1) + Petstore::PetApi.get_pet_by_id(-1) fail 'it should raise error' - rescue SwaggerClient::Swagger::ApiError => e + rescue Petstore::Swagger::ApiError => e e.code.should == 404 e.message.should == 'Not Found' e.response_body.should == '{"code":1,"type":"error","message":"Pet not found"}' @@ -64,21 +64,21 @@ describe "Pet" do end it "should find pets by status" do - pets = SwaggerClient::PetApi.find_pets_by_status(:status => 'available') + pets = Petstore::PetApi.find_pets_by_status(:status => 'available') pets.length.should >= 3 pets.each do |pet| - pet.should be_a(SwaggerClient::Pet) + pet.should be_a(Petstore::Pet) pet.status.should == 'available' end end it "should not find a pet with invalid status" do - pets = SwaggerClient::PetApi.find_pets_by_status(:status => 'invalid-status') + pets = Petstore::PetApi.find_pets_by_status(:status => 'invalid-status') pets.length.should == 0 end it "should find a pet by status" do - pets = SwaggerClient::PetApi.find_pets_by_status(:status => "available,sold") + pets = Petstore::PetApi.find_pets_by_status(:status => "available,sold") pets.each do |pet| if pet.status != 'available' && pet.status != 'sold' raise "pet status wasn't right" @@ -87,21 +87,21 @@ describe "Pet" do end it "should update a pet" do - pet = SwaggerClient::Pet.new({'id' => 10002, 'status' => 'sold'}) - SwaggerClient::PetApi.add_pet(:body => pet) + pet = Petstore::Pet.new({'id' => 10002, 'status' => 'sold'}) + Petstore::PetApi.add_pet(:body => pet) - fetched = SwaggerClient::PetApi.get_pet_by_id(10002) + fetched = Petstore::PetApi.get_pet_by_id(10002) fetched.id.should == 10002 fetched.status.should == 'sold' end it "should create a pet" do - pet = SwaggerClient::Pet.new('id' => 10002, 'name' => "RUBY UNIT TESTING") - result = SwaggerClient::PetApi.add_pet(:body => pet) + pet = Petstore::Pet.new('id' => 10002, 'name' => "RUBY UNIT TESTING") + result = Petstore::PetApi.add_pet(:body => pet) # nothing is returned result.should be_nil - pet = SwaggerClient::PetApi.get_pet_by_id(10002) + pet = Petstore::PetApi.get_pet_by_id(10002) pet.id.should == 10002 pet.name.should == "RUBY UNIT TESTING" end diff --git a/samples/client/petstore/ruby/spec/request_spec.rb b/samples/client/petstore/ruby/spec/request_spec.rb index 987a923547c6..4fa68d4d1b74 100644 --- a/samples/client/petstore/ruby/spec/request_spec.rb +++ b/samples/client/petstore/ruby/spec/request_spec.rb @@ -1,9 +1,9 @@ require 'spec_helper' -describe SwaggerClient::Swagger::Request do +describe Petstore::Swagger::Request do before(:each) do - SwaggerClient::Swagger.configure do |config| + Petstore::Swagger.configure do |config| inject_format = true config.api_key['api_key'] = 'special-key' config.host = 'petstore.swagger.io' @@ -15,7 +15,7 @@ describe SwaggerClient::Swagger::Request do @default_params = { :params => {:foo => "1", :bar => "2"} } - @request = SwaggerClient::Swagger::Request.new(@default_http_method, @default_path, @default_params) + @request = Petstore::Swagger::Request.new(@default_http_method, @default_path, @default_params) end describe "initialization" do @@ -24,7 +24,7 @@ describe SwaggerClient::Swagger::Request do end it "allows params to be nil" do - @request = SwaggerClient::Swagger::Request.new(@default_http_method, @default_path, :params => nil) + @request = Petstore::Swagger::Request.new(@default_http_method, @default_path, :params => nil) @request.params.should == {} end @@ -55,7 +55,7 @@ describe SwaggerClient::Swagger::Request do describe "path" do it "accounts for a total absence of format in the path string" do - @request = SwaggerClient::Swagger::Request.new(:get, "/word.{format}/cat/entries", @default_params.merge({ + @request = Petstore::Swagger::Request.new(:get, "/word.{format}/cat/entries", @default_params.merge({ :format => "xml", :params => { } @@ -64,7 +64,7 @@ describe SwaggerClient::Swagger::Request do end it "does string substitution (format) on path params" do - @request = SwaggerClient::Swagger::Request.new(:get, "/word.{format}/cat/entries", @default_params.merge({ + @request = Petstore::Swagger::Request.new(:get, "/word.{format}/cat/entries", @default_params.merge({ :format => "xml", :params => { } @@ -73,7 +73,7 @@ describe SwaggerClient::Swagger::Request do end it "URI encodes the path" do - @request = SwaggerClient::Swagger::Request.new(:get, "word.{format}/bill gates/definitions", @default_params.merge({ + @request = Petstore::Swagger::Request.new(:get, "word.{format}/bill gates/definitions", @default_params.merge({ :params => { :word => "bill gates" } @@ -85,7 +85,7 @@ describe SwaggerClient::Swagger::Request do describe "#update_params_for_auth!" do it "sets header api-key parameter with prefix" do - SwaggerClient::Swagger.configure do |config| + Petstore::Swagger.configure do |config| inject_format = true config.api_key_prefix['api_key'] = 'PREFIX' end @@ -95,7 +95,7 @@ describe SwaggerClient::Swagger::Request do end it "sets header api-key parameter without prefix" do - SwaggerClient::Swagger.configure do |config| + Petstore::Swagger.configure do |config| inject_format = true config.api_key_prefix['api_key'] = nil end diff --git a/samples/client/petstore/ruby/spec/response_spec.rb b/samples/client/petstore/ruby/spec/response_spec.rb index 8d75c6d1fae5..c583b413fcae 100644 --- a/samples/client/petstore/ruby/spec/response_spec.rb +++ b/samples/client/petstore/ruby/spec/response_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe SwaggerClient::Swagger::Response do +describe Petstore::Swagger::Response do before do configure_swagger @@ -12,7 +12,7 @@ describe SwaggerClient::Swagger::Response do @raw = Typhoeus::Request.get("http://petstore.swagger.io/v2/pet/10002") end - @response = SwaggerClient::Swagger::Response.new(@raw) + @response = Petstore::Swagger::Response.new(@raw) end describe "initialization" do @@ -43,7 +43,7 @@ describe SwaggerClient::Swagger::Response do @raw = Typhoeus::Request.get("http://petstore.swagger.io/v2/pet/10002", :headers => {'Accept'=> "application/xml"}) end - @response = SwaggerClient::Swagger::Response.new(@raw) + @response = Petstore::Swagger::Response.new(@raw) @response.format.should == 'xml' @response.xml?.should == true end @@ -74,7 +74,7 @@ describe SwaggerClient::Swagger::Response do data.should be_a(Hash) data.keys.should == [:pet] pet = data[:pet] - pet.should be_a(SwaggerClient::Pet) + pet.should be_a(Petstore::Pet) pet.id.should == 10002 end end diff --git a/samples/client/petstore/ruby/spec/spec_helper.rb b/samples/client/petstore/ruby/spec/spec_helper.rb index f9081d3fe086..55279384e61f 100644 --- a/samples/client/petstore/ruby/spec/spec_helper.rb +++ b/samples/client/petstore/ruby/spec/spec_helper.rb @@ -1,6 +1,6 @@ require 'rubygems' require 'bundler/setup' -require 'swagger_client' +require 'petstore' require 'vcr' require 'typhoeus' require 'json' @@ -37,7 +37,7 @@ end #end def configure_swagger - SwaggerClient::Swagger.configure do |config| + Petstore::Swagger.configure do |config| config.api_key['api_key'] = 'special-key' config.host = 'petstore.swagger.io' config.base_path = '/v2' @@ -47,25 +47,25 @@ end # always delete and then re-create the pet object with 10002 def prepare_pet # remove the pet - SwaggerClient::PetApi.delete_pet(10002) + Petstore::PetApi.delete_pet(10002) # recreate the pet - category = SwaggerClient::Category.new('id' => 20002, 'name' => 'category test') - tag = SwaggerClient::Tag.new('id' => 30002, 'name' => 'tag test') - pet = SwaggerClient::Pet.new('id' => 10002, 'name' => "RUBY UNIT TESTING", 'photo_urls' => 'photo url', + category = Petstore::Category.new('id' => 20002, 'name' => 'category test') + tag = Petstore::Tag.new('id' => 30002, 'name' => 'tag test') + pet = Petstore::Pet.new('id' => 10002, 'name' => "RUBY UNIT TESTING", 'photo_urls' => 'photo url', 'category' => category, 'tags' => [tag], 'status' => 'pending') - SwaggerClient::PetApi.add_pet(:'body'=> pet) + Petstore::PetApi.add_pet(:'body'=> pet) end # always delete and then re-create the store order def prepare_store - order = SwaggerClient::Order.new("id" => 10002, + order = Petstore::Order.new("id" => 10002, "petId" => 10002, "quantity" => 789, "shipDate" => "2015-04-06T23:42:01.678Z", "status" => "placed", "complete" => false) - SwaggerClient::StoreApi.place_order(:body => order) + Petstore::StoreApi.place_order(:body => order) end configure_swagger diff --git a/samples/client/petstore/ruby/spec/store_spec.rb b/samples/client/petstore/ruby/spec/store_spec.rb index 3ad09f1ad617..8c59de39fec6 100644 --- a/samples/client/petstore/ruby/spec/store_spec.rb +++ b/samples/client/petstore/ruby/spec/store_spec.rb @@ -7,12 +7,12 @@ describe "Store" do end it "should fetch an order" do - item = SwaggerClient::StoreApi.get_order_by_id(10002) + item = Petstore::StoreApi.get_order_by_id(10002) item.id.should == 10002 end it "should featch the inventory" do - result = SwaggerClient::StoreApi.get_inventory + result = Petstore::StoreApi.get_inventory result.should be_a(Hash) result.should_not be_empty result.each do |k, v| diff --git a/samples/client/petstore/ruby/spec/swagger_spec.rb b/samples/client/petstore/ruby/spec/swagger_spec.rb index 38b4a850ae9b..957da5e20a62 100644 --- a/samples/client/petstore/ruby/spec/swagger_spec.rb +++ b/samples/client/petstore/ruby/spec/swagger_spec.rb @@ -1,56 +1,56 @@ # require 'spec_helper' require File.dirname(__FILE__) + '/spec_helper' -describe SwaggerClient::Swagger do +describe Petstore::Swagger do before(:each) do configure_swagger end - + after(:each) do end context 'initialization' do - + context 'URL stuff' do context 'host' do it 'removes http from host' do - SwaggerClient::Swagger.configure {|c| c.host = 'http://example.com' } - SwaggerClient::Swagger.configuration.host.should == 'example.com' + Petstore::Swagger.configure {|c| c.host = 'http://example.com' } + Petstore::Swagger.configuration.host.should == 'example.com' end it 'removes https from host' do - SwaggerClient::Swagger.configure {|c| c.host = 'https://wookiee.com' } - SwaggerClient::Swagger.configuration.host.should == 'wookiee.com' + Petstore::Swagger.configure {|c| c.host = 'https://wookiee.com' } + Petstore::Swagger.configuration.host.should == 'wookiee.com' end it 'removes trailing path from host' do - SwaggerClient::Swagger.configure {|c| c.host = 'hobo.com/v4' } - SwaggerClient::Swagger.configuration.host.should == 'hobo.com' + Petstore::Swagger.configure {|c| c.host = 'hobo.com/v4' } + Petstore::Swagger.configuration.host.should == 'hobo.com' end end - + context 'base_path' do it "prepends a slash to base_path" do - SwaggerClient::Swagger.configure {|c| c.base_path = 'v4/dog' } - SwaggerClient::Swagger.configuration.base_path.should == '/v4/dog' + Petstore::Swagger.configure {|c| c.base_path = 'v4/dog' } + Petstore::Swagger.configuration.base_path.should == '/v4/dog' end - + it "doesn't prepend a slash if one is already there" do - SwaggerClient::Swagger.configure {|c| c.base_path = '/v4/dog' } - SwaggerClient::Swagger.configuration.base_path.should == '/v4/dog' + Petstore::Swagger.configure {|c| c.base_path = '/v4/dog' } + Petstore::Swagger.configuration.base_path.should == '/v4/dog' end - + it "ends up as a blank string if nil" do - SwaggerClient::Swagger.configure {|c| c.base_path = nil } - SwaggerClient::Swagger.configuration.base_path.should == '' + Petstore::Swagger.configure {|c| c.base_path = nil } + Petstore::Swagger.configuration.base_path.should == '' end - + end end - + end - + end From 108b2241c0d773d4fa07cbc7280cb5fddb06a865 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 1 Jul 2015 17:15:41 +0800 Subject: [PATCH 13/19] Validate model property against allowed values (enum) when present with attribute setters --- .../src/main/resources/ruby/model.mustache | 13 ++++++++++-- .../ruby/lib/petstore/models/category.rb | 5 +++-- .../ruby/lib/petstore/models/order.rb | 21 +++++++++++++------ .../petstore/ruby/lib/petstore/models/pet.rb | 21 +++++++++++++------ .../petstore/ruby/lib/petstore/models/tag.rb | 5 +++-- .../petstore/ruby/lib/petstore/models/user.rb | 17 ++++++++------- 6 files changed, 56 insertions(+), 26 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/model.mustache b/modules/swagger-codegen/src/main/resources/ruby/model.mustache index d0d4e7877564..1091ab5174ac 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/model.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/model.mustache @@ -29,11 +29,20 @@ module {{moduleName}} {{#vars}} if attributes[:'{{{baseName}}}'] {{#isContainer}}if (value = attributes[:'{{{baseName}}}']).is_a?(Array) - @{{{name}}} = value - end{{/isContainer}}{{^isContainer}}@{{{name}}} = attributes[:'{{{baseName}}}']{{/isContainer}} + self.{{{name}}} = value + end{{/isContainer}}{{^isContainer}}self.{{{name}}} = attributes[:'{{{baseName}}}']{{/isContainer}} end {{/vars}} end +{{#vars}}{{#isEnum}} + def {{{name}}}=({{{name}}}) + allowed_values = [{{#allowableValues}}{{#values}}"{{{this}}}"{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}] + if {{{name}}} && !allowed_values.include?({{{name}}}) + fail "invalid value for '{{{name}}}', must be one of #{allowed_values}" + end + @{{{name}}} = {{{name}}} + end +{{/isEnum}}{{/vars}} end {{/model}} {{/models}} diff --git a/samples/client/petstore/ruby/lib/petstore/models/category.rb b/samples/client/petstore/ruby/lib/petstore/models/category.rb index 3a17b51a7ee2..1e36eac4147d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/category.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/category.rb @@ -32,13 +32,14 @@ module Petstore if attributes[:'id'] - @id = attributes[:'id'] + self.id = attributes[:'id'] end if attributes[:'name'] - @name = attributes[:'name'] + self.name = attributes[:'name'] end end + end end diff --git a/samples/client/petstore/ruby/lib/petstore/models/order.rb b/samples/client/petstore/ruby/lib/petstore/models/order.rb index bff403026507..ab6f8f001890 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/order.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/order.rb @@ -48,29 +48,38 @@ module Petstore if attributes[:'id'] - @id = attributes[:'id'] + self.id = attributes[:'id'] end if attributes[:'petId'] - @pet_id = attributes[:'petId'] + self.pet_id = attributes[:'petId'] end if attributes[:'quantity'] - @quantity = attributes[:'quantity'] + self.quantity = attributes[:'quantity'] end if attributes[:'shipDate'] - @ship_date = attributes[:'shipDate'] + self.ship_date = attributes[:'shipDate'] end if attributes[:'status'] - @status = attributes[:'status'] + self.status = attributes[:'status'] end if attributes[:'complete'] - @complete = attributes[:'complete'] + self.complete = attributes[:'complete'] end end + + def status=(status) + allowed_values = ["placed", "approved", "delivered"] + if status && !allowed_values.include?(status) + fail "invalid value for 'status', must be one of #{allowed_values}" + end + @status = status + end + end end diff --git a/samples/client/petstore/ruby/lib/petstore/models/pet.rb b/samples/client/petstore/ruby/lib/petstore/models/pet.rb index 5ee3d84aaf35..a208cf3f87c1 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/pet.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/pet.rb @@ -48,33 +48,42 @@ module Petstore if attributes[:'id'] - @id = attributes[:'id'] + self.id = attributes[:'id'] end if attributes[:'category'] - @category = attributes[:'category'] + self.category = attributes[:'category'] end if attributes[:'name'] - @name = attributes[:'name'] + self.name = attributes[:'name'] end if attributes[:'photoUrls'] if (value = attributes[:'photoUrls']).is_a?(Array) - @photo_urls = value + self.photo_urls = value end end if attributes[:'tags'] if (value = attributes[:'tags']).is_a?(Array) - @tags = value + self.tags = value end end if attributes[:'status'] - @status = attributes[:'status'] + self.status = attributes[:'status'] end end + + def status=(status) + allowed_values = ["available", "pending", "sold"] + if status && !allowed_values.include?(status) + fail "invalid value for 'status', must be one of #{allowed_values}" + end + @status = status + end + end end diff --git a/samples/client/petstore/ruby/lib/petstore/models/tag.rb b/samples/client/petstore/ruby/lib/petstore/models/tag.rb index fcbdd68f20ff..3fb5e1f969c2 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/tag.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/tag.rb @@ -32,13 +32,14 @@ module Petstore if attributes[:'id'] - @id = attributes[:'id'] + self.id = attributes[:'id'] end if attributes[:'name'] - @name = attributes[:'name'] + self.name = attributes[:'name'] end end + end end diff --git a/samples/client/petstore/ruby/lib/petstore/models/user.rb b/samples/client/petstore/ruby/lib/petstore/models/user.rb index f45f7e0c3cb4..3a6d5f354e0a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/user.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/user.rb @@ -56,37 +56,38 @@ module Petstore if attributes[:'id'] - @id = attributes[:'id'] + self.id = attributes[:'id'] end if attributes[:'username'] - @username = attributes[:'username'] + self.username = attributes[:'username'] end if attributes[:'firstName'] - @first_name = attributes[:'firstName'] + self.first_name = attributes[:'firstName'] end if attributes[:'lastName'] - @last_name = attributes[:'lastName'] + self.last_name = attributes[:'lastName'] end if attributes[:'email'] - @email = attributes[:'email'] + self.email = attributes[:'email'] end if attributes[:'password'] - @password = attributes[:'password'] + self.password = attributes[:'password'] end if attributes[:'phone'] - @phone = attributes[:'phone'] + self.phone = attributes[:'phone'] end if attributes[:'userStatus'] - @user_status = attributes[:'userStatus'] + self.user_status = attributes[:'userStatus'] end end + end end From 6f1dd5ce3523069ecad37548953be8e5dd828a7c Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 1 Jul 2015 17:37:16 +0800 Subject: [PATCH 14/19] Store last response in a thread-safe way --- .../swagger-codegen/src/main/resources/ruby/swagger.mustache | 2 +- .../src/main/resources/ruby/swagger/request.mustache | 2 +- samples/client/petstore/ruby/lib/petstore/swagger.rb | 2 +- samples/client/petstore/ruby/lib/petstore/swagger/request.rb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache index e11301327e0d..70edb684843e 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache @@ -1,7 +1,7 @@ module {{moduleName}} module Swagger class << self - attr_accessor :logger, :last_response + attr_accessor :logger # A Swagger configuration object. Must act like a hash and return sensible # values for all Swagger configuration options. See Swagger::Configuration. 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 8f07e5ab66c8..ce7fdcde011e 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -138,7 +138,7 @@ module {{moduleName}} end # record as last response - Swagger.last_response = @response + Thread.current[:swagger_last_response] = @response unless @response.success? fail ApiError.new(:code => @response.code, diff --git a/samples/client/petstore/ruby/lib/petstore/swagger.rb b/samples/client/petstore/ruby/lib/petstore/swagger.rb index d2dcc6ab201e..0d6fb2bc4e39 100644 --- a/samples/client/petstore/ruby/lib/petstore/swagger.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger.rb @@ -1,7 +1,7 @@ module Petstore module Swagger class << self - attr_accessor :logger, :last_response + attr_accessor :logger # A Swagger configuration object. Must act like a hash and return sensible # values for all Swagger configuration options. See Swagger::Configuration. diff --git a/samples/client/petstore/ruby/lib/petstore/swagger/request.rb b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb index 049c6c15cb1d..caa9099d534f 100644 --- a/samples/client/petstore/ruby/lib/petstore/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb @@ -137,7 +137,7 @@ module Petstore end # record as last response - Swagger.last_response = @response + Thread.current[:swagger_last_response] = @response unless @response.success? fail ApiError.new(:code => @response.code, From 846d282ba02c9cf3f0c14618d3655798f3160519 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 1 Jul 2015 18:48:31 +0800 Subject: [PATCH 15/19] Add helper methods for last response --- .../src/main/resources/ruby/swagger.mustache | 8 ++++++++ .../src/main/resources/ruby/swagger/request.mustache | 2 +- samples/client/petstore/ruby/lib/petstore/swagger.rb | 8 ++++++++ .../client/petstore/ruby/lib/petstore/swagger/request.rb | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache index 70edb684843e..9be82e015cd4 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache @@ -63,6 +63,14 @@ module {{moduleName}} response_body = request.response.body Swagger.configuration.auth_token = response_body['token'] end + + def last_response + Thread.current[:swagger_last_response] + end + + def last_response=(response) + Thread.current[:swagger_last_response] = response + end end end 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 ce7fdcde011e..8f07e5ab66c8 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -138,7 +138,7 @@ module {{moduleName}} end # record as last response - Thread.current[:swagger_last_response] = @response + Swagger.last_response = @response unless @response.success? fail ApiError.new(:code => @response.code, diff --git a/samples/client/petstore/ruby/lib/petstore/swagger.rb b/samples/client/petstore/ruby/lib/petstore/swagger.rb index 0d6fb2bc4e39..4f1433d3286a 100644 --- a/samples/client/petstore/ruby/lib/petstore/swagger.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger.rb @@ -63,6 +63,14 @@ module Petstore response_body = request.response.body Swagger.configuration.auth_token = response_body['token'] end + + def last_response + Thread.current[:swagger_last_response] + end + + def last_response=(response) + Thread.current[:swagger_last_response] = response + end end end end diff --git a/samples/client/petstore/ruby/lib/petstore/swagger/request.rb b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb index caa9099d534f..049c6c15cb1d 100644 --- a/samples/client/petstore/ruby/lib/petstore/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb @@ -137,7 +137,7 @@ module Petstore end # record as last response - Thread.current[:swagger_last_response] = @response + Swagger.last_response = @response unless @response.success? fail ApiError.new(:code => @response.code, From 66d16cfeafefc34ef96a4d24355fda8304a58097 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 3 Jul 2015 16:46:23 +0800 Subject: [PATCH 16/19] Validate parameter against allowed values (enum) --- .../io/swagger/codegen/CodegenParameter.java | 15 +++++++++++++++ .../java/io/swagger/codegen/DefaultCodegen.java | 10 ++++++++-- .../src/main/resources/ruby/api.mustache | 12 +++++++++--- .../petstore/ruby/lib/petstore/api/pet_api.rb | 16 ++++------------ .../petstore/ruby/lib/petstore/api/store_api.rb | 8 ++------ .../petstore/ruby/lib/petstore/api/user_api.rb | 14 +++----------- 6 files changed, 41 insertions(+), 34 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenParameter.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenParameter.java index 6777d1028da4..c5aeaab124cc 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenParameter.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenParameter.java @@ -1,10 +1,18 @@ package io.swagger.codegen; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.List; + public class CodegenParameter { public Boolean isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isFile, notFile, hasMore, isContainer, secondaryParam; public String baseName, paramName, dataType, collectionFormat, description, baseType, defaultValue; public String jsonSchema; + public boolean isEnum; + public List _enum; + public Map allowableValues; /** * Determines whether this parameter is mandatory. If the parameter is in "path", @@ -35,6 +43,13 @@ public class CodegenParameter { output.required = this.required; output.jsonSchema = this.jsonSchema; output.defaultValue = this.defaultValue; + output.isEnum = this.isEnum; + if (this._enum != null) { + output._enum = new ArrayList(this._enum); + } + if (this.allowableValues != null) { + output.allowableValues = new HashMap(this.allowableValues); + } return output; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 71b6295c9bee..fd4b780f8ff0 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -36,6 +36,7 @@ import io.swagger.models.properties.LongProperty; import io.swagger.models.properties.MapProperty; import io.swagger.models.properties.Property; import io.swagger.models.properties.PropertyBuilder; +import io.swagger.models.properties.PropertyBuilder.PropertyId; import io.swagger.models.properties.RefProperty; import io.swagger.models.properties.StringProperty; import io.swagger.util.Json; @@ -964,7 +965,9 @@ public class DefaultCodegen { p.baseType = pr.datatype; imports.add(pr.baseType); } else { - property = PropertyBuilder.build(qp.getType(), qp.getFormat(), null); + Map args = new HashMap(); + args.put(PropertyId.ENUM, qp.getEnum()); + property = PropertyBuilder.build(qp.getType(), qp.getFormat(), args); } if (property == null) { LOGGER.warn("warning! Property type \"" + qp.getType() + "\" not found for parameter \"" + param.getName() + "\", using String"); @@ -972,8 +975,11 @@ public class DefaultCodegen { } property.setRequired(param.getRequired()); CodegenProperty model = fromProperty(qp.getName(), property); - p.collectionFormat = collectionFormat; p.dataType = model.datatype; + p.isEnum = model.isEnum; + p._enum = model._enum; + p.allowableValues = model.allowableValues; + p.collectionFormat = collectionFormat; p.paramName = toParamName(qp.getName()); if (model.complexType != null) { diff --git a/modules/swagger-codegen/src/main/resources/ruby/api.mustache b/modules/swagger-codegen/src/main/resources/ruby/api.mustache index 76a44659f811..612292b78fff 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api.mustache @@ -17,9 +17,15 @@ module {{moduleName}} end {{#allParams}}{{#required}} # verify the required parameter '{{paramName}}' is set - raise "Missing the required parameter '{{paramName}}' when calling {{nickname}}" if {{{paramName}}}.nil? - {{/required}}{{/allParams}} - + fail "Missing the required parameter '{{paramName}}' when calling {{nickname}}" if {{{paramName}}}.nil?{{#isEnum}} + unless [{{#allowableValues}}{{#values}}'{{{this}}}'{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}].include?({{{paramName}}}) + fail "invalid value for '{{{paramName}}}', must be one of {{#allowableValues}}{{#values}}{{{this}}}{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}" + end{{/isEnum}} + {{/required}}{{^required}}{{#isEnum}} + if opts[:'{{{paramName}}}'] && ![{{#allowableValues}}{{#values}}'{{{this}}}'{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}].include?(opts[:'{{{paramName}}}']) + fail 'invalid value for "{{{paramName}}}", must be one of {{#allowableValues}}{{#values}}{{{this}}}{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}' + end + {{/isEnum}}{{/required}}{{/allParams}} # resource path path = "{{path}}".sub('{format}','json'){{#pathParams}}.sub('{' + '{{baseName}}' + '}', {{paramName}}.to_s){{/pathParams}} diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index 096d964752d8..0c6521289e9f 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -13,7 +13,6 @@ module Petstore Swagger.logger.debug "Calling API: PetApi#update_pet ..." end - # resource path path = "/pet".sub('{format}','json') @@ -56,7 +55,6 @@ module Petstore Swagger.logger.debug "Calling API: PetApi#add_pet ..." end - # resource path path = "/pet".sub('{format}','json') @@ -99,7 +97,6 @@ module Petstore Swagger.logger.debug "Calling API: PetApi#find_pets_by_status ..." end - # resource path path = "/pet/findByStatus".sub('{format}','json') @@ -144,7 +141,6 @@ module Petstore Swagger.logger.debug "Calling API: PetApi#find_pets_by_tags ..." end - # resource path path = "/pet/findByTags".sub('{format}','json') @@ -190,9 +186,8 @@ module Petstore end # verify the required parameter 'pet_id' is set - raise "Missing the required parameter 'pet_id' when calling get_pet_by_id" if pet_id.nil? + fail "Missing the required parameter 'pet_id' when calling get_pet_by_id" if pet_id.nil? - # resource path path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) @@ -239,9 +234,8 @@ module Petstore end # verify the required parameter 'pet_id' is set - raise "Missing the required parameter 'pet_id' when calling update_pet_with_form" if pet_id.nil? + fail "Missing the required parameter 'pet_id' when calling update_pet_with_form" if pet_id.nil? - # resource path path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) @@ -288,9 +282,8 @@ module Petstore end # verify the required parameter 'pet_id' is set - raise "Missing the required parameter 'pet_id' when calling delete_pet" if pet_id.nil? + fail "Missing the required parameter 'pet_id' when calling delete_pet" if pet_id.nil? - # resource path path = "/pet/{petId}".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) @@ -337,9 +330,8 @@ module Petstore end # verify the required parameter 'pet_id' is set - raise "Missing the required parameter 'pet_id' when calling upload_file" if pet_id.nil? + fail "Missing the required parameter 'pet_id' when calling upload_file" if pet_id.nil? - # resource path path = "/pet/{petId}/uploadImage".sub('{format}','json').sub('{' + 'petId' + '}', pet_id.to_s) diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb index 456b8a2eebbe..78328f4b8329 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -12,7 +12,6 @@ module Petstore Swagger.logger.debug "Calling API: StoreApi#get_inventory ..." end - # resource path path = "/store/inventory".sub('{format}','json') @@ -56,7 +55,6 @@ module Petstore Swagger.logger.debug "Calling API: StoreApi#place_order ..." end - # resource path path = "/store/order".sub('{format}','json') @@ -101,9 +99,8 @@ module Petstore end # verify the required parameter 'order_id' is set - raise "Missing the required parameter 'order_id' when calling get_order_by_id" if order_id.nil? + fail "Missing the required parameter 'order_id' when calling get_order_by_id" if order_id.nil? - # resource path path = "/store/order/{orderId}".sub('{format}','json').sub('{' + 'orderId' + '}', order_id.to_s) @@ -148,9 +145,8 @@ module Petstore end # verify the required parameter 'order_id' is set - raise "Missing the required parameter 'order_id' when calling delete_order" if order_id.nil? + fail "Missing the required parameter 'order_id' when calling delete_order" if order_id.nil? - # resource path path = "/store/order/{orderId}".sub('{format}','json').sub('{' + 'orderId' + '}', order_id.to_s) diff --git a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb index d5aeae31513c..532a9ffa5bf6 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb @@ -13,7 +13,6 @@ module Petstore Swagger.logger.debug "Calling API: UserApi#create_user ..." end - # resource path path = "/user".sub('{format}','json') @@ -56,7 +55,6 @@ module Petstore Swagger.logger.debug "Calling API: UserApi#create_users_with_array_input ..." end - # resource path path = "/user/createWithArray".sub('{format}','json') @@ -99,7 +97,6 @@ module Petstore Swagger.logger.debug "Calling API: UserApi#create_users_with_list_input ..." end - # resource path path = "/user/createWithList".sub('{format}','json') @@ -143,7 +140,6 @@ module Petstore Swagger.logger.debug "Calling API: UserApi#login_user ..." end - # resource path path = "/user/login".sub('{format}','json') @@ -188,7 +184,6 @@ module Petstore Swagger.logger.debug "Calling API: UserApi#logout_user ..." end - # resource path path = "/user/logout".sub('{format}','json') @@ -232,9 +227,8 @@ module Petstore end # verify the required parameter 'username' is set - raise "Missing the required parameter 'username' when calling get_user_by_name" if username.nil? + fail "Missing the required parameter 'username' when calling get_user_by_name" if username.nil? - # resource path path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) @@ -280,9 +274,8 @@ module Petstore end # verify the required parameter 'username' is set - raise "Missing the required parameter 'username' when calling update_user" if username.nil? + fail "Missing the required parameter 'username' when calling update_user" if username.nil? - # resource path path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) @@ -326,9 +319,8 @@ module Petstore end # verify the required parameter 'username' is set - raise "Missing the required parameter 'username' when calling delete_user" if username.nil? + fail "Missing the required parameter 'username' when calling delete_user" if username.nil? - # resource path path = "/user/{username}".sub('{format}','json').sub('{' + 'username' + '}', username.to_s) From f42f329acedb5fa6ae85d671451d1e4ab2c45e31 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 8 Jul 2015 13:10:28 +0800 Subject: [PATCH 17/19] Parse "date" as Date in Ruby client --- .../java/io/swagger/codegen/languages/RubyClientCodegen.java | 2 +- .../src/main/resources/ruby/base_object.mustache | 4 ++++ .../src/main/resources/ruby/swagger/response.mustache | 3 +++ .../client/petstore/ruby/lib/petstore/models/base_object.rb | 4 ++++ samples/client/petstore/ruby/lib/petstore/swagger/response.rb | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index 0ea0be21a787..5aa30a1c9fd3 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -55,7 +55,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("float", "Float"); typeMapping.put("double", "Float"); typeMapping.put("number", "Float"); - typeMapping.put("date", "DateTime"); + typeMapping.put("date", "Date"); typeMapping.put("DateTime", "DateTime"); typeMapping.put("boolean", "BOOLEAN"); typeMapping.put("array", "Array"); diff --git a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache index eda92028f789..77b320d07f43 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/base_object.mustache @@ -1,3 +1,5 @@ +require 'date' + module {{moduleName}} # base class containing fundamental method such as to_hash, build_from_hash and more class BaseObject @@ -26,6 +28,8 @@ module {{moduleName}} case type.to_sym when :DateTime DateTime.parse(value) + when :Date + Date.parse(value) when :String value.to_s when :Integer diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache index 575bc5d0ae02..8e5b654011f0 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache @@ -62,6 +62,9 @@ module {{moduleName}} when 'DateTime' # parse date time (expecting ISO 8601 format) DateTime.parse data + when 'Date' + # parse date time (expecting ISO 8601 format) + Date.parse data when 'Object' # generic object, return directly data diff --git a/samples/client/petstore/ruby/lib/petstore/models/base_object.rb b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb index 8223b2e844d8..f17eef349e2c 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/base_object.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/base_object.rb @@ -1,3 +1,5 @@ +require 'date' + module Petstore # base class containing fundamental method such as to_hash, build_from_hash and more class BaseObject @@ -26,6 +28,8 @@ module Petstore case type.to_sym when :DateTime DateTime.parse(value) + when :Date + Date.parse(value) when :String value.to_s when :Integer diff --git a/samples/client/petstore/ruby/lib/petstore/swagger/response.rb b/samples/client/petstore/ruby/lib/petstore/swagger/response.rb index 770f04f6e2cb..0f72705f967d 100644 --- a/samples/client/petstore/ruby/lib/petstore/swagger/response.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/response.rb @@ -62,6 +62,9 @@ module Petstore when 'DateTime' # parse date time (expecting ISO 8601 format) DateTime.parse data + when 'Date' + # parse date time (expecting ISO 8601 format) + Date.parse data when 'Object' # generic object, return directly data From a24fee00cb04d5eb3fc2a5b1daa71e02aab3f413 Mon Sep 17 00:00:00 2001 From: xhh Date: Wed, 8 Jul 2015 16:46:31 +0800 Subject: [PATCH 18/19] Support primitive response in Ruby client --- .../resources/ruby/swagger/response.mustache | 29 +++++++++++-------- .../ruby/lib/petstore/swagger/response.rb | 29 +++++++++++-------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache index 8e5b654011f0..b5f53dae5469 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache @@ -40,25 +40,30 @@ module {{moduleName}} end begin - data = JSON.parse(body, :symbolize_names => true) + data = JSON.parse("[#{body}]", :symbolize_names => true)[0] rescue JSON::ParserError => e - if return_type == 'String' - return body + if %w(String Date DateTime).include?(return_type) + data = body else raise e end end - build_models data, return_type + convert_to_type data, return_type end - # Walk through the given data and, when necessary, build model(s) from - # Hash data for array/hash values of the response. - def build_models(data, return_type) + # Convert data to the given return type. + def convert_to_type(data, return_type) + return nil if data.nil? case return_type - when 'String', 'Integer', 'Float', 'BOOLEAN' - # primitives, return directly - data + when 'String' + data.to_s + when 'Integer' + data.to_i + when 'Float' + data.to_f + when 'BOOLEAN' + data == true when 'DateTime' # parse date time (expecting ISO 8601 format) DateTime.parse data @@ -71,12 +76,12 @@ module {{moduleName}} when /\AArray<(.+)>\z/ # e.g. Array sub_type = $1 - data.map {|item| build_models(item, sub_type) } + data.map {|item| convert_to_type(item, sub_type) } when /\AHash\\z/ # e.g. Hash sub_type = $1 {}.tap do |hash| - data.each {|k, v| hash[k] = build_models(v, sub_type) } + data.each {|k, v| hash[k] = convert_to_type(v, sub_type) } end else # models, e.g. Pet diff --git a/samples/client/petstore/ruby/lib/petstore/swagger/response.rb b/samples/client/petstore/ruby/lib/petstore/swagger/response.rb index 0f72705f967d..6d85010d6da9 100644 --- a/samples/client/petstore/ruby/lib/petstore/swagger/response.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/response.rb @@ -40,25 +40,30 @@ module Petstore end begin - data = JSON.parse(body, :symbolize_names => true) + data = JSON.parse("[#{body}]", :symbolize_names => true)[0] rescue JSON::ParserError => e - if return_type == 'String' - return body + if %w(String Date DateTime).include?(return_type) + data = body else raise e end end - build_models data, return_type + convert_to_type data, return_type end - # Walk through the given data and, when necessary, build model(s) from - # Hash data for array/hash values of the response. - def build_models(data, return_type) + # Convert data to the given return type. + def convert_to_type(data, return_type) + return nil if data.nil? case return_type - when 'String', 'Integer', 'Float', 'BOOLEAN' - # primitives, return directly - data + when 'String' + data.to_s + when 'Integer' + data.to_i + when 'Float' + data.to_f + when 'BOOLEAN' + data == true when 'DateTime' # parse date time (expecting ISO 8601 format) DateTime.parse data @@ -71,12 +76,12 @@ module Petstore when /\AArray<(.+)>\z/ # e.g. Array sub_type = $1 - data.map {|item| build_models(item, sub_type) } + data.map {|item| convert_to_type(item, sub_type) } when /\AHash\\z/ # e.g. Hash sub_type = $1 {}.tap do |hash| - data.each {|k, v| hash[k] = build_models(v, sub_type) } + data.each {|k, v| hash[k] = convert_to_type(v, sub_type) } end else # models, e.g. Pet From a51d71e72860ff70e84f54ce6be3c9d667a9e19c Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 9 Jul 2015 10:48:16 +0800 Subject: [PATCH 19/19] Fix syntax error when there are no authMethods --- .../src/main/java/io/swagger/codegen/DefaultGenerator.java | 6 +++++- .../src/main/resources/ruby/swagger/request.mustache | 5 ++++- .../client/petstore/ruby/lib/petstore/swagger/request.rb | 5 ++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java index 0ad05b0762bc..1e23e3b98580 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultGenerator.java @@ -218,7 +218,11 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { bundle.put("models", allModels); bundle.put("apiFolder", config.apiPackage().replace('.', File.separatorChar)); bundle.put("modelPackage", config.modelPackage()); - bundle.put("authMethods", config.fromSecurity(swagger.getSecurityDefinitions())); + List authMethods = config.fromSecurity(swagger.getSecurityDefinitions()); + if (!authMethods.isEmpty()) { + bundle.put("authMethods", authMethods); + bundle.put("hasAuthMethods", true); + } if (swagger.getExternalDocs() != null) { bundle.put("externalDocs", swagger.getExternalDocs()); } 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 8f07e5ab66c8..5878888a21f6 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache @@ -30,10 +30,12 @@ module {{moduleName}} self.path = path attributes.each { |name, value| send "#{name}=", value } - + {{#hasAuthMethods}} update_params_for_auth! + {{/hasAuthMethods}} end + {{#hasAuthMethods}} # Update hearder and query params based on authentication settings. def update_params_for_auth! (@auth_names || []).each do |auth_name| @@ -48,6 +50,7 @@ module {{moduleName}} end end end + {{/hasAuthMethods}} # Get API key (with prefix if set). # @param [String] param_name the parameter name of API key auth diff --git a/samples/client/petstore/ruby/lib/petstore/swagger/request.rb b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb index 049c6c15cb1d..630b7a27d2e4 100644 --- a/samples/client/petstore/ruby/lib/petstore/swagger/request.rb +++ b/samples/client/petstore/ruby/lib/petstore/swagger/request.rb @@ -30,10 +30,12 @@ module Petstore self.path = path attributes.each { |name, value| send "#{name}=", value } - + update_params_for_auth! + end + # Update hearder and query params based on authentication settings. def update_params_for_auth! (@auth_names || []).each do |auth_name| @@ -47,6 +49,7 @@ module Petstore end end end + # Get API key (with prefix if set). # @param [String] param_name the parameter name of API key auth