diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache
new file mode 100644
index 00000000000..8e295047dd9
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/ruby/api_client.mustache
@@ -0,0 +1,77 @@
+require 'logger'
+require 'json'
+
+module {{moduleName}}
+ class ApiClient
+ attr_accessor :logger
+
+ # A Swagger configuration object. Must act like a hash and return sensible
+ # values for all Swagger configuration options. See Swagger::Configuration.
+ attr_accessor :configuration
+
+ attr_accessor :resources
+
+ # Call this method to modify defaults in your initializers.
+ #
+ # @example
+ # Swagger.configure do |config|
+ # config.api_key['api_key'] = '1234567890abcdef' # api key authentication
+ # config.username = 'wordlover' # http basic authentication
+ # config.password = 'i<3words' # http basic authentication
+ # config.format = 'json' # optional, defaults to 'json'
+ # end
+ #
+ def configure
+ yield(configuration) if block_given?
+
+ self.logger = configuration.logger
+
+ # remove :// from scheme
+ configuration.scheme.sub!(/:\/\//, '')
+
+ # remove http(s):// and anything after a slash
+ configuration.host.sub!(/https?:\/\//, '')
+ configuration.host = configuration.host.split('/').first
+
+ # Add leading and trailing slashes to base_path
+ configuration.base_path = "/#{configuration.base_path}".gsub(/\/+/, '/')
+ configuration.base_path = "" if configuration.base_path == "/"
+ end
+
+ def authenticated?
+ !Swagger.configuration.auth_token.nil?
+ end
+
+ def de_authenticate
+ Swagger.configuration.auth_token = nil
+ end
+
+ def authenticate
+ return if Swagger.authenticated?
+
+ if Swagger.configuration.username.nil? || Swagger.configuration.password.nil?
+ raise ApiError, "Username and password are required to authenticate."
+ end
+
+ request = Swagger::Request.new(
+ :get,
+ "account/authenticate/{username}",
+ :params => {
+ :username => Swagger.configuration.username,
+ :password => Swagger.configuration.password
+ }
+ )
+
+ 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
diff --git a/modules/swagger-codegen/src/main/resources/ruby/gem.mustache b/modules/swagger-codegen/src/main/resources/ruby/gem.mustache
index a43c8a9f6ea..41f151590d9 100644
--- a/modules/swagger-codegen/src/main/resources/ruby/gem.mustache
+++ b/modules/swagger-codegen/src/main/resources/ruby/gem.mustache
@@ -1,10 +1,9 @@
-# Swagger common files
-require '{{gemName}}/swagger'
-require '{{gemName}}/swagger/configuration'
-require '{{gemName}}/swagger/api_error'
-require '{{gemName}}/swagger/request'
-require '{{gemName}}/swagger/response'
-require '{{gemName}}/swagger/version'
+# Common files
+require '{{gemName}}/api_client'
+require '{{gemName}}/api_error'
+require '{{gemName}}/request'
+require '{{gemName}}/response'
+require '{{gemName}}/version'
# Models
require '{{gemName}}/{{modelPackage}}/base_object'
@@ -20,7 +19,4 @@ require '{{importPath}}'
{{/apiInfo}}
module {{moduleName}}
- # Initialize the default configuration
- Swagger.configuration = Swagger::Configuration.new
- Swagger.configure { |config| }
end
diff --git a/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache b/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache
index 38d70c07dd5..5c9c1c1a497 100644
--- a/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache
+++ b/modules/swagger-codegen/src/main/resources/ruby/gemspec.mustache
@@ -1,10 +1,10 @@
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)
-require "{{gemName}}/swagger/version"
+require "{{gemName}}/version"
Gem::Specification.new do |s|
s.name = "{{gemName}}"
- s.version = {{moduleName}}::Swagger::VERSION
+ s.version = {{moduleName}}::VERSION
s.platform = Gem::Platform::RUBY
s.authors = ["Zeke Sikelianos", "Tony Tam"]
s.email = ["zeke@wordnik.com", "fehguy@gmail.com"]
diff --git a/modules/swagger-codegen/src/main/resources/ruby/request.mustache b/modules/swagger-codegen/src/main/resources/ruby/request.mustache
new file mode 100644
index 00000000000..c3de5843483
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/ruby/request.mustache
@@ -0,0 +1,208 @@
+require 'uri'
+require 'typhoeus'
+
+module {{moduleName}}
+ class Request
+ 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(api_client, http_method, path, attributes = {})
+ @api_client = api_client
+
+ @http_method = http_method.to_sym.downcase
+ @path = path
+
+ attributes.each { |name, value| send "#{name}=", value }
+
+ @format ||= @api_client.format
+ @params ||= {}
+
+ # Apply default headers
+ @headers = @api_client.default_headers.merge(@headers || {})
+ {{#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|
+ case auth_name
+ {{#authMethods}}when '{{name}}'
+ {{#isApiKey}}{{#isKeyInHeader}}@headers ||= {}
+ @headers['{{keyParamName}}'] = get_api_key_with_prefix('{{keyParamName}}'){{/isKeyInHeader}}{{#isKeyInQuery}}@params ||= {}
+ @params['{{keyParamName}}'] = get_api_key_with_prefix('{{keyParamName}}'){{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}@headers ||= {}
+ http_auth_header = 'Basic ' + ["#{@api_client.username}:#{@api_client.password}"].pack('m').delete("\r\n")
+ @headers['Authorization'] = http_auth_header{{/isBasic}}{{#isOAuth}}# TODO: support oauth{{/isOAuth}}
+ {{/authMethods}}
+ end
+ end
+ end
+ {{/hasAuthMethods}}
+
+ # 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 @api_client.api_key_prefix[param_name]
+ "#{@api_client.api_key_prefix[param_name]} #{@api_client.api_key[param_name]}"
+ else
+ @api_client.api_key[param_name]
+ end
+ end
+
+ # Construct the request URL.
+ def url(options = {})
+ _path = self.interpreted_path
+ _path = "/#{_path}" unless _path.start_with?('/')
+ "#{@api_client.scheme}://#{@api_client.host}#{_path}"
+ end
+
+ # Iterate over the params hash, injecting any path values into the path string
+ # e.g. /word.{format}/{word}/entries => /word.json/cat/entries
+ def interpreted_path
+ p = self.path.dup
+
+ # Stick a .{format} placeholder into the path if there isn't
+ # one already or an actual format like json or xml
+ # e.g. /words/blah => /words.{format}/blah
+ if @api_client.inject_format
+ unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
+ p = p.sub(/^(\/?\w+)/, "\\1.#{format}")
+ end
+ end
+
+ # Stick a .{format} placeholder on the end of the path if there isn't
+ # one already or an actual format like json or xml
+ # e.g. /words/blah => /words/blah.{format}
+ if @api_client.force_ending_format
+ unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
+ p = "#{p}.#{format}"
+ end
+ end
+
+ p = p.sub("{format}", self.format.to_s)
+
+ URI.encode [@api_client.base_path, p].join("/").gsub(/\/+/, '/')
+ end
+
+ # If body is an object, JSONify it before making the actual request.
+ # For form parameters, remove empty value
+ def outgoing_body
+ # http form
+ if headers['Content-Type'] == 'application/x-www-form-urlencoded'
+ data = form_params.dup
+ data.each do |key, value|
+ data[key] = value.to_s if value && !value.is_a?(File) # remove emtpy form parameter
+ end
+ elsif @body # http body is JSON
+ data = @body.is_a?(String) ? @body : @body.to_json
+ else
+ data = nil
+ end
+
+ if @api_client.debugging
+ @api_client.logger.debug "HTTP request body param ~BEGIN~\n#{data}\n~END~\n"
+ end
+
+ data
+ end
+
+ def make
+ request_options = {
+ :method => self.http_method,
+ :headers => self.headers,
+ :params => self.params,
+ :ssl_verifypeer => @api_client.verify_ssl,
+ :cainfo => @api_client.ssl_ca_cert,
+ :verbose => @api_client.debugging
+ }
+
+ 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 @api_client.debugging
+ @api_client.logger.debug "HTTP response body ~BEGIN~\n#{@response.body}\n~END~\n"
+ end
+
+ # record as last response
+ @api_client.last_response = @response
+
+ 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
+ return unless @response
+ @response.code.to_s
+ end
+
+ def response_headers_pretty
+ return unless @response
+ # JSON.pretty_generate(@response.headers).gsub(/\n/, '
') # <- This was for RestClient
+ @response.headers.gsub(/\n/, '
') # <- This is for Typhoeus
+ end
+
+ # return 'Accept' based on an array of accept provided
+ # @param [Array] header_accept_array Array fo 'Accept'
+ # @return String Accept (e.g. application/json)
+ def self.select_header_accept header_accept_array
+ if header_accept_array.empty?
+ return
+ elsif header_accept_array.any?{ |s| s.casecmp('application/json')==0 }
+ 'application/json' # look for json data by default
+ else
+ header_accept_array.join(',')
+ end
+ end
+
+ # return the content type based on an array of content-type provided
+ # @param [Array] content_type_array Array fo content-type
+ # @return String Content-Type (e.g. application/json)
+ def self.select_header_content_type content_type_array
+ if content_type_array.empty?
+ 'application/json' # use application/json by default
+ elsif content_type_array.any?{ |s| s.casecmp('application/json')==0 }
+ 'application/json' # use application/json if it's included
+ else
+ content_type_array[0]; # otherwise, use the first one
+ end
+ end
+
+ # static method to convert object (array, hash, object, etc) to JSON string
+ # @param model object to be converted into JSON string
+ # @return string JSON string representation of the object
+ def self.object_to_http_body model
+ return if model.nil?
+ _body = nil
+ if model.is_a?(Array)
+ _body = model.map{|m| object_to_hash(m) }
+ else
+ _body = object_to_hash(model)
+ end
+ _body.to_json
+ end
+
+ # static method to convert object(non-array) to hash
+ # @param obj object to be converted into JSON string
+ # @return string JSON string representation of the object
+ def self.object_to_hash obj
+ if obj.respond_to?(:to_hash)
+ obj.to_hash
+ else
+ obj
+ end
+ 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
deleted file mode 100644
index 9be82e015cd..00000000000
--- a/modules/swagger-codegen/src/main/resources/ruby/swagger.mustache
+++ /dev/null
@@ -1,76 +0,0 @@
-module {{moduleName}}
- module Swagger
- class << self
- attr_accessor :logger
-
- # A Swagger configuration object. Must act like a hash and return sensible
- # values for all Swagger configuration options. See Swagger::Configuration.
- attr_accessor :configuration
-
- attr_accessor :resources
-
- # Call this method to modify defaults in your initializers.
- #
- # @example
- # Swagger.configure do |config|
- # config.api_key['api_key'] = '1234567890abcdef' # api key authentication
- # config.username = 'wordlover' # http basic authentication
- # config.password = 'i<3words' # http basic authentication
- # config.format = 'json' # optional, defaults to 'json'
- # end
- #
- def configure
- yield(configuration) if block_given?
-
- self.logger = configuration.logger
-
- # remove :// from scheme
- configuration.scheme.sub!(/:\/\//, '')
-
- # remove http(s):// and anything after a slash
- configuration.host.sub!(/https?:\/\//, '')
- configuration.host = configuration.host.split('/').first
-
- # Add leading and trailing slashes to base_path
- configuration.base_path = "/#{configuration.base_path}".gsub(/\/+/, '/')
- configuration.base_path = "" if configuration.base_path == "/"
- end
-
- def authenticated?
- !Swagger.configuration.auth_token.nil?
- end
-
- def de_authenticate
- Swagger.configuration.auth_token = nil
- end
-
- def authenticate
- return if Swagger.authenticated?
-
- if Swagger.configuration.username.nil? || Swagger.configuration.password.nil?
- raise ApiError, "Username and password are required to authenticate."
- end
-
- request = Swagger::Request.new(
- :get,
- "account/authenticate/{username}",
- :params => {
- :username => Swagger.configuration.username,
- :password => Swagger.configuration.password
- }
- )
-
- 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
deleted file mode 100644
index dd39449e1f3..00000000000
--- a/modules/swagger-codegen/src/main/resources/ruby/swagger/request.mustache
+++ /dev/null
@@ -1,214 +0,0 @@
-require 'uri'
-require 'typhoeus'
-
-module {{moduleName}}
- module Swagger
- class Request
- 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 = {})
- @http_method = http_method.to_sym.downcase
- @path = path
-
- attributes.each { |name, value| send "#{name}=", value }
-
- @format ||= Swagger.configuration.format
- @params ||= {}
-
- # Apply default headers
- @headers = Swagger.configuration.default_headers.merge(@headers || {})
-
- # Stick in the auth token if there is one
- if Swagger.authenticated?
- @headers.merge!({:auth_token => Swagger.configuration.auth_token})
- end
- {{#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|
- case auth_name
- {{#authMethods}}when '{{name}}'
- {{#isApiKey}}{{#isKeyInHeader}}@headers ||= {}
- @headers['{{keyParamName}}'] = get_api_key_with_prefix('{{keyParamName}}'){{/isKeyInHeader}}{{#isKeyInQuery}}@params ||= {}
- @params['{{keyParamName}}'] = get_api_key_with_prefix('{{keyParamName}}'){{/isKeyInQuery}}{{/isApiKey}}{{#isBasic}}@headers ||= {}
- http_auth_header = 'Basic ' + ["#{Swagger.configuration.username}:#{Swagger.configuration.password}"].pack('m').delete("\r\n")
- @headers['Authorization'] = http_auth_header{{/isBasic}}{{#isOAuth}}# TODO: support oauth{{/isOAuth}}
- {{/authMethods}}
- end
- end
- end
- {{/hasAuthMethods}}
-
- # 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]
- "#{Swagger.configuration.api_key_prefix[param_name]} #{Swagger.configuration.api_key[param_name]}"
- else
- Swagger.configuration.api_key[param_name]
- end
- end
-
- # Construct the request URL.
- def url(options = {})
- _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
- # e.g. /word.{format}/{word}/entries => /word.json/cat/entries
- def interpreted_path
- p = self.path.dup
-
- # Stick a .{format} placeholder into the path if there isn't
- # one already or an actual format like json or xml
- # e.g. /words/blah => /words.{format}/blah
- if Swagger.configuration.inject_format
- unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
- p = p.sub(/^(\/?\w+)/, "\\1.#{format}")
- end
- end
-
- # Stick a .{format} placeholder on the end of the path if there isn't
- # one already or an actual format like json or xml
- # e.g. /words/blah => /words/blah.{format}
- if Swagger.configuration.force_ending_format
- unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
- p = "#{p}.#{format}"
- end
- end
-
- p = p.sub("{format}", self.format.to_s)
-
- URI.encode [Swagger.configuration.base_path, p].join("/").gsub(/\/+/, '/')
- end
-
- # If body is an object, JSONify it before making the actual request.
- # For form parameters, remove empty value
- def outgoing_body
- # http form
- if headers['Content-Type'] == 'application/x-www-form-urlencoded'
- data = form_params.dup
- data.each do |key, value|
- data[key] = value.to_s if value && !value.is_a?(File) # remove emtpy form parameter
- end
- elsif @body # http body is JSON
- data = @body.is_a?(String) ? @body : @body.to_json
- else
- data = nil
- end
-
- if Swagger.configuration.debug
- Swagger.logger.debug "HTTP request body param ~BEGIN~\n#{data}\n~END~\n"
- end
-
- data
- 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,
- :verbose => Swagger.configuration.debug
- }
-
- 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
- Swagger.logger.debug "HTTP response body ~BEGIN~\n#{@response.body}\n~END~\n"
- end
-
- # record as last response
- Swagger.last_response = @response
-
- 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
- return unless @response
- @response.code.to_s
- end
-
- def response_headers_pretty
- return unless @response
- # JSON.pretty_generate(@response.headers).gsub(/\n/, '
') # <- This was for RestClient
- @response.headers.gsub(/\n/, '
') # <- This is for Typhoeus
- end
-
- # return 'Accept' based on an array of accept provided
- # @param [Array] header_accept_array Array fo 'Accept'
- # @return String Accept (e.g. application/json)
- def self.select_header_accept header_accept_array
- if header_accept_array.empty?
- return
- elsif header_accept_array.any?{ |s| s.casecmp('application/json')==0 }
- 'application/json' # look for json data by default
- else
- header_accept_array.join(',')
- end
- end
-
- # return the content type based on an array of content-type provided
- # @param [Array] content_type_array Array fo content-type
- # @return String Content-Type (e.g. application/json)
- def self.select_header_content_type content_type_array
- if content_type_array.empty?
- 'application/json' # use application/json by default
- elsif content_type_array.any?{ |s| s.casecmp('application/json')==0 }
- 'application/json' # use application/json if it's included
- else
- content_type_array[0]; # otherwise, use the first one
- end
- end
-
- # static method to convert object (array, hash, object, etc) to JSON string
- # @param model object to be converted into JSON string
- # @return string JSON string representation of the object
- def self.object_to_http_body model
- return if model.nil?
- _body = nil
- if model.is_a?(Array)
- _body = model.map{|m| object_to_hash(m) }
- else
- _body = object_to_hash(model)
- end
- _body.to_json
- end
-
- # static method to convert object(non-array) to hash
- # @param obj object to be converted into JSON string
- # @return string JSON string representation of the object
- def self.object_to_hash obj
- if obj.respond_to?(:to_hash)
- obj.to_hash
- else
- obj
- end
- end
-
- end
- end
-end
diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/version.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/version.mustache
deleted file mode 100644
index 5e93268298d..00000000000
--- a/modules/swagger-codegen/src/main/resources/ruby/swagger/version.mustache
+++ /dev/null
@@ -1,5 +0,0 @@
-module {{moduleName}}
- module Swagger
- VERSION = "{{gemVersion}}"
- end
-end
diff --git a/modules/swagger-codegen/src/main/resources/ruby/version.mustache b/modules/swagger-codegen/src/main/resources/ruby/version.mustache
new file mode 100644
index 00000000000..67cfc8ea325
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/ruby/version.mustache
@@ -0,0 +1,3 @@
+module {{moduleName}}
+ VERSION = "{{gemVersion}}"
+end