nexmos 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +17 -0
- data/.travis.yml +11 -2
- data/Appraisals +15 -0
- data/Gemfile +15 -4
- data/Guardfile +20 -0
- data/Rakefile +2 -2
- data/defaults.reek +11 -0
- data/gemfiles/activesupport_3.2.gemfile +23 -0
- data/gemfiles/activesupport_4.0.gemfile +23 -0
- data/gemfiles/activesupport_4.1.gemfile +23 -0
- data/gemfiles/activesupport_4.2.gemfile +23 -0
- data/lib/faraday_middleware/response/mashrashify.rb +19 -0
- data/lib/hashie/mash/rash.rb +41 -0
- data/lib/nexmos.rb +1 -0
- data/lib/nexmos/account.rb +2 -2
- data/lib/nexmos/base.rb +25 -29
- data/lib/nexmos/message.rb +2 -2
- data/lib/nexmos/number.rb +2 -2
- data/lib/nexmos/railties.rb +1 -1
- data/lib/nexmos/search.rb +2 -2
- data/lib/nexmos/text_to_speech.rb +2 -2
- data/lib/nexmos/version.rb +1 -1
- data/nexmos.gemspec +3 -3
- data/spec/nexmos/account_spec.rb +46 -40
- data/spec/nexmos/base_spec.rb +71 -60
- data/spec/nexmos/number_spec.rb +66 -64
- data/spec/nexmos_spec.rb +26 -11
- data/spec/spec_helper.rb +11 -16
- metadata +43 -29
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f014945d28d7492c96c5f96e32116c3569e8092a
|
4
|
+
data.tar.gz: 0ad507ebe06159c30b19e588a1aff0192de44acb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f29f1e3d43258f758ad848f12c6648e43b72cc1ae08ef32ae4c85d4f8702bea2bf3d1f29e20f3cedff09baca25fd3e0d7d4cadea8e2cce05d43ffe0935fa193d
|
7
|
+
data.tar.gz: 20f664251088b326b2b9306d74ba98deebdcc069960843ec12fa3af11ebc5fa759df2d1f1b50fb6ace7216db4a585d1b05be4d70596f3ab3f8dfe3ec63f143eb
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- '**/Rakefile'
|
4
|
+
Exclude:
|
5
|
+
- 'spec/**/*'
|
6
|
+
Metrics/LineLength:
|
7
|
+
Max: 99
|
8
|
+
Style/FileName:
|
9
|
+
Enabled: false
|
10
|
+
Style/ModuleFunction:
|
11
|
+
Enabled: false
|
12
|
+
Style/Encoding:
|
13
|
+
Enabled: false
|
14
|
+
Documentation:
|
15
|
+
Enabled: false
|
16
|
+
Metrics/MethodLength:
|
17
|
+
Max: 15
|
data/.travis.yml
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 1.9.3
|
4
3
|
- 2.0.0
|
4
|
+
- 2.1
|
5
5
|
- ruby-head
|
6
6
|
- jruby-19mode # JRuby in 1.9 mode
|
7
|
-
- rbx-
|
7
|
+
- rbx-2
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/activesupport_3.2.gemfile
|
10
|
+
- gemfiles/activesupport_4.0.gemfile
|
11
|
+
- gemfiles/activesupport_4.1.gemfile
|
12
|
+
- gemfiles/activesupport_4.2.gemfile
|
13
|
+
matrix:
|
14
|
+
allow_failures:
|
15
|
+
- rvm: ruby-head
|
16
|
+
bundler_args: --without local_development
|
data/Appraisals
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
appraise "activesupport-3.2" do
|
2
|
+
gem "activesupport", "~> 3.2.0"
|
3
|
+
end
|
4
|
+
|
5
|
+
appraise "activesupport-4.0" do
|
6
|
+
gem "activesupport", "~> 4.0.0"
|
7
|
+
end
|
8
|
+
|
9
|
+
appraise "activesupport-4.1" do
|
10
|
+
gem "activesupport", "~> 4.1.0"
|
11
|
+
end
|
12
|
+
|
13
|
+
appraise "activesupport-4.2" do
|
14
|
+
gem "activesupport", "~> 4.2.0.beta4"
|
15
|
+
end
|
data/Gemfile
CHANGED
@@ -2,9 +2,20 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in nexmo-client.gemspec
|
4
4
|
gemspec
|
5
|
-
|
5
|
+
|
6
|
+
|
7
|
+
group :test do
|
8
|
+
gem 'simplecov', '>= 0.9.0', :require => false
|
9
|
+
gem 'coveralls', :require => false
|
10
|
+
end
|
11
|
+
|
12
|
+
group :local_development do
|
13
|
+
gem 'terminal-notifier-guard', require: false if RUBY_PLATFORM.downcase.include?('darwin')
|
14
|
+
gem 'guard-rspec', '>= 4.3.1' ,require: false
|
15
|
+
gem 'guard-bundler', require: false
|
16
|
+
gem 'guard-preek', require: false
|
17
|
+
gem 'guard-rubocop', require: false
|
18
|
+
gem 'guard-reek', github: 'pericles/guard-reek', require: false
|
6
19
|
gem 'pry'
|
7
|
-
gem '
|
8
|
-
gem 'webmock'
|
9
|
-
gem 'coveralls', require: false
|
20
|
+
gem 'appraisal'
|
10
21
|
end
|
data/Guardfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
guard 'rspec', cmd: 'rspec' do
|
2
|
+
watch(%r{^spec/.+_spec\.rb$})
|
3
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
4
|
+
watch('spec/spec_helper.rb') { "spec" }
|
5
|
+
end
|
6
|
+
|
7
|
+
guard 'bundler' do
|
8
|
+
watch('Gemfile')
|
9
|
+
watch('ar_json_serialize.gemspec')
|
10
|
+
end
|
11
|
+
|
12
|
+
guard :rubocop do
|
13
|
+
watch(%r{.+\.rb$})
|
14
|
+
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
15
|
+
end
|
16
|
+
|
17
|
+
guard :preek, run_all_dir: 'lib' do
|
18
|
+
watch(/^lib\/(.*).rb/)
|
19
|
+
end
|
20
|
+
|
data/Rakefile
CHANGED
data/defaults.reek
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 3.2.0"
|
6
|
+
|
7
|
+
group :test do
|
8
|
+
gem "simplecov", ">= 0.9.0", :require => false
|
9
|
+
gem "coveralls", :require => false
|
10
|
+
end
|
11
|
+
|
12
|
+
group :local_development do
|
13
|
+
gem "terminal-notifier-guard", :require => false
|
14
|
+
gem "guard-rspec", ">= 4.3.1", :require => false
|
15
|
+
gem "guard-bundler", :require => false
|
16
|
+
gem "guard-preek", :require => false
|
17
|
+
gem "guard-rubocop", :require => false
|
18
|
+
gem "guard-reek", :github => "pericles/guard-reek", :require => false
|
19
|
+
gem "pry"
|
20
|
+
gem "appraisal"
|
21
|
+
end
|
22
|
+
|
23
|
+
gemspec :path => "../"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 4.0.0"
|
6
|
+
|
7
|
+
group :test do
|
8
|
+
gem "simplecov", ">= 0.9.0", :require => false
|
9
|
+
gem "coveralls", :require => false
|
10
|
+
end
|
11
|
+
|
12
|
+
group :local_development do
|
13
|
+
gem "terminal-notifier-guard", :require => false
|
14
|
+
gem "guard-rspec", ">= 4.3.1", :require => false
|
15
|
+
gem "guard-bundler", :require => false
|
16
|
+
gem "guard-preek", :require => false
|
17
|
+
gem "guard-rubocop", :require => false
|
18
|
+
gem "guard-reek", :github => "pericles/guard-reek", :require => false
|
19
|
+
gem "pry"
|
20
|
+
gem "appraisal"
|
21
|
+
end
|
22
|
+
|
23
|
+
gemspec :path => "../"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 4.1.0"
|
6
|
+
|
7
|
+
group :test do
|
8
|
+
gem "simplecov", ">= 0.9.0", :require => false
|
9
|
+
gem "coveralls", :require => false
|
10
|
+
end
|
11
|
+
|
12
|
+
group :local_development do
|
13
|
+
gem "terminal-notifier-guard", :require => false
|
14
|
+
gem "guard-rspec", ">= 4.3.1", :require => false
|
15
|
+
gem "guard-bundler", :require => false
|
16
|
+
gem "guard-preek", :require => false
|
17
|
+
gem "guard-rubocop", :require => false
|
18
|
+
gem "guard-reek", :github => "pericles/guard-reek", :require => false
|
19
|
+
gem "pry"
|
20
|
+
gem "appraisal"
|
21
|
+
end
|
22
|
+
|
23
|
+
gemspec :path => "../"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 4.2.0.beta4"
|
6
|
+
|
7
|
+
group :test do
|
8
|
+
gem "simplecov", ">= 0.9.0", :require => false
|
9
|
+
gem "coveralls", :require => false
|
10
|
+
end
|
11
|
+
|
12
|
+
group :local_development do
|
13
|
+
gem "terminal-notifier-guard", :require => false
|
14
|
+
gem "guard-rspec", ">= 4.3.1", :require => false
|
15
|
+
gem "guard-bundler", :require => false
|
16
|
+
gem "guard-preek", :require => false
|
17
|
+
gem "guard-rubocop", :require => false
|
18
|
+
gem "guard-reek", :github => "pericles/guard-reek", :require => false
|
19
|
+
gem "pry"
|
20
|
+
gem "appraisal"
|
21
|
+
end
|
22
|
+
|
23
|
+
gemspec :path => "../"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'faraday_middleware/response/mashify'
|
2
|
+
|
3
|
+
module FaradayMiddleware
|
4
|
+
# Public: Converts parsed response bodies to a Hashie::Trash if they were of
|
5
|
+
# Hash or Array type.
|
6
|
+
class MashRashify < Mashify
|
7
|
+
dependency do
|
8
|
+
require 'hashie/mash/rash'
|
9
|
+
self.mash_class = ::Hashie::Mash::Rash
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
if Faraday::Middleware.respond_to? :register_middleware
|
15
|
+
Faraday::Response.register_middleware mashrashify: FaradayMiddleware::MashRashify
|
16
|
+
end
|
17
|
+
|
18
|
+
# deprecated alias
|
19
|
+
Faraday::Response::MashRashify = FaradayMiddleware::MashRashify
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'hashie/mash'
|
2
|
+
|
3
|
+
module Hashie
|
4
|
+
class Mash::Rash < Mash
|
5
|
+
protected
|
6
|
+
|
7
|
+
def convert_key(key) #:nodoc:
|
8
|
+
underscore_string(key.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Unlike its parent Mash, a Rash will convert other Hashie::Hash values to a Rash when assigning
|
12
|
+
# instead of respecting the existing subclass
|
13
|
+
def convert_value(val, duping = false) #:nodoc:
|
14
|
+
case val
|
15
|
+
when self.class
|
16
|
+
val.dup
|
17
|
+
when ::Hash
|
18
|
+
val = val.dup if duping
|
19
|
+
self.class.new(val)
|
20
|
+
when Array
|
21
|
+
val.collect { |e| convert_value(e) }
|
22
|
+
else
|
23
|
+
val
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# converts a camel_cased string to a underscore string
|
28
|
+
# subs spaces with underscores, strips whitespace
|
29
|
+
# Same way ActiveSupport does string.underscore
|
30
|
+
def underscore_string(str)
|
31
|
+
str.to_s.strip
|
32
|
+
.gsub(' ', '_')
|
33
|
+
.gsub(/::/, '/')
|
34
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
35
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
36
|
+
.tr('-', '_')
|
37
|
+
.squeeze('_')
|
38
|
+
.downcase
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/nexmos.rb
CHANGED
data/lib/nexmos/account.rb
CHANGED
data/lib/nexmos/base.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
module Nexmos
|
2
2
|
class Base
|
3
|
-
|
4
3
|
def initialize(key = ::Nexmos.api_key, secret = ::Nexmos.api_secret)
|
5
|
-
|
6
|
-
|
4
|
+
fail 'api_key should be set' unless key.present?
|
5
|
+
fail 'api_secret should be set' unless secret.present?
|
7
6
|
@default_params = {
|
8
|
-
'api_key'
|
7
|
+
'api_key' => key,
|
9
8
|
'api_secret' => secret
|
10
9
|
}
|
11
10
|
end
|
@@ -24,23 +23,23 @@ module Nexmos
|
|
24
23
|
|
25
24
|
def get_response(args, params)
|
26
25
|
method = args[:method]
|
27
|
-
url
|
28
|
-
|
26
|
+
url = args[:url]
|
27
|
+
fail 'url or method params missing' if !method.present? || !url.present?
|
29
28
|
res = connection.__send__(method, url, params)
|
30
29
|
if res.success?
|
31
30
|
data = if res.body.is_a?(::Hash)
|
32
31
|
res.body.merge(:success? => true)
|
33
32
|
else
|
34
|
-
::Hashie::Mash.new(
|
33
|
+
::Hashie::Mash.new(:success? => true)
|
35
34
|
end
|
36
35
|
return data
|
37
36
|
end
|
38
|
-
failed_res = ::Hashie::Mash.new(
|
37
|
+
failed_res = ::Hashie::Mash.new(:success? => false, :not_authorized? => false, :failed? => false)
|
39
38
|
case res.status
|
40
39
|
when 401
|
41
|
-
|
40
|
+
failed_res.merge! :not_authorized? => true
|
42
41
|
when 420
|
43
|
-
|
42
|
+
failed_res.merge! :failed? => true
|
44
43
|
end
|
45
44
|
failed_res
|
46
45
|
end
|
@@ -51,7 +50,7 @@ module Nexmos
|
|
51
50
|
|
52
51
|
def camelize_params(params)
|
53
52
|
if params.respond_to?(:transform_keys!)
|
54
|
-
params.transform_keys!{|key| key.camelize(:lower)}
|
53
|
+
params.transform_keys! { |key| key.camelize(:lower) }
|
55
54
|
else
|
56
55
|
params.keys.each do |key|
|
57
56
|
params[key.camelize(:lower)] = params.delete(key)
|
@@ -60,19 +59,16 @@ module Nexmos
|
|
60
59
|
end
|
61
60
|
|
62
61
|
def check_required_params(args, params)
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
end
|
69
|
-
end
|
62
|
+
return unless args[:required]
|
63
|
+
required = params.slice(*args[:required])
|
64
|
+
return if required.keys.sort == args[:required].sort
|
65
|
+
missed = (args[:required] - required.keys).join(',')
|
66
|
+
fail ArgumentError, "#{missed} params required"
|
70
67
|
end
|
71
68
|
|
72
69
|
class << self
|
73
|
-
|
74
70
|
def define_api_calls(key)
|
75
|
-
::Nexmos.apis[key].each do |k,v|
|
71
|
+
::Nexmos.apis[key].each do |k, v|
|
76
72
|
define_method(k) do |*args|
|
77
73
|
params = args[0] || {}
|
78
74
|
make_api_call(v, params)
|
@@ -82,22 +78,22 @@ module Nexmos
|
|
82
78
|
|
83
79
|
def faraday_options
|
84
80
|
{
|
85
|
-
:
|
86
|
-
:
|
87
|
-
:
|
88
|
-
:
|
81
|
+
url: 'https://rest.nexmo.com',
|
82
|
+
headers: {
|
83
|
+
accept: 'application/json',
|
84
|
+
user_agent: ::Nexmos.user_agent
|
89
85
|
}
|
90
86
|
}
|
91
87
|
end
|
92
88
|
|
93
89
|
def connection
|
94
90
|
@connection ||= Faraday::Connection.new(faraday_options) do |conn|
|
95
|
-
conn.request
|
96
|
-
conn.response :
|
97
|
-
conn.response :json, :
|
98
|
-
conn.adapter
|
91
|
+
conn.request :url_encoded
|
92
|
+
conn.response :mashrashify
|
93
|
+
conn.response :json, content_type: /\bjson$/
|
94
|
+
conn.adapter Faraday.default_adapter
|
99
95
|
end
|
100
96
|
end
|
101
97
|
end # self
|
102
98
|
end # Base
|
103
|
-
end # Nexmos
|
99
|
+
end # Nexmos
|
data/lib/nexmos/message.rb
CHANGED
data/lib/nexmos/number.rb
CHANGED