Class: Nexmos::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/nexmos/base.rb

Direct Known Subclasses

Account, Message, Number, Search, TextToSpeech

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

.connectionObject



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_optionsObject



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

#connectionObject



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