sms77 0.2.0 → 0.3.0
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/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
|