Class: Nexmos::Base
- Inherits:
-
Object
show all
- Defined in:
- lib/nexmos/base.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(key = ::Nexmos.api_key, secret = ::Nexmos.api_secret) ⇒ Base
Returns a new instance of Base.
3
4
5
6
7
8
9
10
|
# File 'lib/nexmos/base.rb', line 3
def initialize(key = ::Nexmos.api_key, secret = ::Nexmos.api_secret)
fail 'api_key should be set' unless key.present?
fail 'api_secret should be set' unless secret.present?
@default_params = {
'api_key' => key,
'api_secret' => secret
}
end
|
Class Method Details
.connection ⇒ Object
89
90
91
92
93
94
95
96
|
# File 'lib/nexmos/base.rb', line 89
def connection
@connection ||= Faraday::Connection.new(faraday_options) do |conn|
conn.request :url_encoded
conn.response :mashrashify
conn.response :json, content_type: /\bjson$/
conn.adapter Faraday.default_adapter
end
end
|
.define_api_calls(key) ⇒ Object
70
71
72
73
74
75
76
77
|
# File 'lib/nexmos/base.rb', line 70
def define_api_calls(key)
::Nexmos.apis[key].each do |k, v|
define_method(k) do |*args|
params = args[0] || {}
make_api_call(v, params)
end
end
end
|
.faraday_options ⇒ Object
79
80
81
82
83
84
85
86
87
|
# File 'lib/nexmos/base.rb', line 79
def faraday_options
{
url: 'https://rest.nexmo.com',
headers: {
accept: 'application/json',
user_agent: ::Nexmos.user_agent
}
}
end
|
Instance Method Details
#camelize_params(params) ⇒ Object
51
52
53
54
55
56
57
58
59
|
# File 'lib/nexmos/base.rb', line 51
def camelize_params(params)
if params.respond_to?(:transform_keys!)
params.transform_keys! { |key| key.camelize(:lower) }
else
params.keys.each do |key|
params[key.camelize(:lower)] = params.delete(key)
end
end
end
|
#check_required_params(args, params) ⇒ Object
61
62
63
64
65
66
67
|
# File 'lib/nexmos/base.rb', line 61
def check_required_params(args, params)
return unless args[:required]
required = params.slice(*args[:required])
return if required.keys.sort == args[:required].sort
missed = (args[:required] - required.keys).join(',')
fail ArgumentError, "#{missed} params required"
end
|
#connection ⇒ Object
12
13
14
|
# File 'lib/nexmos/base.rb', line 12
def connection
self.class.connection.dup
end
|
#get_response(args, params) ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/nexmos/base.rb', line 24
def get_response(args, params)
method = args[:method]
url = args[:url]
fail 'url or method params missing' if !method.present? || !url.present?
res = connection.__send__(method, url, params)
if res.success?
data = if res.body.is_a?(::Hash)
res.body.merge(:success? => true)
else
::Hashie::Mash.new(:success? => true)
end
return data
end
failed_res = ::Hashie::Mash.new(:success? => false, :not_authorized? => false, :failed? => false)
case res.status
when 401
failed_res.merge! :not_authorized? => true
when 420
failed_res.merge! :failed? => true
end
failed_res
end
|
#make_api_call(args, params = {}) ⇒ Object
16
17
18
19
20
21
22
|
# File 'lib/nexmos/base.rb', line 16
def make_api_call(args, params = {})
normalize_params(params)
check_required_params(args, params)
camelize_params(params) if args[:camelize]
params.merge!(@default_params)
get_response(args, params)
end
|
#normalize_params(params) ⇒ Object
47
48
49
|
# File 'lib/nexmos/base.rb', line 47
def normalize_params(params)
params.stringify_keys!
end
|