translationApiClient 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +14 -0
- data/LICENCE.txt +177 -0
- data/README.md +17 -0
- data/apiKey.txt +1 -0
- data/lib/translationApiClient.rb +28 -0
- data/lib/translationApi_client/api/translation_api.rb +363 -0
- data/lib/translationApi_client/models/base_object.rb +87 -0
- data/lib/translationApi_client/models/language_pair.rb +54 -0
- data/lib/translationApi_client/models/profile.rb +68 -0
- data/lib/translationApi_client/models/profile_id.rb +44 -0
- data/lib/translationApi_client/models/profiles_response.rb +38 -0
- data/lib/translationApi_client/models/supported_language_response.rb +54 -0
- data/lib/translationApi_client/models/translation_cancel.rb +36 -0
- data/lib/translationApi_client/models/translation_output.rb +84 -0
- data/lib/translationApi_client/models/translation_response.rb +62 -0
- data/lib/translationApi_client/models/translation_status.rb +100 -0
- data/lib/translationApi_client/monkey.rb +90 -0
- data/lib/translationApi_client/swagger.rb +78 -0
- data/lib/translationApi_client/swagger/configuration.rb +29 -0
- data/lib/translationApi_client/swagger/request.rb +272 -0
- data/lib/translationApi_client/swagger/response.rb +113 -0
- data/lib/translationApi_client/swagger/version.rb +5 -0
- data/spec/sample.txt +33 -0
- data/spec/translationApiClient_spec.rb +66 -0
- data/translationApiClient.gemspec +35 -0
- metadata +284 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
module TranslationApiClient
|
2
|
+
#
|
3
|
+
class TranslationResponse < BaseObject
|
4
|
+
attr_accessor :warning, :error, :request_id, :outputs
|
5
|
+
# attribute mapping from ruby-style variable name to JSON key
|
6
|
+
def self.attribute_map
|
7
|
+
{
|
8
|
+
|
9
|
+
# Warning at request level
|
10
|
+
:'warning' => :'warning',
|
11
|
+
|
12
|
+
# Error at request level
|
13
|
+
:'error' => :'error',
|
14
|
+
|
15
|
+
# Request identifier to use to get the status, the result of the request and to cancel it in asynchronous mode
|
16
|
+
:'request_id' => :'requestId',
|
17
|
+
|
18
|
+
# Outputs of translation
|
19
|
+
:'outputs' => :'outputs'
|
20
|
+
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
# attribute type
|
25
|
+
def self.swagger_types
|
26
|
+
{
|
27
|
+
:'warning' => :'string',
|
28
|
+
:'error' => :'string',
|
29
|
+
:'request_id' => :'string',
|
30
|
+
:'outputs' => :'array[TranslationOutput]'
|
31
|
+
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(attributes = {})
|
36
|
+
return if !attributes.is_a?(Hash) || attributes.empty?
|
37
|
+
|
38
|
+
# convert string to symbol for hash key
|
39
|
+
attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
|
40
|
+
|
41
|
+
|
42
|
+
if attributes[:'warning']
|
43
|
+
@warning = attributes[:'warning']
|
44
|
+
end
|
45
|
+
|
46
|
+
if attributes[:'error']
|
47
|
+
@error = attributes[:'error']
|
48
|
+
end
|
49
|
+
|
50
|
+
if attributes[:'requestId']
|
51
|
+
@request_id = attributes[:'requestId']
|
52
|
+
end
|
53
|
+
|
54
|
+
if attributes[:'outputs']
|
55
|
+
if (value = attributes[:'outputs']).is_a?(Array)
|
56
|
+
@outputs = value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module TranslationApiClient
|
2
|
+
#
|
3
|
+
class TranslationStatus < BaseObject
|
4
|
+
attr_accessor :error, :cancelled, :created_at, :description, :expire_at, :finished_at, :finished_steps, :status, :total_steps
|
5
|
+
# attribute mapping from ruby-style variable name to JSON key
|
6
|
+
def self.attribute_map
|
7
|
+
{
|
8
|
+
|
9
|
+
# Error of the request
|
10
|
+
:'error' => :'error',
|
11
|
+
|
12
|
+
# Is the request cancelled
|
13
|
+
:'cancelled' => :'cancelled',
|
14
|
+
|
15
|
+
# Creation time of the request (ms since the Epoch)
|
16
|
+
:'created_at' => :'createdAt',
|
17
|
+
|
18
|
+
# Description
|
19
|
+
:'description' => :'description',
|
20
|
+
|
21
|
+
# Expiration time of the request (ms since the Epoch)
|
22
|
+
:'expire_at' => :'expireAt',
|
23
|
+
|
24
|
+
# Completion time of the request (ms since the Epoch)
|
25
|
+
:'finished_at' => :'finishedAt',
|
26
|
+
|
27
|
+
# Number of finished steps
|
28
|
+
:'finished_steps' => :'finishedSteps',
|
29
|
+
|
30
|
+
# Status of the request
|
31
|
+
:'status' => :'status',
|
32
|
+
|
33
|
+
# Number of steps to complete
|
34
|
+
:'total_steps' => :'totalSteps'
|
35
|
+
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
# attribute type
|
40
|
+
def self.swagger_types
|
41
|
+
{
|
42
|
+
:'error' => :'string',
|
43
|
+
:'cancelled' => :'boolean',
|
44
|
+
:'created_at' => :'number',
|
45
|
+
:'description' => :'string',
|
46
|
+
:'expire_at' => :'number',
|
47
|
+
:'finished_at' => :'number',
|
48
|
+
:'finished_steps' => :'int',
|
49
|
+
:'status' => :'string',
|
50
|
+
:'total_steps' => :'int'
|
51
|
+
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize(attributes = {})
|
56
|
+
return if !attributes.is_a?(Hash) || attributes.empty?
|
57
|
+
|
58
|
+
# convert string to symbol for hash key
|
59
|
+
attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
|
60
|
+
|
61
|
+
|
62
|
+
if attributes[:'error']
|
63
|
+
@error = attributes[:'error']
|
64
|
+
end
|
65
|
+
|
66
|
+
if attributes[:'cancelled']
|
67
|
+
@cancelled = attributes[:'cancelled']
|
68
|
+
end
|
69
|
+
|
70
|
+
if attributes[:'createdAt']
|
71
|
+
@created_at = attributes[:'createdAt']
|
72
|
+
end
|
73
|
+
|
74
|
+
if attributes[:'description']
|
75
|
+
@description = attributes[:'description']
|
76
|
+
end
|
77
|
+
|
78
|
+
if attributes[:'expireAt']
|
79
|
+
@expire_at = attributes[:'expireAt']
|
80
|
+
end
|
81
|
+
|
82
|
+
if attributes[:'finishedAt']
|
83
|
+
@finished_at = attributes[:'finishedAt']
|
84
|
+
end
|
85
|
+
|
86
|
+
if attributes[:'finishedSteps']
|
87
|
+
@finished_steps = attributes[:'finishedSteps']
|
88
|
+
end
|
89
|
+
|
90
|
+
if attributes[:'status']
|
91
|
+
@status = attributes[:'status']
|
92
|
+
end
|
93
|
+
|
94
|
+
if attributes[:'totalSteps']
|
95
|
+
@total_steps = attributes[:'totalSteps']
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# module Swagger
|
2
|
+
class Object
|
3
|
+
|
4
|
+
unless Object.method_defined? :blank?
|
5
|
+
def blank?
|
6
|
+
respond_to?(:empty?) ? empty? : !self
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
unless Object.method_defined? :present?
|
11
|
+
def present?
|
12
|
+
!blank?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class String
|
19
|
+
|
20
|
+
unless String.method_defined? :underscore
|
21
|
+
def underscore
|
22
|
+
self.gsub(/::/, '/').
|
23
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
24
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
25
|
+
tr("-", "_").
|
26
|
+
downcase
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
unless String.method_defined? :camelize
|
31
|
+
def camelize(first_letter_in_uppercase = true)
|
32
|
+
if first_letter_in_uppercase != :lower
|
33
|
+
self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
34
|
+
else
|
35
|
+
self.to_s[0].chr.downcase + camelize(self)[1..-1]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
class Hash
|
43
|
+
|
44
|
+
unless Hash.method_defined? :stringify_keys
|
45
|
+
def stringify_keys
|
46
|
+
inject({}) do |options, (key, value)|
|
47
|
+
options[key.to_s] = value
|
48
|
+
options
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
unless Hash.method_defined? :stringify_keys!
|
54
|
+
def stringify_keys!
|
55
|
+
self.replace(self.stringify_keys)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
unless Hash.method_defined? :symbolize_keys
|
60
|
+
def symbolize_keys
|
61
|
+
inject({}) do |options, (key, value)|
|
62
|
+
options[(key.to_sym rescue key) || key] = value
|
63
|
+
options
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
unless Hash.method_defined? :symbolize_keys!
|
69
|
+
def symbolize_keys!
|
70
|
+
self.replace(self.symbolize_keys)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
unless Hash.method_defined? :symbolize_and_underscore_keys
|
75
|
+
def symbolize_and_underscore_keys
|
76
|
+
inject({}) do |options, (key, value)|
|
77
|
+
options[(key.to_s.underscore.to_sym rescue key) || key] = value
|
78
|
+
options
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
unless Hash.method_defined? :symbolize_and_underscore_keys!
|
84
|
+
def symbolize_and_underscore_keys!
|
85
|
+
self.replace(self.symbolize_and_underscore_keys)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
# end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module TranslationApiClient
|
5
|
+
module Swagger
|
6
|
+
class << self
|
7
|
+
attr_accessor :logger
|
8
|
+
|
9
|
+
# A Swagger configuration object. Must act like a hash and return sensible
|
10
|
+
# values for all Swagger configuration options. See Swagger::Configuration.
|
11
|
+
attr_accessor :configuration
|
12
|
+
|
13
|
+
attr_accessor :resources
|
14
|
+
|
15
|
+
# Call this method to modify defaults in your initializers.
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# Swagger.configure do |config|
|
19
|
+
# config.api_key['api_key'] = '1234567890abcdef' # api key authentication
|
20
|
+
# config.username = 'wordlover' # http basic authentication
|
21
|
+
# config.password = 'i<3words' # http basic authentication
|
22
|
+
# config.format = 'json' # optional, defaults to 'json'
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
def configure
|
26
|
+
yield(configuration) if block_given?
|
27
|
+
|
28
|
+
# Configure logger. Default to use Rails
|
29
|
+
self.logger ||= configuration.logger || (defined?(Rails) ? Rails.logger : Logger.new(STDOUT))
|
30
|
+
|
31
|
+
# remove :// from scheme
|
32
|
+
configuration.scheme.sub!(/:\/\//, '')
|
33
|
+
|
34
|
+
# remove http(s):// and anything after a slash
|
35
|
+
configuration.host.sub!(/https?:\/\//, '')
|
36
|
+
configuration.host = configuration.host.split('/').first
|
37
|
+
|
38
|
+
# Add leading and trailing slashes to base_path
|
39
|
+
configuration.base_path = "/#{configuration.base_path}".gsub(/\/+/, '/')
|
40
|
+
configuration.base_path = "" if configuration.base_path == "/"
|
41
|
+
end
|
42
|
+
|
43
|
+
def authenticated?
|
44
|
+
Swagger.configuration.auth_token.present?
|
45
|
+
end
|
46
|
+
|
47
|
+
def de_authenticate
|
48
|
+
Swagger.configuration.auth_token = nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def authenticate
|
52
|
+
return if Swagger.authenticated?
|
53
|
+
|
54
|
+
if Swagger.configuration.username.blank? || Swagger.configuration.password.blank?
|
55
|
+
raise ClientError, "Username and password are required to authenticate."
|
56
|
+
end
|
57
|
+
|
58
|
+
request = Swagger::Request.new(
|
59
|
+
:get,
|
60
|
+
"account/authenticate/{username}",
|
61
|
+
:params => {
|
62
|
+
:username => Swagger.configuration.username,
|
63
|
+
:password => Swagger.configuration.password
|
64
|
+
}
|
65
|
+
)
|
66
|
+
|
67
|
+
response_body = request.response.body
|
68
|
+
Swagger.configuration.auth_token = response_body['token']
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class ServerError < StandardError
|
74
|
+
end
|
75
|
+
|
76
|
+
class ClientError < StandardError
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module TranslationApiClient
|
2
|
+
module Swagger
|
3
|
+
class Configuration
|
4
|
+
attr_accessor :format, :key, :key_prefix, :username, :password, :auth_token, :scheme, :host, :base_path, :user_agent, :logger, :inject_format, :force_ending_format, :camelize_params, :user_agent, :verify_ssl
|
5
|
+
|
6
|
+
# Defaults go in here..
|
7
|
+
def initialize
|
8
|
+
@format = 'json'
|
9
|
+
@scheme = 'https'
|
10
|
+
@host = 'api-platform.systran.net'
|
11
|
+
@base_path = '/'
|
12
|
+
@user_agent = "ruby-swagger-#{Swagger::VERSION}"
|
13
|
+
@inject_format = false
|
14
|
+
@force_ending_format = false
|
15
|
+
@camelize_params = true
|
16
|
+
|
17
|
+
# keys for API key authentication (param-name => api-key)
|
18
|
+
@key = {}
|
19
|
+
# api-key prefix for API key authentication, e.g. "Bearer" (param-name => api-key-prefix)
|
20
|
+
@key_prefix = {}
|
21
|
+
|
22
|
+
# whether to verify SSL certificate, default to true
|
23
|
+
# Note: do NOT set it to false in production code, otherwise you would
|
24
|
+
# face multiple types of cryptographic attacks
|
25
|
+
@verify_ssl = true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,272 @@
|
|
1
|
+
module TranslationApiClient
|
2
|
+
module Swagger
|
3
|
+
class Request
|
4
|
+
require 'uri'
|
5
|
+
require 'addressable/uri'
|
6
|
+
require 'typhoeus'
|
7
|
+
|
8
|
+
attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names
|
9
|
+
|
10
|
+
# All requests must have an HTTP method and a path
|
11
|
+
# Optionals parameters are :params, :headers, :body, :format, :host
|
12
|
+
def initialize(http_method, path, attributes={})
|
13
|
+
attributes[:format] ||= Swagger.configuration.format
|
14
|
+
attributes[:params] ||= {}
|
15
|
+
|
16
|
+
# Set default headers
|
17
|
+
default_headers = {
|
18
|
+
'Content-Type' => "application/#{attributes[:format].downcase}",
|
19
|
+
'User-Agent' => Swagger.configuration.user_agent
|
20
|
+
}
|
21
|
+
|
22
|
+
# Merge argument headers into defaults
|
23
|
+
attributes[:headers] = default_headers.merge(attributes[:headers] || {})
|
24
|
+
|
25
|
+
# Stick in the auth token if there is one
|
26
|
+
if Swagger.authenticated?
|
27
|
+
attributes[:headers].merge!({:auth_token => Swagger.configuration.auth_token})
|
28
|
+
end
|
29
|
+
|
30
|
+
self.http_method = http_method.to_sym
|
31
|
+
self.path = path
|
32
|
+
attributes.each do |name, value|
|
33
|
+
send("#{name.to_s.underscore.to_sym}=", value)
|
34
|
+
end
|
35
|
+
|
36
|
+
update_params_for_auth!
|
37
|
+
end
|
38
|
+
|
39
|
+
# Update hearder and query params based on authentication settings.
|
40
|
+
def update_params_for_auth!
|
41
|
+
(@auth_names || []).each do |auth_name|
|
42
|
+
case auth_name
|
43
|
+
when 'apiKey'
|
44
|
+
@params ||= {}
|
45
|
+
@params['key'] = get_key_with_prefix('key')
|
46
|
+
when 'accessToken'
|
47
|
+
@headers ||= {}
|
48
|
+
@headers['Authorization'] = get_key_with_prefix('Authorization')
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Get API key (with prefix if set).
|
55
|
+
# @param [String] param_name the parameter name of API key auth
|
56
|
+
def get_key_with_prefix(param_name)
|
57
|
+
Swagger.configuration.key
|
58
|
+
end
|
59
|
+
|
60
|
+
# Construct a base URL
|
61
|
+
def url(options = {})
|
62
|
+
u = Addressable::URI.new(
|
63
|
+
:scheme => Swagger.configuration.scheme,
|
64
|
+
:host => Swagger.configuration.host,
|
65
|
+
:path => self.interpreted_path,
|
66
|
+
:query => self.query_string.sub(/\?/, '')
|
67
|
+
).to_s
|
68
|
+
puts ' url'
|
69
|
+
|
70
|
+
puts u
|
71
|
+
# Drop trailing question mark, if present
|
72
|
+
u.sub! /\?$/, ''
|
73
|
+
u
|
74
|
+
end
|
75
|
+
|
76
|
+
# Iterate over the params hash, injecting any path values into the path string
|
77
|
+
# e.g. /word.{format}/{word}/entries => /word.json/cat/entries
|
78
|
+
def interpreted_path
|
79
|
+
p = self.path.dup
|
80
|
+
|
81
|
+
# Stick a .{format} placeholder into the path if there isn't
|
82
|
+
# one already or an actual format like json or xml
|
83
|
+
# e.g. /words/blah => /words.{format}/blah
|
84
|
+
if Swagger.configuration.inject_format
|
85
|
+
unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
|
86
|
+
p = p.sub(/^(\/?\w+)/, "\\1.#{format}")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Stick a .{format} placeholder on the end of the path if there isn't
|
91
|
+
# one already or an actual format like json or xml
|
92
|
+
# e.g. /words/blah => /words/blah.{format}
|
93
|
+
if Swagger.configuration.force_ending_format
|
94
|
+
unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
|
95
|
+
p = "#{p}.#{format}"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
p = p.sub("{format}", self.format.to_s)
|
100
|
+
|
101
|
+
URI.encode [Swagger.configuration.base_path, p].join("/").gsub(/\/+/, '/')
|
102
|
+
end
|
103
|
+
|
104
|
+
# Massage the request body into a state of readiness
|
105
|
+
# If body is a hash, camelize all keys then convert to a json string
|
106
|
+
def body=(value)
|
107
|
+
if value.is_a?(Hash)
|
108
|
+
value = value.inject({}) do |memo, (k,v)|
|
109
|
+
memo[k.to_s.camelize(:lower).to_sym] = v
|
110
|
+
memo
|
111
|
+
end
|
112
|
+
end
|
113
|
+
@body = value
|
114
|
+
end
|
115
|
+
|
116
|
+
# If body is an object, JSONify it before making the actual request.
|
117
|
+
# For form parameters, remove empty value
|
118
|
+
def outgoing_body
|
119
|
+
# http form
|
120
|
+
if headers['Content-Type'] == 'application/x-www-form-urlencoded' || headers['Content-Type'] == 'multipart/form-data'
|
121
|
+
data = form_params.dup
|
122
|
+
data.each do |key, value|
|
123
|
+
data[key] = value.to_s if value && !value.is_a?(File) # remove emtpy form parameter
|
124
|
+
end
|
125
|
+
data
|
126
|
+
elsif @body # http body is JSON
|
127
|
+
@body.is_a?(String) ? @body : @body.to_json
|
128
|
+
else
|
129
|
+
nil
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# Construct a query string from the query-string-type params
|
134
|
+
def query_string
|
135
|
+
# Iterate over all params,
|
136
|
+
# .. removing the ones that are part of the path itself.
|
137
|
+
# .. stringifying values so Addressable doesn't blow up.
|
138
|
+
query_values = {}
|
139
|
+
self.params.each_pair do |key, value|
|
140
|
+
next if self.path.include? "{#{key}}" # skip path params
|
141
|
+
next if value.blank? && value.class != FalseClass # skip empties
|
142
|
+
if Swagger.configuration.camelize_params
|
143
|
+
key = key.to_s.camelize(:lower).to_sym
|
144
|
+
end
|
145
|
+
query_values[key] = value.to_s
|
146
|
+
end
|
147
|
+
|
148
|
+
# We don't want to end up with '?' as our query string
|
149
|
+
# if there aren't really any params
|
150
|
+
return "" if query_values.blank?
|
151
|
+
|
152
|
+
# Addressable requires query_values to be set after initialization..
|
153
|
+
qs = Addressable::URI.new
|
154
|
+
qs.query_values = query_values
|
155
|
+
qs.to_s
|
156
|
+
end
|
157
|
+
|
158
|
+
def make
|
159
|
+
#TODO use configuration setting to determine if debugging
|
160
|
+
#logger = Logger.new STDOUT
|
161
|
+
#logger.debug self.url
|
162
|
+
if self.outgoing_body.nil? || self.outgoing_body.empty?
|
163
|
+
self.headers['Content-Type'] = 'application/json'
|
164
|
+
end
|
165
|
+
request_options = {
|
166
|
+
:ssl_verifypeer => Swagger.configuration.verify_ssl,
|
167
|
+
:headers => self.headers.stringify_keys
|
168
|
+
}
|
169
|
+
response = case self.http_method.to_sym
|
170
|
+
when :get,:GET
|
171
|
+
Typhoeus::Request.get(
|
172
|
+
self.url,
|
173
|
+
#request_options,
|
174
|
+
request_options.merge(:body => self.outgoing_body)
|
175
|
+
)
|
176
|
+
when :post,:POST
|
177
|
+
Typhoeus::Request.post(
|
178
|
+
self.url,
|
179
|
+
request_options.merge(:body => self.outgoing_body)
|
180
|
+
)
|
181
|
+
|
182
|
+
when :patch,:PATCH
|
183
|
+
Typhoeus::Request.patch(
|
184
|
+
self.url,
|
185
|
+
request_options.merge(:body => self.outgoing_body)
|
186
|
+
)
|
187
|
+
|
188
|
+
when :put,:PUT
|
189
|
+
Typhoeus::Request.put(
|
190
|
+
self.url,
|
191
|
+
request_options.merge(:body => self.outgoing_body)
|
192
|
+
)
|
193
|
+
|
194
|
+
when :delete,:DELETE
|
195
|
+
Typhoeus::Request.delete(
|
196
|
+
self.url,
|
197
|
+
request_options.merge(:body => self.outgoing_body)
|
198
|
+
)
|
199
|
+
end
|
200
|
+
Response.new(response)
|
201
|
+
end
|
202
|
+
|
203
|
+
def response
|
204
|
+
self.make
|
205
|
+
end
|
206
|
+
|
207
|
+
def response_code_pretty
|
208
|
+
return unless @response.present?
|
209
|
+
@response.code.to_s
|
210
|
+
end
|
211
|
+
|
212
|
+
def response_headers_pretty
|
213
|
+
return unless @response.present?
|
214
|
+
# JSON.pretty_generate(@response.headers).gsub(/\n/, '<br/>') # <- This was for RestClient
|
215
|
+
@response.headers.gsub(/\n/, '<br/>') # <- This is for Typhoeus
|
216
|
+
end
|
217
|
+
|
218
|
+
# return 'Accept' based on an array of accept provided
|
219
|
+
# @param [Array] header_accept_array Array fo 'Accept'
|
220
|
+
# @return String Accept (e.g. application/json)
|
221
|
+
def self.select_header_accept header_accept_array
|
222
|
+
if header_accept_array.empty?
|
223
|
+
return
|
224
|
+
elsif header_accept_array.any?{ |s| s.casecmp('application/json')==0 }
|
225
|
+
'application/json' # look for json data by default
|
226
|
+
else
|
227
|
+
header_accept_array.join(',')
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
# return the content type based on an array of content-type provided
|
232
|
+
# @param [Array] content_type_array Array fo content-type
|
233
|
+
# @return String Content-Type (e.g. application/json)
|
234
|
+
def self.select_header_content_type content_type_array
|
235
|
+
if content_type_array.empty?
|
236
|
+
'application/json' # use application/json by default
|
237
|
+
|
238
|
+
elsif content_type_array.any?{ |s| s.casecmp('application/json')==0 }
|
239
|
+
'application/json' # use application/json if it's included
|
240
|
+
else
|
241
|
+
content_type_array[0]; # otherwise, use the first one
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
# static method to convert object (array, hash, object, etc) to JSON string
|
246
|
+
# @param model object to be converted into JSON string
|
247
|
+
# @return string JSON string representation of the object
|
248
|
+
def self.object_to_http_body model
|
249
|
+
return if model.nil?
|
250
|
+
_body = nil
|
251
|
+
if model.is_a?(Array)
|
252
|
+
_body = model.map{|m| object_to_hash(m) }
|
253
|
+
else
|
254
|
+
_body = object_to_hash(model)
|
255
|
+
end
|
256
|
+
_body.to_json
|
257
|
+
end
|
258
|
+
|
259
|
+
# static method to convert object(non-array) to hash
|
260
|
+
# @param obj object to be converted into JSON string
|
261
|
+
# @return string JSON string representation of the object
|
262
|
+
def self.object_to_hash obj
|
263
|
+
if obj.respond_to?(:to_hash)
|
264
|
+
obj.to_hash
|
265
|
+
else
|
266
|
+
obj
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|