nexmos 0.2 → 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 +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