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.
4
5
6
7
8
9
10
11
|
# File 'lib/nexmos/base.rb', line 4
def initialize(key = ::Nexmos.api_key, secret = ::Nexmos.api_secret)
raise 'api_key should be set' if !key.present?
raise 'api_secret should be set' if !secret.present?
@default_params = {
'api_key' => key,
'api_secret' => secret
}
end
|
Class Method Details
.connection ⇒ Object
93
94
95
96
97
98
99
100
|
# File 'lib/nexmos/base.rb', line 93
def connection
@connection ||= Faraday::Connection.new(faraday_options) do |conn|
conn.request :url_encoded
conn.response :rashify
conn.response :json, :content_type => /\bjson$/
conn.adapter Faraday.default_adapter
end
end
|
.define_api_calls(key) ⇒ Object
74
75
76
77
78
79
80
81
|
# File 'lib/nexmos/base.rb', line 74
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
83
84
85
86
87
88
89
90
91
|
# File 'lib/nexmos/base.rb', line 83
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
52
53
54
55
56
57
58
59
60
|
# File 'lib/nexmos/base.rb', line 52
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
62
63
64
65
66
67
68
69
70
|
# File 'lib/nexmos/base.rb', line 62
def check_required_params(args, params)
if args[:required]
required = params.slice(*args[:required])
unless required.keys.sort == args[:required].sort
missed = (args[:required] - required.keys).join(',')
raise ArgumentError, "#{missed} params required"
end
end
end
|
#connection ⇒ Object
13
14
15
|
# File 'lib/nexmos/base.rb', line 13
def connection
self.class.connection.dup
end
|
#get_response(args, params) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/nexmos/base.rb', line 25
def get_response(args, params)
method = args[:method]
url = args[:url]
raise '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
17
18
19
20
21
22
23
|
# File 'lib/nexmos/base.rb', line 17
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
48
49
50
|
# File 'lib/nexmos/base.rb', line 48
def normalize_params(params)
params.stringify_keys!
end
|