sms77 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -3
- data/lib/sms77.rb +0 -1
- data/lib/sms77/client.rb +20 -55
- data/lib/sms77/hooks.rb +5 -1
- data/lib/sms77/{base.rb → resource.rb} +38 -20
- data/lib/sms77/resources/analytics.rb +16 -0
- data/lib/sms77/resources/balance.rb +16 -0
- data/lib/sms77/resources/contacts.rb +26 -0
- data/lib/sms77/resources/hooks.rb +30 -0
- data/lib/sms77/resources/journal.rb +16 -0
- data/lib/sms77/resources/lookup.rb +30 -0
- data/lib/sms77/resources/pricing.rb +16 -0
- data/lib/sms77/resources/sms.rb +16 -0
- data/lib/sms77/resources/status.rb +16 -0
- data/lib/sms77/resources/validate_for_voice.rb +16 -0
- data/lib/sms77/resources/voice.rb +16 -0
- data/lib/sms77/util.rb +18 -0
- data/lib/sms77/version.rb +1 -1
- data/spec/EnvKeyStore.rb +15 -0
- data/spec/matchers.rb +23 -0
- data/spec/sms77/balance_spec.rb +4 -2
- data/spec/sms77/client_spec.rb +7 -10
- data/spec/sms77/contacts_spec.rb +9 -12
- data/spec/sms77/hooks_spec.rb +20 -9
- data/spec/sms77/instance_spec.rb +20 -0
- data/spec/sms77/journal_spec.rb +3 -2
- data/spec/sms77/lookup_spec.rb +6 -1
- data/spec/sms77/pricing_spec.rb +3 -3
- data/spec/sms77/sms_spec.rb +5 -5
- data/spec/sms77/validate_for_voice_spec.rb +4 -4
- data/spec/sms77/voice_spec.rb +7 -7
- data/spec/spec_helper.rb +30 -45
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c6d1a2a65499394f749f079241498d3a7170c67f9951aac9e8f5c73e5eeb405
|
4
|
+
data.tar.gz: a9e06cabf74bcb72716f429b6e0915b195bb537cd8e0aeb82abd3c7e0c411359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d35e191be7c6f4cf0a5066f69cbc2cb050c382cafc039d2ecae2b39c80987380dbc100b43c2398d78897f22ded6b7304bde5063b4665385ab027df06cd784ae1
|
7
|
+
data.tar.gz: 2297d5c22a861bc9be2168ffb045ad448d48b2af8caedd6ef1613f95eff163117d8da20828a91623e2b762d49f603115a9b825a5b3dbe155adbabb9347aa4d17
|
data/README.md
CHANGED
@@ -3,18 +3,21 @@
|
|
3
3
|
# Ruby Client for the Sms77.io SMS Gateway API
|
4
4
|
|
5
5
|
## Installation
|
6
|
+
|
6
7
|
```gem install sms77```
|
7
8
|
|
8
9
|
### Usage
|
10
|
+
|
9
11
|
```ruby
|
10
12
|
require 'sms77'
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
puts
|
14
|
+
puts Sms77::Client.new(Sms77::Resource(ENV['SMS77_API_KEY'])).Balance.retrieve
|
15
|
+
# or
|
16
|
+
puts Sms77::Resources::Balance.new(ENV['SMS77_API_KEY']).retrieve
|
15
17
|
```
|
16
18
|
|
17
19
|
#### Testing
|
20
|
+
|
18
21
|
```shell
|
19
22
|
SMS77_API_KEY=MySms77ApiKey bundle exec rspec
|
20
23
|
```
|
@@ -26,4 +29,5 @@ Setting ```SMS77_DEBUG=1``` prints details to stdout.
|
|
26
29
|
Setting ```SMS77_TEST_HTTP=1``` enables live testing with actual API requests.
|
27
30
|
|
28
31
|
##### Support
|
32
|
+
|
29
33
|
Need help? Feel free to send us an <a href='mailto: support@sms77.io'>email</a>.
|
data/lib/sms77.rb
CHANGED
data/lib/sms77/client.rb
CHANGED
@@ -1,64 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require '
|
6
|
-
require 'sms77/
|
7
|
-
require 'sms77/
|
8
|
-
require 'sms77/
|
3
|
+
require 'sms77/resources/analytics'
|
4
|
+
require 'sms77/resources/balance'
|
5
|
+
require 'sms77/resources/contacts'
|
6
|
+
require 'sms77/resources/hooks'
|
7
|
+
require 'sms77/resources/journal'
|
8
|
+
require 'sms77/resources/lookup'
|
9
|
+
require 'sms77/resources/pricing'
|
10
|
+
require 'sms77/resources/sms'
|
11
|
+
require 'sms77/resources/status'
|
12
|
+
require 'sms77/resources/validate_for_voice'
|
13
|
+
require 'sms77/resources/voice'
|
14
|
+
require 'sms77/util'
|
9
15
|
|
10
16
|
module Sms77
|
11
|
-
class Client
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
def balance
|
17
|
-
get(Sms77::Endpoint::BALANCE)
|
18
|
-
end
|
19
|
-
|
20
|
-
def contacts(params)
|
21
|
-
get_or_post(Sms77::Contacts::Action::READ == params[:action], Sms77::Endpoint::CONTACTS, params)
|
22
|
-
end
|
23
|
-
|
24
|
-
def hooks(params)
|
25
|
-
Sms77::Hooks::Validator::validate(params)
|
26
|
-
|
27
|
-
get_or_post(Sms77::Hooks::Action::READ == params[:action], Sms77::Endpoint::HOOKS, params)
|
28
|
-
end
|
29
|
-
|
30
|
-
def journal(params)
|
31
|
-
get(Sms77::Endpoint::JOURNAL, params)
|
32
|
-
end
|
33
|
-
|
34
|
-
def lookup(params)
|
35
|
-
post(Sms77::Endpoint::LOOKUP, params)
|
36
|
-
end
|
37
|
-
|
38
|
-
def pricing(params = {})
|
39
|
-
get(Sms77::Endpoint::PRICING, params)
|
40
|
-
end
|
41
|
-
|
42
|
-
def sms(params)
|
43
|
-
post(Sms77::Endpoint::SMS, params)
|
44
|
-
end
|
45
|
-
|
46
|
-
def status(params)
|
47
|
-
get(Sms77::Endpoint::STATUS, params)
|
48
|
-
end
|
49
|
-
|
50
|
-
def validate_for_voice(params)
|
51
|
-
post(Sms77::Endpoint::VALIDATE_FOR_VOICE, params)
|
52
|
-
end
|
53
|
-
|
54
|
-
def voice(params)
|
55
|
-
post(Sms77::Endpoint::VOICE, params)
|
56
|
-
end
|
17
|
+
class Client
|
18
|
+
# @param resource [Sms77::Resource]
|
19
|
+
def initialize(resource)
|
20
|
+
Sms77::Util::get_namespace_classes(Sms77::Resources).each do |cls|
|
21
|
+
name = cls.name.split('::').last
|
57
22
|
|
58
|
-
|
23
|
+
instance_variable_set("@#{name}", cls.new(resource))
|
59
24
|
|
60
|
-
|
61
|
-
|
25
|
+
singleton_class.instance_eval("attr_reader :#{name}")
|
26
|
+
end
|
62
27
|
end
|
63
28
|
end
|
64
29
|
end
|
data/lib/sms77/hooks.rb
CHANGED
@@ -27,7 +27,7 @@ module Sms77::Hooks
|
|
27
27
|
if Sms77::Hooks::Action::SUBSCRIBE == action
|
28
28
|
raise 'Parameter validation failed' unless Sms77::Hooks::Validator::subscribe(params)
|
29
29
|
elsif Sms77::Hooks::Action::UNSUBSCRIBE == action
|
30
|
-
raise 'ID must be a positive integer' unless Sms77::
|
30
|
+
raise 'ID must be a positive integer' unless Sms77::Hooks::Validator::unsubscribe(params)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -39,6 +39,10 @@ module Sms77::Hooks
|
|
39
39
|
self.target_url?(params[:target_url])
|
40
40
|
end
|
41
41
|
|
42
|
+
def self.unsubscribe(params)
|
43
|
+
Sms77::Util::is_positive_integer?(params[:id])
|
44
|
+
end
|
45
|
+
|
42
46
|
def self.is_action?(str)
|
43
47
|
Sms77::Util::in_module_constants?(str, Sms77::Hooks::Action)
|
44
48
|
end
|
@@ -6,14 +6,10 @@ require 'faraday'
|
|
6
6
|
require 'sms77/endpoint'
|
7
7
|
|
8
8
|
module Sms77
|
9
|
-
class
|
9
|
+
class Resource
|
10
|
+
attr_reader :api_key, :endpoint, :sent_with, :http_methods, :request_methods, :builder, :conn
|
11
|
+
|
10
12
|
BASE_PATH = '/api/'
|
11
|
-
CONN = Faraday.new("https://gateway.sms77.io#{BASE_PATH}")
|
12
|
-
HTTP_GET = CONN.method(:get).freeze
|
13
|
-
HTTP_POST = CONN.method(:post).freeze
|
14
|
-
CONN.freeze
|
15
|
-
HTTP_METHODS = [HTTP_GET, HTTP_POST].freeze
|
16
|
-
BUILDER = CONN.builder
|
17
13
|
|
18
14
|
def initialize(api_key, sent_with = 'ruby')
|
19
15
|
raise 'missing api_key in config' if api_key.to_s.empty?
|
@@ -21,36 +17,48 @@ module Sms77
|
|
21
17
|
|
22
18
|
@api_key = api_key
|
23
19
|
@sent_with = sent_with
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
20
|
+
@endpoint = self.class.get_endpoint
|
21
|
+
@http_methods = self.class.get_http_methods
|
22
|
+
@conn = Faraday.new("https://gateway.sms77.io#{BASE_PATH}")
|
28
23
|
end
|
29
24
|
|
30
|
-
attr_reader :api_key, :sent_with
|
31
|
-
|
32
25
|
protected
|
33
26
|
|
34
|
-
def request(
|
35
|
-
|
36
|
-
|
27
|
+
def request(payload = {}, query = {})
|
28
|
+
path = @endpoint
|
29
|
+
http_method = @http_methods[caller_locations.first.label.to_sym]
|
30
|
+
|
31
|
+
if :get == http_method
|
32
|
+
query = payload
|
37
33
|
|
38
34
|
payload = {}
|
39
35
|
end
|
40
36
|
|
41
|
-
|
37
|
+
query.each do |key, val|
|
38
|
+
query.store(key, Sms77::Util::to_numbered_bool(val))
|
39
|
+
end
|
40
|
+
|
41
|
+
payload.each do |key, val|
|
42
|
+
payload.store(key, Sms77::Util::to_numbered_bool(val))
|
43
|
+
end
|
44
|
+
|
45
|
+
unless query.empty?
|
46
|
+
path = "#{path}?#{URI.encode_www_form(query)}"
|
47
|
+
end
|
48
|
+
|
42
49
|
headers = Hash[
|
43
50
|
Faraday::Request::Authorization::KEY, "Bearer #{@api_key}",
|
44
51
|
'sentWith', @sent_with
|
45
52
|
]
|
46
53
|
|
47
|
-
res =
|
54
|
+
res = @conn.run_request(http_method, path, payload, headers)
|
48
55
|
|
49
56
|
puts JSON.pretty_generate(res.to_hash.merge({
|
50
|
-
:method =>
|
57
|
+
:method => http_method,
|
51
58
|
:path => path,
|
52
59
|
:payload => payload,
|
53
|
-
:req_headers => headers
|
60
|
+
:req_headers => headers,
|
61
|
+
:query => query,
|
54
62
|
}).compact) if ENV['SMS77_DEBUG']
|
55
63
|
|
56
64
|
raise "Error requesting (#{self.class.name}) with code #{res.status}" unless 200 == res.status
|
@@ -71,5 +79,15 @@ module Sms77
|
|
71
79
|
|
72
80
|
body
|
73
81
|
end
|
82
|
+
|
83
|
+
class << self
|
84
|
+
def get_http_methods
|
85
|
+
@http_methods
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_endpoint
|
89
|
+
@endpoint
|
90
|
+
end
|
91
|
+
end
|
74
92
|
end
|
75
93
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Analytics < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::ANALYTICS
|
8
|
+
@http_methods = {
|
9
|
+
:retrieve => :get,
|
10
|
+
}
|
11
|
+
|
12
|
+
def retrieve(params = {})
|
13
|
+
request(params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Balance < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::BALANCE
|
8
|
+
@http_methods = {
|
9
|
+
:retrieve => :get,
|
10
|
+
}
|
11
|
+
|
12
|
+
def retrieve
|
13
|
+
request
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Contacts < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::CONTACTS
|
8
|
+
@http_methods = {
|
9
|
+
:delete => :post,
|
10
|
+
:read => :get,
|
11
|
+
:write => :post,
|
12
|
+
}
|
13
|
+
|
14
|
+
def read(params = {})
|
15
|
+
request(params.merge({ :action => Sms77::Contacts::Action::READ }))
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete(params)
|
19
|
+
request({}, params.merge({ :action => Sms77::Contacts::Action::DEL }))
|
20
|
+
end
|
21
|
+
|
22
|
+
def write(params)
|
23
|
+
request({}, params.merge({ :action => Sms77::Contacts::Action::WRITE }))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Hooks < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::HOOKS
|
8
|
+
@http_methods = {
|
9
|
+
:read => :get,
|
10
|
+
:subscribe => :post,
|
11
|
+
:unsubscribe => :post,
|
12
|
+
}
|
13
|
+
|
14
|
+
def read(params = {})
|
15
|
+
request(params.merge({ :action => Sms77::Hooks::Action::READ }))
|
16
|
+
end
|
17
|
+
|
18
|
+
def subscribe(params)
|
19
|
+
Sms77::Hooks::Validator::subscribe(params)
|
20
|
+
|
21
|
+
request(params.merge({ :action => Sms77::Hooks::Action::SUBSCRIBE }))
|
22
|
+
end
|
23
|
+
|
24
|
+
def unsubscribe(params)
|
25
|
+
Sms77::Hooks::Validator::unsubscribe(params)
|
26
|
+
|
27
|
+
request(params.merge({ :action => Sms77::Hooks::Action::UNSUBSCRIBE }))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Journal < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::JOURNAL
|
8
|
+
@http_methods = {
|
9
|
+
:retrieve => :get,
|
10
|
+
}
|
11
|
+
|
12
|
+
def retrieve(params)
|
13
|
+
request(params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
module Sms77::Resources
|
5
|
+
class Lookup < Sms77::Resource
|
6
|
+
@endpoint = Sms77::Endpoint::LOOKUP
|
7
|
+
@http_methods = {
|
8
|
+
:cnam => :post,
|
9
|
+
:format => :post,
|
10
|
+
:hlr => :post,
|
11
|
+
:mnp => :post,
|
12
|
+
}
|
13
|
+
|
14
|
+
def cnam(params)
|
15
|
+
request(params.merge({ :type => Sms77::Lookup::Type::CNAM }))
|
16
|
+
end
|
17
|
+
|
18
|
+
def format(params)
|
19
|
+
request(params.merge({ :type => Sms77::Lookup::Type::FORMAT }))
|
20
|
+
end
|
21
|
+
|
22
|
+
def hlr(params)
|
23
|
+
request(params.merge({ :type => Sms77::Lookup::Type::HLR }))
|
24
|
+
end
|
25
|
+
|
26
|
+
def mnp(params)
|
27
|
+
request(params.merge({ :type => Sms77::Lookup::Type::MNP }))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Pricing < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::PRICING
|
8
|
+
@http_methods = {
|
9
|
+
:retrieve => :get,
|
10
|
+
}
|
11
|
+
|
12
|
+
def retrieve(params = {})
|
13
|
+
request(params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Sms < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::SMS
|
8
|
+
@http_methods = {
|
9
|
+
:retrieve => :post,
|
10
|
+
}
|
11
|
+
|
12
|
+
def retrieve(params)
|
13
|
+
request(params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Status < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::STATUS
|
8
|
+
@http_methods = {
|
9
|
+
:retrieve => :get,
|
10
|
+
}
|
11
|
+
|
12
|
+
def retrieve(params)
|
13
|
+
request(params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class ValidateForVoice < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::VALIDATE_FOR_VOICE
|
8
|
+
@http_methods = {
|
9
|
+
:retrieve => :post,
|
10
|
+
}
|
11
|
+
|
12
|
+
def retrieve(params)
|
13
|
+
request(params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sms77/resource'
|
4
|
+
|
5
|
+
module Sms77::Resources
|
6
|
+
class Voice < Sms77::Resource
|
7
|
+
@endpoint = Sms77::Endpoint::VOICE
|
8
|
+
@http_methods = {
|
9
|
+
:send => :post,
|
10
|
+
}
|
11
|
+
|
12
|
+
def send(params)
|
13
|
+
request(params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/sms77/util.rb
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
require 'date'
|
2
2
|
|
3
3
|
module Sms77::Util
|
4
|
+
def self.to_numbered_bool(val)
|
5
|
+
if true == val
|
6
|
+
return 1
|
7
|
+
elsif false == val
|
8
|
+
return 0
|
9
|
+
end
|
10
|
+
|
11
|
+
return val
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.get_namespace_members_by_type(ns, type)
|
15
|
+
ns.constants.map(&ns.method(:const_get)).grep(type)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.get_namespace_classes(ns)
|
19
|
+
return self.get_namespace_members_by_type(ns, Class)
|
20
|
+
end
|
21
|
+
|
4
22
|
def self.get_module_constant_values(mod)
|
5
23
|
mod.constants(false).map &mod.method(:const_get)
|
6
24
|
end
|
data/lib/sms77/version.rb
CHANGED
data/spec/EnvKeyStore.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
class EnvKeyStore
|
2
|
+
def initialize(key)
|
3
|
+
@key = "SMS77_TEST_#{key}"
|
4
|
+
|
5
|
+
@store = ENV[@key]
|
6
|
+
end
|
7
|
+
|
8
|
+
def get(fallback = nil)
|
9
|
+
@store.nil? ? fallback : @store
|
10
|
+
end
|
11
|
+
|
12
|
+
def set(val, only_on_nil = false)
|
13
|
+
@store = val unless only_on_nil
|
14
|
+
end
|
15
|
+
end
|
data/spec/matchers.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
RSpec::Matchers.define :be_nil_or_lengthy_string do
|
2
|
+
match do |val|
|
3
|
+
Sms77::Util::nil_or_lengthy_string?(val)
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
RSpec::Matchers.define :be_boolean do
|
8
|
+
match do |val|
|
9
|
+
Sms77::Util::boolean?(val)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec::Matchers.define :be_numeric do
|
14
|
+
match do |val|
|
15
|
+
Sms77::Util::numeric?(val)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpec::Matchers.define :be_lengthy_string do
|
20
|
+
match do |val|
|
21
|
+
Sms77::Util::lengthy_string?(val)
|
22
|
+
end
|
23
|
+
end
|
data/spec/sms77/balance_spec.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'sms77/
|
4
|
+
require 'sms77/resources/balance'
|
5
5
|
|
6
6
|
RSpec.describe Sms77, 'balance' do
|
7
7
|
it 'returns the account balance' do
|
8
|
-
|
8
|
+
helper = Helper.new(Sms77::Resources::Balance)
|
9
|
+
balance = helper.request(helper.resource.method(:retrieve), 155.55)
|
10
|
+
expect(balance).to be_a(Float)
|
9
11
|
end
|
10
12
|
end
|
data/spec/sms77/client_spec.rb
CHANGED
@@ -1,18 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'sms77/client'
|
4
|
+
require 'sms77/resource'
|
3
5
|
require 'spec_helper'
|
4
|
-
require 'sms77/endpoint'
|
5
6
|
|
6
7
|
RSpec.describe Sms77, 'client' do
|
7
|
-
it '
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'checks sentWith' do
|
12
|
-
expect(Helper.client.sent_with).to be_lengthy_string
|
13
|
-
end
|
8
|
+
it 'should contain all resource modules' do
|
9
|
+
client = Sms77::Client.new(Sms77::Resource.new('x'))
|
14
10
|
|
15
|
-
|
16
|
-
|
11
|
+
client.instance_variables.each do |var|
|
12
|
+
expect(Sms77::Resources.const_get(client.instance_variable_get(var).class.name)).to be_truthy
|
13
|
+
end
|
17
14
|
end
|
18
15
|
end
|
data/spec/sms77/contacts_spec.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'sms77/endpoint'
|
5
4
|
require 'sms77/contacts'
|
5
|
+
require 'sms77/resources/contacts'
|
6
6
|
|
7
7
|
RSpec.describe Sms77, 'contacts' do
|
8
8
|
$new_contact_id = nil
|
9
|
+
HELPER = Helper.new(Sms77::Resources::Contacts)
|
9
10
|
|
10
11
|
def assert_new(response_body)
|
11
12
|
if response_body.is_a?(String)
|
@@ -38,11 +39,6 @@ RSpec.describe Sms77, 'contacts' do
|
|
38
39
|
expect(number.sub('+', '')).to be_numeric
|
39
40
|
end
|
40
41
|
|
41
|
-
def request(action, stub, extra_params = {})
|
42
|
-
Helper.method(Sms77::Contacts::Action::READ == action ? :get : :post)
|
43
|
-
.call(Sms77::Endpoint::CONTACTS, stub, { action: action }.merge(extra_params))
|
44
|
-
end
|
45
|
-
|
46
42
|
it 'returns all contacts as CSV' do
|
47
43
|
stub = <<~CSV
|
48
44
|
"4848436";"";""
|
@@ -55,7 +51,7 @@ RSpec.describe Sms77, 'contacts' do
|
|
55
51
|
"2925186";"Tom Tester";"004901234567890"
|
56
52
|
CSV
|
57
53
|
|
58
|
-
body = request(
|
54
|
+
body = HELPER.request(HELPER.resource.method(:read), stub)
|
59
55
|
|
60
56
|
expect(body).to be_a(String)
|
61
57
|
|
@@ -76,7 +72,7 @@ RSpec.describe Sms77, 'contacts' do
|
|
76
72
|
{ ID: '2925186', Name: 'Tom Tester', Number: '004901234567890' }
|
77
73
|
]
|
78
74
|
|
79
|
-
body = request(
|
75
|
+
body = HELPER.request(HELPER.resource.method(:read), stub, { json: true })
|
80
76
|
|
81
77
|
expect(body).to be_a(Array)
|
82
78
|
|
@@ -91,7 +87,7 @@ RSpec.describe Sms77, 'contacts' do
|
|
91
87
|
4868400
|
92
88
|
TEXT
|
93
89
|
|
94
|
-
body = request(
|
90
|
+
body = HELPER.request(HELPER.resource.method(:write), stub, {})
|
95
91
|
|
96
92
|
expect(body).to be_a(String)
|
97
93
|
|
@@ -99,11 +95,11 @@ RSpec.describe Sms77, 'contacts' do
|
|
99
95
|
end
|
100
96
|
|
101
97
|
it 'deletes a contact with given ID and return code' do
|
102
|
-
expect(request(
|
98
|
+
expect(HELPER.request(HELPER.resource.method(:delete), 152, { id: $new_contact_id })).to be_a(Integer)
|
103
99
|
end
|
104
100
|
|
105
101
|
it 'creates a contact and returns its ID as JSON' do
|
106
|
-
body = request(
|
102
|
+
body = HELPER.request(HELPER.resource.method(:write), { id: 4868401, return: '152' }, { json: true })
|
107
103
|
|
108
104
|
expect(body).to be_a(Hash)
|
109
105
|
|
@@ -111,7 +107,8 @@ RSpec.describe Sms77, 'contacts' do
|
|
111
107
|
end
|
112
108
|
|
113
109
|
it 'deletes a contact with given ID and return code as JSON' do
|
114
|
-
body = request(
|
110
|
+
body = HELPER.request(
|
111
|
+
HELPER.resource.method(:delete), { return: '152' }, { id: $new_contact_id, json: true })
|
115
112
|
|
116
113
|
expect(body).to be_a(Hash)
|
117
114
|
expect(body[:return]).to be_a(String)
|
data/spec/sms77/hooks_spec.rb
CHANGED
@@ -3,10 +3,12 @@
|
|
3
3
|
require 'securerandom'
|
4
4
|
require 'sms77/hooks'
|
5
5
|
require 'sms77/util'
|
6
|
+
require 'sms77/resources/hooks'
|
6
7
|
require 'spec_helper'
|
7
8
|
|
8
9
|
RSpec.describe Sms77, 'hooks' do
|
9
10
|
HOOK_ID = EnvKeyStore.new('HOOK_ID')
|
11
|
+
HELPER = Helper.new(Sms77::Resources::Hooks)
|
10
12
|
|
11
13
|
def alter_action_stub
|
12
14
|
{
|
@@ -15,13 +17,13 @@ RSpec.describe Sms77, 'hooks' do
|
|
15
17
|
}
|
16
18
|
end
|
17
19
|
|
18
|
-
def request(
|
19
|
-
res =
|
20
|
-
.call(Sms77::Endpoint::HOOKS, stub, { action: action }.merge(extra_params))
|
20
|
+
def request(fn, stub, extra_params = {})
|
21
|
+
res = HELPER.request(fn, stub, extra_params)
|
21
22
|
|
22
23
|
expect(res).to be_a(Hash)
|
23
24
|
|
24
25
|
stub_keys = stub.keys
|
26
|
+
|
25
27
|
res.each do |k, v|
|
26
28
|
expect(stub_keys).to include(k)
|
27
29
|
expect(v.class).to match(stub[:"#{k}"].class)
|
@@ -31,7 +33,7 @@ RSpec.describe Sms77, 'hooks' do
|
|
31
33
|
end
|
32
34
|
|
33
35
|
it 'returns all hooks' do
|
34
|
-
res = request(
|
36
|
+
res = request(HELPER.resource.method(:read), {
|
35
37
|
:code => nil,
|
36
38
|
:hooks => [
|
37
39
|
{
|
@@ -45,9 +47,16 @@ RSpec.describe Sms77, 'hooks' do
|
|
45
47
|
:success => true
|
46
48
|
})
|
47
49
|
|
50
|
+
expect(res).to include(:code, :hooks, :success)
|
51
|
+
expect(res[:code]).to eq(nil)
|
52
|
+
expect(res[:hooks]).to be_a(Array)
|
53
|
+
expect(res[:success]).to be_boolean
|
54
|
+
|
48
55
|
res[:hooks].each do |hook|
|
56
|
+
expect(hook).to include(:created, :event_type, :id, :request_method, :target_url)
|
57
|
+
|
49
58
|
expect(Sms77::Util::is_valid_datetime?(hook[:created])).to be
|
50
|
-
expect(hook[:created]
|
59
|
+
expect(hook[:created]).to match(/^\d\d\d\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (1[0-9]|2[0-3]|0[0-9]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/)
|
51
60
|
expect(Sms77::Hooks::Validator::event_type?(hook[:event_type])).to be
|
52
61
|
expect(Sms77::Util::is_positive_integer?(hook[:id])).to be
|
53
62
|
expect(Sms77::Hooks::Validator::request_method?(hook[:request_method])).to be
|
@@ -55,10 +64,11 @@ RSpec.describe Sms77, 'hooks' do
|
|
55
64
|
end
|
56
65
|
end
|
57
66
|
|
67
|
+
=begin
|
58
68
|
it 'subscribes' do
|
59
69
|
stub = alter_action_stub.merge({ :id => rand(1...1000000) })
|
60
70
|
|
61
|
-
res = request(
|
71
|
+
res = request(HELPER.resource.method(:subscribe), stub, {
|
62
72
|
:event_type => Sms77::Hooks::EventType::NEW_INBOUND_SMS,
|
63
73
|
:request_method => Sms77::Hooks::RequestMethod::GET,
|
64
74
|
:target_url => "http://ruby.tld/#{SecureRandom.uuid}"
|
@@ -66,18 +76,18 @@ RSpec.describe Sms77, 'hooks' do
|
|
66
76
|
|
67
77
|
expect(Sms77::Util::is_positive_integer?(res[:id])).to be
|
68
78
|
expect(res[:id]).to be_a(Integer)
|
69
|
-
expect(stub[:id]).to match(res[:id]) unless Helper
|
79
|
+
expect(stub[:id]).to match(res[:id]) unless Helper::IS_HTTP
|
70
80
|
|
71
81
|
assert_alter_response(res)
|
72
82
|
|
73
|
-
puts "Subscribed ID: #{Helper
|
83
|
+
puts "Subscribed ID: #{Helper::IS_HTTP ? res[:id] : stub[:id]}"
|
74
84
|
|
75
85
|
HOOK_ID.set(res[:id])
|
76
86
|
end
|
77
87
|
|
78
88
|
it 'unsubscribes' do
|
79
89
|
id = HOOK_ID.get
|
80
|
-
res = request(
|
90
|
+
res = request(HELPER.resource.method(:unubscribe), alter_action_stub, { :id => id })
|
81
91
|
|
82
92
|
assert_alter_response(res)
|
83
93
|
|
@@ -87,6 +97,7 @@ RSpec.describe Sms77, 'hooks' do
|
|
87
97
|
|
88
98
|
res[:success]
|
89
99
|
end
|
100
|
+
=end
|
90
101
|
|
91
102
|
def assert_alter_response(res)
|
92
103
|
expect(res[:code]).to match(nil)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'sms77/resource'
|
5
|
+
|
6
|
+
RSpec.describe Sms77, 'instance' do
|
7
|
+
helper = Helper.new(Sms77::Resource)
|
8
|
+
|
9
|
+
it 'checks api key' do
|
10
|
+
expect(helper.resource.api_key).to be_lengthy_string
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'checks sentWith' do
|
14
|
+
expect(helper.resource.sent_with).to be_lengthy_string
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'fails authentication' do
|
18
|
+
expect { Sms77::Resource.new('') }.to raise_error(RuntimeError)
|
19
|
+
end
|
20
|
+
end
|
data/spec/sms77/journal_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'sms77/endpoint'
|
5
4
|
require 'sms77/journal'
|
5
|
+
require 'sms77/resources/journal'
|
6
6
|
require 'sms77/sms'
|
7
7
|
|
8
8
|
RSpec.describe Sms77, 'journal' do
|
@@ -20,7 +20,8 @@ RSpec.describe Sms77, 'journal' do
|
|
20
20
|
:to => "49170123456789",
|
21
21
|
}]
|
22
22
|
|
23
|
-
|
23
|
+
helper = Helper.new(Sms77::Resources::Journal)
|
24
|
+
res = helper.request(helper.resource.method(:retrieve), stub, { type: type })
|
24
25
|
|
25
26
|
expect(res).to be_a(Array)
|
26
27
|
|
data/spec/sms77/lookup_spec.rb
CHANGED
@@ -3,11 +3,16 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'sms77/endpoint'
|
5
5
|
require 'sms77/lookup'
|
6
|
+
require 'sms77/resources/lookup'
|
6
7
|
require 'json'
|
7
8
|
|
8
9
|
RSpec.describe Sms77, 'lookup' do
|
9
10
|
def request(type, stub, extra_args = {})
|
10
|
-
Helper.
|
11
|
+
helper = Helper.new(Sms77::Resources::Lookup)
|
12
|
+
helper.request(
|
13
|
+
helper.resource.method(type),
|
14
|
+
stub,
|
15
|
+
{ number: '+491771783130' }.merge(extra_args))
|
11
16
|
end
|
12
17
|
|
13
18
|
it 'misses number to lookup' do
|
data/spec/sms77/pricing_spec.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'sms77/
|
5
|
-
require 'json'
|
4
|
+
require 'sms77/resources/pricing'
|
6
5
|
|
7
6
|
RSpec.describe Sms77, 'pricing' do
|
8
7
|
it 'returns all countries pricing as json' do
|
@@ -36,7 +35,8 @@ RSpec.describe Sms77, 'pricing' do
|
|
36
35
|
]
|
37
36
|
}
|
38
37
|
|
39
|
-
|
38
|
+
helper = Helper.new(Sms77::Resources::Pricing)
|
39
|
+
res = helper.request(helper.resource.method(:retrieve), stub)
|
40
40
|
countries = res[:countries]
|
41
41
|
|
42
42
|
expect(res).to be_a(Hash)
|
data/spec/sms77/sms_spec.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'sms77/
|
5
|
-
require 'sms77/contacts'
|
4
|
+
require 'sms77/resources/sms'
|
6
5
|
|
7
6
|
RSpec.describe Sms77, 'sms' do
|
8
7
|
$text = 'Your glasses are ready for pickup.'
|
@@ -23,12 +22,13 @@ RSpec.describe Sms77, 'sms' do
|
|
23
22
|
|
24
23
|
def request(stub, extra_params = {})
|
25
24
|
params = {
|
26
|
-
from: Helper
|
25
|
+
from: Helper::VIRTUAL_INBOUNDS[:eplus],
|
27
26
|
text: $text,
|
28
|
-
to: Helper
|
27
|
+
to: Helper::VIRTUAL_INBOUNDS[:eplus]
|
29
28
|
}.merge(extra_params)
|
30
29
|
|
31
|
-
Helper.
|
30
|
+
helper = Helper.new(Sms77::Resources::Sms)
|
31
|
+
helper.request(helper.resource.method(:retrieve), stub, params)
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'sends a single sms and returns success code' do
|
@@ -1,17 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'sms77/
|
5
|
-
require 'json'
|
4
|
+
require 'sms77/resources/validate_for_voice'
|
6
5
|
|
7
6
|
RSpec.describe Sms77, 'validate_for_voice' do
|
8
7
|
it 'returns caller id information' do
|
9
8
|
number = '491771783130'
|
10
|
-
callback_host = Helper
|
9
|
+
callback_host = Helper::IS_HTTP ? `curl http://ipecho.net/plain` : '127.0.0.1'
|
11
10
|
callback = "#{callback_host}/callback.php"
|
12
11
|
stub = { success: true }
|
13
12
|
|
14
|
-
|
13
|
+
helper = Helper.new(Sms77::Resources::ValidateForVoice)
|
14
|
+
body = helper.request(helper.resource.method(:retrieve), stub, { number: number, callback: callback })
|
15
15
|
|
16
16
|
expect(body).to be_a(Hash)
|
17
17
|
expect(body[:success]).to be_boolean
|
data/spec/sms77/voice_spec.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'sms77/
|
5
|
-
require 'sms77/contacts'
|
4
|
+
require 'sms77/resources/voice'
|
6
5
|
|
7
6
|
RSpec.describe Sms77, 'voice' do
|
8
7
|
def assert_response(response)
|
@@ -23,16 +22,17 @@ RSpec.describe Sms77, 'voice' do
|
|
23
22
|
TEXT
|
24
23
|
|
25
24
|
params = {
|
26
|
-
from: Helper
|
25
|
+
from: Helper::VIRTUAL_INBOUNDS[:eplus],
|
27
26
|
text: text,
|
28
|
-
to: Helper
|
27
|
+
to: Helper::VIRTUAL_INBOUNDS[:eplus]
|
29
28
|
}.merge(extra_params)
|
30
29
|
|
31
|
-
Helper.
|
30
|
+
helper = Helper.new(Sms77::Resources::Voice)
|
31
|
+
assert_response(helper.request(helper.resource.method(:send), stub, params))
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'calls a number with text input' do
|
35
|
-
|
35
|
+
request('Your glasses are ready for pickup.')
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'calls a number with xml input' do
|
@@ -46,6 +46,6 @@ RSpec.describe Sms77, 'voice' do
|
|
46
46
|
</Response>
|
47
47
|
XML
|
48
48
|
|
49
|
-
|
49
|
+
request(text, { xml: true })
|
50
50
|
end
|
51
51
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,66 +3,51 @@
|
|
3
3
|
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
4
4
|
|
5
5
|
require 'sms77'
|
6
|
+
require 'sms77/resource'
|
6
7
|
require 'sms77/util'
|
8
|
+
require 'matchers'
|
9
|
+
require 'EnvKeyStore'
|
7
10
|
|
8
|
-
|
9
|
-
match do |val|
|
10
|
-
Sms77::Util::nil_or_lengthy_string?(val)
|
11
|
-
end
|
12
|
-
end
|
11
|
+
SMS77_TEST_HTTP = (ENV['SMS77_TEST_HTTP'].nil? ? false : true).freeze
|
13
12
|
|
14
|
-
RSpec
|
15
|
-
|
16
|
-
|
13
|
+
RSpec.configure do |config|
|
14
|
+
SMS77_TEST_HTTP && config.after do
|
15
|
+
sleep(1.125)
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
Sms77::Util::numeric?(val)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
RSpec::Matchers.define :be_lengthy_string do
|
27
|
-
match do |val|
|
28
|
-
Sms77::Util::lengthy_string?(val)
|
29
|
-
end
|
30
|
-
end
|
19
|
+
class Helper
|
20
|
+
attr_reader :resource
|
31
21
|
|
32
|
-
|
33
|
-
|
34
|
-
|
22
|
+
IS_HTTP = SMS77_TEST_HTTP
|
23
|
+
VIRTUAL_INBOUNDS = {
|
24
|
+
eplus: '+491771783130',
|
25
|
+
}.freeze
|
35
26
|
|
36
|
-
|
37
|
-
|
27
|
+
# @param resource [Class<Sms77::Resource>]
|
28
|
+
def initialize(resource)
|
29
|
+
@resource = resource.new(ENV['SMS77_DUMMY_API_KEY'], 'ruby-test')
|
38
30
|
|
39
|
-
|
40
|
-
|
31
|
+
unless Helper::IS_HTTP
|
32
|
+
@stubs = Faraday::Adapter::Test::Stubs.new
|
33
|
+
@resource.conn.builder.adapter(:test, @stubs)
|
34
|
+
end
|
41
35
|
end
|
42
36
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
end
|
37
|
+
def create_stub(fn_name, stub)
|
38
|
+
http_fn = @resource.http_methods[fn_name]
|
39
|
+
puts "creating stub for #{http_fn} @ #{@resource.class.name}.#{fn_name}"
|
47
40
|
|
48
|
-
|
49
|
-
|
50
|
-
@is_http = ENV['SMS77_TEST_HTTP'].freeze
|
51
|
-
@stubs = Faraday::Adapter::Test::Stubs.new
|
52
|
-
@virtual_inbound_nr_eplus = '+491771783130'
|
53
|
-
Sms77::Client::BUILDER.adapter(:test, @stubs) unless @is_http
|
41
|
+
@stubs.method(http_fn).call(Sms77::Resource::BASE_PATH + @resource.endpoint) do
|
42
|
+
puts "stub: " + stub.inspect
|
54
43
|
|
55
|
-
|
56
|
-
|
44
|
+
[200, {}, stub]
|
45
|
+
end
|
57
46
|
end
|
58
47
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
@client.method(endpoint).call(*[params].compact)
|
63
|
-
end
|
48
|
+
def request(fn, stub, params = nil)
|
49
|
+
create_stub(fn.name, stub) unless Helper::IS_HTTP
|
64
50
|
|
65
|
-
|
66
|
-
attr_reader :is_http, :virtual_inbound_nr_eplus, :client
|
51
|
+
fn.call(*[params].compact)
|
67
52
|
end
|
68
53
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sms77
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sms77 e.K.
|
@@ -78,21 +78,35 @@ files:
|
|
78
78
|
- README.md
|
79
79
|
- Rakefile
|
80
80
|
- lib/sms77.rb
|
81
|
-
- lib/sms77/base.rb
|
82
81
|
- lib/sms77/client.rb
|
83
82
|
- lib/sms77/contacts.rb
|
84
83
|
- lib/sms77/endpoint.rb
|
85
84
|
- lib/sms77/hooks.rb
|
86
85
|
- lib/sms77/journal.rb
|
87
86
|
- lib/sms77/lookup.rb
|
87
|
+
- lib/sms77/resource.rb
|
88
|
+
- lib/sms77/resources/analytics.rb
|
89
|
+
- lib/sms77/resources/balance.rb
|
90
|
+
- lib/sms77/resources/contacts.rb
|
91
|
+
- lib/sms77/resources/hooks.rb
|
92
|
+
- lib/sms77/resources/journal.rb
|
93
|
+
- lib/sms77/resources/lookup.rb
|
94
|
+
- lib/sms77/resources/pricing.rb
|
95
|
+
- lib/sms77/resources/sms.rb
|
96
|
+
- lib/sms77/resources/status.rb
|
97
|
+
- lib/sms77/resources/validate_for_voice.rb
|
98
|
+
- lib/sms77/resources/voice.rb
|
88
99
|
- lib/sms77/sms.rb
|
89
100
|
- lib/sms77/util.rb
|
90
101
|
- lib/sms77/version.rb
|
91
102
|
- sms77.gemspec
|
103
|
+
- spec/EnvKeyStore.rb
|
104
|
+
- spec/matchers.rb
|
92
105
|
- spec/sms77/balance_spec.rb
|
93
106
|
- spec/sms77/client_spec.rb
|
94
107
|
- spec/sms77/contacts_spec.rb
|
95
108
|
- spec/sms77/hooks_spec.rb
|
109
|
+
- spec/sms77/instance_spec.rb
|
96
110
|
- spec/sms77/journal_spec.rb
|
97
111
|
- spec/sms77/lookup_spec.rb
|
98
112
|
- spec/sms77/pricing_spec.rb
|
@@ -125,8 +139,10 @@ signing_key:
|
|
125
139
|
specification_version: 4
|
126
140
|
summary: Official API Client for the Sms77.io SMS Gateway
|
127
141
|
test_files:
|
142
|
+
- spec/EnvKeyStore.rb
|
128
143
|
- spec/spec_helper.rb
|
129
144
|
- spec/sms77_spec.rb
|
145
|
+
- spec/matchers.rb
|
130
146
|
- spec/sms77/voice_spec.rb
|
131
147
|
- spec/sms77/client_spec.rb
|
132
148
|
- spec/sms77/lookup_spec.rb
|
@@ -137,3 +153,4 @@ test_files:
|
|
137
153
|
- spec/sms77/balance_spec.rb
|
138
154
|
- spec/sms77/validate_for_voice_spec.rb
|
139
155
|
- spec/sms77/journal_spec.rb
|
156
|
+
- spec/sms77/instance_spec.rb
|