sms77 0.1.0 → 0.2.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 +15 -3
- data/lib/sms77/client.rb +4 -0
- data/lib/sms77/endpoint.rb +1 -0
- data/lib/sms77/journal.rb +38 -0
- data/lib/sms77/sms.rb +8 -0
- data/lib/sms77/util.rb +22 -0
- data/lib/sms77/version.rb +1 -1
- data/spec/sms77/client_spec.rb +2 -2
- data/spec/sms77/journal_spec.rb +85 -0
- data/spec/spec_helper.rb +14 -10
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36eb3f4cd708334c2bda49e4c94c7eef521de326a94231cdfe0c53e76bdee13f
|
4
|
+
data.tar.gz: 4ab1e7ec064ee7b3fc3bb8415fe1f8b1b23721bdb786647e88bee187bcc620ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a1cfa14204af7aa47452dedbd5971f1f6d5e839651ef77fcabf94c6ebfc7995d4d78b2a5e77fa73d491bf3adf246fc32afe499919e5d9eddecc4817de6309f4
|
7
|
+
data.tar.gz: c7c7631464d9bdc25b84e227d00c6271d46d2ee16e710759e445e457f84e3e212de819401abfbb74d4e5f6cd1cdef338a407e857887a212d9e06923826bc6d1b
|
data/README.md
CHANGED
@@ -3,15 +3,27 @@
|
|
3
3
|
# Ruby Client for the Sms77.io SMS Gateway API
|
4
4
|
|
5
5
|
## Installation
|
6
|
-
|
7
6
|
```gem install sms77```
|
8
7
|
|
9
8
|
### Usage
|
10
|
-
|
11
9
|
```ruby
|
12
10
|
require 'sms77'
|
13
11
|
|
14
12
|
client = Sms77::Client.new(ENV['SMS77_API_KEY'])
|
15
13
|
|
16
14
|
puts "Balance: #{client.balance}"
|
17
|
-
```
|
15
|
+
```
|
16
|
+
|
17
|
+
#### Testing
|
18
|
+
```shell
|
19
|
+
SMS77_API_KEY=MySms77ApiKey bundle exec rspec
|
20
|
+
```
|
21
|
+
|
22
|
+
*Optional environment variables*
|
23
|
+
|
24
|
+
Setting ```SMS77_DEBUG=1``` prints details to stdout.
|
25
|
+
|
26
|
+
Setting ```SMS77_TEST_HTTP=1``` enables live testing with actual API requests.
|
27
|
+
|
28
|
+
##### Support
|
29
|
+
Need help? Feel free to send us an <a href='mailto: support@sms77.io'>email</a>.
|
data/lib/sms77/client.rb
CHANGED
@@ -27,6 +27,10 @@ module Sms77
|
|
27
27
|
get_or_post(Sms77::Hooks::Action::READ == params[:action], Sms77::Endpoint::HOOKS, params)
|
28
28
|
end
|
29
29
|
|
30
|
+
def journal(params)
|
31
|
+
get(Sms77::Endpoint::JOURNAL, params)
|
32
|
+
end
|
33
|
+
|
30
34
|
def lookup(params)
|
31
35
|
post(Sms77::Endpoint::LOOKUP, params)
|
32
36
|
end
|
data/lib/sms77/endpoint.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sms77::Journal
|
4
|
+
module Type
|
5
|
+
INBOUND = 'inbound'
|
6
|
+
OUTBOUND = 'outbound'
|
7
|
+
REPLIES = 'replies'
|
8
|
+
VOICE = 'voice'
|
9
|
+
end
|
10
|
+
|
11
|
+
module Validator
|
12
|
+
def self.validate(params)
|
13
|
+
type = params[:type]
|
14
|
+
date_from = params[:date_from]
|
15
|
+
date_to = params[:date_to]
|
16
|
+
|
17
|
+
raise "Unknown type #{type}" unless Sms77::Journal::Validator::is_type?(type)
|
18
|
+
raise "Wrong date_from #{date_from}" unless Sms77::Journal::Validator::is_date?(date_from)
|
19
|
+
raise "Wrong date_to #{date_to}" unless Sms77::Journal::Validator::is_date?(date_to)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.subscribe(params)
|
23
|
+
{ :request_method => Sms77::Hooks::RequestMethod::POST }.merge!(params)
|
24
|
+
|
25
|
+
self.event_type?(params[:event_type]) &&
|
26
|
+
self.request_method?(params[:request_method]) &&
|
27
|
+
self.target_url?(params[:target_url])
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.is_type?(str)
|
31
|
+
Sms77::Util::in_module_constants?(str, Sms77::Journal::Type)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.is_date?(date)
|
35
|
+
date.is_a?(NilClass) || date.match(/[\d]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][\d]|3[0-1])/)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/sms77/sms.rb
ADDED
data/lib/sms77/util.rb
CHANGED
@@ -25,4 +25,26 @@ module Sms77::Util
|
|
25
25
|
def self.in_module_constants?(needle, mod)
|
26
26
|
get_module_constant_values(mod).include?(needle)
|
27
27
|
end
|
28
|
+
|
29
|
+
def self.valid_float?(str)
|
30
|
+
!!Float(str) rescue false
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.numeric?(val)
|
34
|
+
return true if val.is_a?(Integer)
|
35
|
+
|
36
|
+
val.scan(/\D/).empty?
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.boolean?(val)
|
40
|
+
[true, false].include? val
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.nil_or_lengthy_string?(val)
|
44
|
+
val.nil? || (val.is_a?(String) && val.length)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.lengthy_string?(val)
|
48
|
+
return val.is_a?(String) && !val.empty?
|
49
|
+
end
|
28
50
|
end
|
data/lib/sms77/version.rb
CHANGED
data/spec/sms77/client_spec.rb
CHANGED
@@ -5,11 +5,11 @@ require 'sms77/endpoint'
|
|
5
5
|
|
6
6
|
RSpec.describe Sms77, 'client' do
|
7
7
|
it 'checks api key' do
|
8
|
-
expect(Helper.client.api_key).to
|
8
|
+
expect(Helper.client.api_key).to be_lengthy_string
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'checks sentWith' do
|
12
|
-
expect(Helper.client.sent_with).to
|
12
|
+
expect(Helper.client.sent_with).to be_lengthy_string
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'fails authentication' do
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'sms77/endpoint'
|
5
|
+
require 'sms77/journal'
|
6
|
+
require 'sms77/sms'
|
7
|
+
|
8
|
+
RSpec.describe Sms77, 'journal' do
|
9
|
+
def valid_timestamp?(str)
|
10
|
+
str.match(/[\d]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][\d]|3[0-1]) (2[0-3]|[01][\d]):[0-5][\d]/)
|
11
|
+
end
|
12
|
+
|
13
|
+
def request(type)
|
14
|
+
stub = [{
|
15
|
+
:from => "SMS",
|
16
|
+
:id => "123456789",
|
17
|
+
:price => "1.2",
|
18
|
+
:text => "Hey my friend!",
|
19
|
+
:timestamp => "2020-10-14 14:25:04",
|
20
|
+
:to => "49170123456789",
|
21
|
+
}]
|
22
|
+
|
23
|
+
res = Helper.get(Sms77::Endpoint::JOURNAL, stub, { type: type })
|
24
|
+
|
25
|
+
expect(res).to be_a(Array)
|
26
|
+
|
27
|
+
res.each do |journal|
|
28
|
+
expect(journal).to be_a(Hash)
|
29
|
+
expect(journal[:from]).to be_lengthy_string
|
30
|
+
expect(journal[:id]).to be_numeric
|
31
|
+
expect(Sms77::Util::valid_float?(journal[:price])).to be_truthy
|
32
|
+
expect(journal[:text]).to be_lengthy_string
|
33
|
+
expect(valid_timestamp?(journal[:timestamp])).to be_truthy
|
34
|
+
expect(journal[:to]).to be_lengthy_string
|
35
|
+
end
|
36
|
+
|
37
|
+
res
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'returns all inbound messages' do
|
41
|
+
request(Sms77::Journal::Type::INBOUND)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns all outbound messages' do
|
45
|
+
request(Sms77::Journal::Type::OUTBOUND).each do |journal|
|
46
|
+
journal.merge!({
|
47
|
+
:connection => "http",
|
48
|
+
:dlr => "DELIVERED",
|
49
|
+
:dlr_timestamp => "2020-10-04 09:26:10.000",
|
50
|
+
:foreign_id => "MyForeignId",
|
51
|
+
:label => "MyCustomLabel",
|
52
|
+
:latency => "5.1060",
|
53
|
+
:mccmnc => "26207",
|
54
|
+
:type => "direct",
|
55
|
+
})
|
56
|
+
expect(journal[:connection]).to be_lengthy_string
|
57
|
+
expect(journal[:dlr]).to be_nil_or_lengthy_string
|
58
|
+
expect(valid_timestamp?(journal[:dlr_timestamp])).to be_truthy
|
59
|
+
expect(journal[:foreign_id]).to be_nil_or_lengthy_string
|
60
|
+
expect(journal[:label]).to be_nil_or_lengthy_string
|
61
|
+
expect(journal[:latency]).to be_nil_or_lengthy_string
|
62
|
+
expect(journal[:mccmnc]).to be_nil_or_lengthy_string
|
63
|
+
expect(Sms77::Util::in_module_constants?(journal[:type], Sms77::Sms::Type)).to be_truthy
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'returns all voice messages' do
|
68
|
+
request(Sms77::Journal::Type::VOICE).each do |journal|
|
69
|
+
journal.merge!({
|
70
|
+
:duration => "2",
|
71
|
+
:error => "",
|
72
|
+
:status => "completed",
|
73
|
+
:xml => false,
|
74
|
+
})
|
75
|
+
expect(journal[:duration]).to be_numeric
|
76
|
+
expect(journal[:error]).to be_nil_or_lengthy_string
|
77
|
+
expect(journal[:status]).to be_lengthy_string
|
78
|
+
expect(journal[:xml]).to be_boolean
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'returns all reply messages' do
|
83
|
+
request(Sms77::Journal::Type::REPLIES)
|
84
|
+
end
|
85
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,23 +5,27 @@ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
|
5
5
|
require 'sms77'
|
6
6
|
require 'sms77/util'
|
7
7
|
|
8
|
+
RSpec::Matchers.define :be_nil_or_lengthy_string do
|
9
|
+
match do |val|
|
10
|
+
Sms77::Util::nil_or_lengthy_string?(val)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
8
14
|
RSpec::Matchers.define :be_boolean do
|
9
|
-
match do |
|
10
|
-
|
15
|
+
match do |val|
|
16
|
+
Sms77::Util::boolean?(val)
|
11
17
|
end
|
12
18
|
end
|
13
19
|
|
14
20
|
RSpec::Matchers.define :be_numeric do
|
15
|
-
match do |
|
16
|
-
|
17
|
-
|
18
|
-
value.scan(/\D/).empty?
|
21
|
+
match do |val|
|
22
|
+
Sms77::Util::numeric?(val)
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
|
-
RSpec::Matchers.define :
|
23
|
-
match do |
|
24
|
-
|
26
|
+
RSpec::Matchers.define :be_lengthy_string do
|
27
|
+
match do |val|
|
28
|
+
Sms77::Util::lengthy_string?(val)
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
@@ -43,7 +47,7 @@ end
|
|
43
47
|
|
44
48
|
class Helper
|
45
49
|
@client = Sms77::Client.new(ENV['SMS77_DUMMY_API_KEY'], 'ruby-test')
|
46
|
-
@is_http = ENV
|
50
|
+
@is_http = ENV['SMS77_TEST_HTTP'].freeze
|
47
51
|
@stubs = Faraday::Adapter::Test::Stubs.new
|
48
52
|
@virtual_inbound_nr_eplus = '+491771783130'
|
49
53
|
Sms77::Client::BUILDER.adapter(:test, @stubs) unless @is_http
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sms77
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sms77 e.K.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -83,7 +83,9 @@ files:
|
|
83
83
|
- lib/sms77/contacts.rb
|
84
84
|
- lib/sms77/endpoint.rb
|
85
85
|
- lib/sms77/hooks.rb
|
86
|
+
- lib/sms77/journal.rb
|
86
87
|
- lib/sms77/lookup.rb
|
88
|
+
- lib/sms77/sms.rb
|
87
89
|
- lib/sms77/util.rb
|
88
90
|
- lib/sms77/version.rb
|
89
91
|
- sms77.gemspec
|
@@ -91,6 +93,7 @@ files:
|
|
91
93
|
- spec/sms77/client_spec.rb
|
92
94
|
- spec/sms77/contacts_spec.rb
|
93
95
|
- spec/sms77/hooks_spec.rb
|
96
|
+
- spec/sms77/journal_spec.rb
|
94
97
|
- spec/sms77/lookup_spec.rb
|
95
98
|
- spec/sms77/pricing_spec.rb
|
96
99
|
- spec/sms77/sms_spec.rb
|
@@ -133,3 +136,4 @@ test_files:
|
|
133
136
|
- spec/sms77/hooks_spec.rb
|
134
137
|
- spec/sms77/balance_spec.rb
|
135
138
|
- spec/sms77/validate_for_voice_spec.rb
|
139
|
+
- spec/sms77/journal_spec.rb
|