sms_kit 1.3.1

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.
Files changed (39) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +118 -0
  3. data/Rakefile +9 -0
  4. data/lib/sms_kit.rb +15 -0
  5. data/lib/sms_kit/config.rb +43 -0
  6. data/lib/sms_kit/delivery.rb +13 -0
  7. data/lib/sms_kit/http.rb +28 -0
  8. data/lib/sms_kit/logging.rb +27 -0
  9. data/lib/sms_kit/provider.rb +25 -0
  10. data/lib/sms_kit/providers.rb +3 -0
  11. data/lib/sms_kit/providers/central_ict.rb +46 -0
  12. data/lib/sms_kit/providers/mobi_web.rb +54 -0
  13. data/lib/sms_kit/providers/mobimex.rb +56 -0
  14. data/lib/sms_kit/providers/sms_trade.rb +77 -0
  15. data/lib/sms_kit/railtie.rb +7 -0
  16. data/lib/sms_kit/utils.rb +13 -0
  17. data/lib/sms_kit/version.rb +3 -0
  18. data/test/central_ict_test.rb +40 -0
  19. data/test/config_test.rb +34 -0
  20. data/test/delivery_test.rb +21 -0
  21. data/test/fixtures/vcr_cassettes/central_ict/failure.yml +33 -0
  22. data/test/fixtures/vcr_cassettes/central_ict/success.yml +33 -0
  23. data/test/fixtures/vcr_cassettes/mobi_web/failure.yml +32 -0
  24. data/test/fixtures/vcr_cassettes/mobi_web/quick_deliver.yml +32 -0
  25. data/test/fixtures/vcr_cassettes/mobi_web/success.yml +32 -0
  26. data/test/fixtures/vcr_cassettes/mobimex/failure.yml +24 -0
  27. data/test/fixtures/vcr_cassettes/mobimex/success.yml +25 -0
  28. data/test/fixtures/vcr_cassettes/sms_trade/failure.yml +32 -0
  29. data/test/fixtures/vcr_cassettes/sms_trade/success.yml +34 -0
  30. data/test/fixtures/vcr_cassettes/stub_provider/success.yml +22 -0
  31. data/test/helper.rb +30 -0
  32. data/test/http_test.rb +22 -0
  33. data/test/logging_test.rb +21 -0
  34. data/test/mobi_web_test.rb +46 -0
  35. data/test/mobimex_test.rb +40 -0
  36. data/test/provider_test.rb +49 -0
  37. data/test/sms_trade_test.rb +44 -0
  38. data/test/utils_test.rb +12 -0
  39. metadata +187 -0
@@ -0,0 +1,34 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://gateway.smstrade.de/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: message=foo+bar&to=12345&from=123456&route=Basic&dlr=1&message_id=1&debug=1
9
+ headers:
10
+ User-Agent:
11
+ - SmsKit 1.0.1
12
+ response:
13
+ status:
14
+ code: 200
15
+ message:
16
+ headers:
17
+ content-type:
18
+ - text/html; charset=ISO-8859-1
19
+ connection:
20
+ - close
21
+ transfer-encoding:
22
+ - chunked
23
+ date:
24
+ - Wed, 10 Dec 2014 12:31:49 GMT
25
+ server:
26
+ - lighttpd/1.4.28
27
+ body:
28
+ encoding: UTF-8
29
+ string: |-
30
+ 100
31
+ 123456789
32
+ http_version:
33
+ recorded_at: Wed, 10 Dec 2014 12:31:48 GMT
34
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,22 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://api.example.com/
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"to":123456789,"text":"hello world"}'
9
+ headers:
10
+ User-Agent:
11
+ - SmsKit 1.0.0
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: OK
16
+ headers: {}
17
+ body:
18
+ encoding: UTF-8
19
+ string: '123'
20
+ http_version:
21
+ recorded_at: Thu, 11 Dec 2015 03:26:51 GMT
22
+ recorded_with: VCR 2.8.0
data/test/helper.rb ADDED
@@ -0,0 +1,30 @@
1
+ $:.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ if ENV['COV']
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+ end
7
+
8
+ require 'minitest/autorun'
9
+ require 'pry'
10
+ require 'vcr'
11
+ require 'sms_kit'
12
+ require 'logger'
13
+
14
+ SmsKit.logger = Logger.new '/dev/null'
15
+
16
+ VCR.configure do |c|
17
+ c.cassette_library_dir = 'test/fixtures/vcr_cassettes'
18
+ c.hook_into :faraday
19
+ end
20
+
21
+ require 'sms_kit/provider'
22
+ class ExampleProvider < SmsKit::Provider
23
+ HTTP_ENDPOINT = 'http://www.example.com'.freeze
24
+ end
25
+
26
+ class StubSms
27
+ def to_sms
28
+ { to: 123456789, text: 'hello world' }
29
+ end
30
+ end
data/test/http_test.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'helper'
2
+
3
+ class MockProvider < ExampleProvider
4
+ def connection
5
+ super do |conn|
6
+ conn.headers[:user_agent] = 'customer user agent'
7
+ end
8
+ end
9
+ end
10
+
11
+ class HttpTest < MiniTest::Test
12
+
13
+ def setup
14
+ @mock = MockProvider.new
15
+ end
16
+
17
+ def test_connection_config
18
+ conn = @mock.connection
19
+ assert_equal 'customer user agent', conn.headers[:user_agent]
20
+ end
21
+
22
+ end
@@ -0,0 +1,21 @@
1
+ require 'helper'
2
+ require 'logger'
3
+
4
+ class MockLogger < Logger; end
5
+
6
+ class LoggingTest < MiniTest::Test
7
+
8
+ def teardown
9
+ SmsKit.logger = Logger.new '/dev/null'
10
+ end
11
+
12
+ def test_getter
13
+ assert_instance_of Logger, SmsKit.logger
14
+ end
15
+
16
+ def test_setter
17
+ SmsKit.logger = MockLogger.new '/dev/null'
18
+ assert_instance_of MockLogger, SmsKit.logger
19
+ end
20
+
21
+ end
@@ -0,0 +1,46 @@
1
+ require 'helper'
2
+ require 'sms_kit/providers/mobi_web'
3
+
4
+ SmsKit::MobiWeb.configure do |config|
5
+ config.username = 'user'
6
+ config.password = 'pass'
7
+ config.sender = 123456
8
+ end
9
+
10
+ module SmsKit
11
+ class MobiWebTest < MiniTest::Test
12
+
13
+ def vcr_options
14
+ { match_requests_on: [
15
+ VCR.request_matchers.uri_without_params(:username, :password)
16
+ ]}
17
+ end
18
+
19
+ def text_message
20
+ { text: 'foo bar', to: 12345 }
21
+ end
22
+
23
+ def test_params
24
+ message = MobiWeb.new text_message
25
+ assert_equal text_message[:to], message.params[:phone]
26
+ assert_equal MobiWeb.config.sender, message.params[:originator]
27
+ assert_equal text_message[:text], message.params[:msgtext]
28
+ assert_equal 1, message.params[:showDLR]
29
+ end
30
+
31
+ def test_deliver
32
+ VCR.use_cassette 'mobi_web/success', vcr_options do
33
+ assert_equal 123, MobiWeb.deliver(text_message)
34
+ end
35
+ end
36
+
37
+ def test_error
38
+ VCR.use_cassette 'mobi_web/failure', vcr_options do
39
+ provider = MobiWeb.new
40
+ error = assert_raises(SmsKit::DeliveryError) { provider.deliver }
41
+ assert_match %r{Temporary Internal Server Error. Try again later \(100\)}, error.message
42
+ end
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,40 @@
1
+ require 'helper'
2
+ require 'sms_kit/providers/mobimex'
3
+
4
+ SmsKit::Mobimex.configure do |config|
5
+ config.username = 'user'
6
+ config.password = 'pass'
7
+ config.sender = 123456
8
+ config.route = SmsKit::Mobimex::ROUTE_AFRICA
9
+ end
10
+
11
+ module SmsKit
12
+ class MobimexTest < MiniTest::Test
13
+
14
+ def text_message
15
+ { text: 'foo bar', to: 12345, from: 6789 }
16
+ end
17
+
18
+ def test_params
19
+ message = Mobimex.new text_message
20
+ assert_equal text_message[:to], message.params[:number]
21
+ assert_equal text_message[:from], message.params[:from_number]
22
+ assert_equal text_message[:text], message.params[:message]
23
+ assert_equal Mobimex::ROUTE_AFRICA, message.params[:route]
24
+ end
25
+
26
+ def test_deliver
27
+ VCR.use_cassette 'mobimex/success' do
28
+ assert Mobimex.deliver text_message
29
+ end
30
+ end
31
+
32
+ def test_deliver_fails
33
+ VCR.use_cassette 'mobimex/failure' do
34
+ error = assert_raises(SmsKit::DeliveryError) { Mobimex.deliver }
35
+ assert_match %r{Delivery failed}, error.message
36
+ end
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,49 @@
1
+ require 'helper'
2
+ require 'sms_kit/provider'
3
+
4
+ class StubProvider < SmsKit::Provider
5
+ HTTP_ENDPOINT = 'http://api.example.com'.freeze
6
+
7
+ def deliver options = {}
8
+ response = post data.to_json
9
+ response.status.to_i == 200 ? response.body : false
10
+ end
11
+ end
12
+
13
+ SmsKit.register stub_provider: StubProvider
14
+
15
+ class ProviderTest < MiniTest::Test
16
+
17
+ def test_takes_options
18
+ assert_equal :bar, ExampleProvider.new(foo: :bar).data[:foo]
19
+ end
20
+
21
+ def test_deliver_raises
22
+ assert_raises RuntimeError do
23
+ ExampleProvider.new.deliver
24
+ end
25
+
26
+ assert_raises RuntimeError do
27
+ ExampleProvider.deliver
28
+ end
29
+ end
30
+
31
+ def test_error
32
+ provider = ExampleProvider.new
33
+ provider.instance_variable_set :@error_code, 123
34
+ provider.instance_variable_set :@error_message, 'holy crap'
35
+
36
+ assert_equal 123, provider.error_code
37
+ assert_equal 'holy crap', provider.error_message
38
+ end
39
+
40
+ def test_to_sms
41
+ VCR.use_cassette 'stub_provider/success', match_requests_on: [ :uri, :body ] do
42
+ object = StubSms.new
43
+
44
+ result = StubProvider.deliver object
45
+ assert 123, result.to_i
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,44 @@
1
+ require 'helper'
2
+ require 'sms_kit/providers/sms_trade'
3
+
4
+ SmsKit::SmsTrade.configure do |config|
5
+ config.gateway_key = 'QzXUszXd549ff9f477ka7I'
6
+ config.route = SmsKit::SmsTrade::ROUTE_BASIC
7
+ config.sender = 123456
8
+ end
9
+
10
+ module SmsKit
11
+ class SmsTradeTest < MiniTest::Test
12
+
13
+ def vcr_options
14
+ { match_requests_on: [ VCR.request_matchers.uri_without_params(:key) ] }
15
+ end
16
+
17
+ def text_message
18
+ { text: 'foo bar', to: 12345, debug: 1 }
19
+ end
20
+
21
+ def test_params
22
+ message = SmsTrade.new text_message
23
+ assert_equal text_message[:to], message.params[:to]
24
+ assert_equal SmsTrade.config.sender, message.params[:from]
25
+ assert_equal text_message[:text], message.params[:message]
26
+ assert_equal SmsTrade::ROUTE_BASIC, message.params[:route]
27
+ end
28
+
29
+ def test_deliver
30
+ VCR.use_cassette 'sms_trade/success', vcr_options do
31
+ assert_equal 123456789, SmsTrade.deliver(text_message)
32
+ end
33
+ end
34
+
35
+ def test_error
36
+ VCR.use_cassette 'sms_trade/failure', vcr_options do
37
+ provider = SmsTrade.new
38
+ error = assert_raises(SmsKit::DeliveryError) { provider.deliver }
39
+ assert_match %r{Receiver number not valid \(10\)}, error.message
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,12 @@
1
+ require 'helper'
2
+
3
+ class Foo; end
4
+
5
+ class UtilsTest < MiniTest::Test
6
+
7
+ def test_register
8
+ SmsKit.register foo: Foo
9
+ assert_equal Foo, SmsKit.providers[:foo]
10
+ end
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sms_kit
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.1
5
+ platform: ruby
6
+ authors:
7
+ - glaszig
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 5.9.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 5.9.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: faraday
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.9.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.0
97
+ description: SmsKit offers a streamlined API for sending text messages through any
98
+ supported provider.
99
+ email:
100
+ - glaszig@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - README.md
106
+ - Rakefile
107
+ - lib/sms_kit.rb
108
+ - lib/sms_kit/config.rb
109
+ - lib/sms_kit/delivery.rb
110
+ - lib/sms_kit/http.rb
111
+ - lib/sms_kit/logging.rb
112
+ - lib/sms_kit/provider.rb
113
+ - lib/sms_kit/providers.rb
114
+ - lib/sms_kit/providers/central_ict.rb
115
+ - lib/sms_kit/providers/mobi_web.rb
116
+ - lib/sms_kit/providers/mobimex.rb
117
+ - lib/sms_kit/providers/sms_trade.rb
118
+ - lib/sms_kit/railtie.rb
119
+ - lib/sms_kit/utils.rb
120
+ - lib/sms_kit/version.rb
121
+ - test/central_ict_test.rb
122
+ - test/config_test.rb
123
+ - test/delivery_test.rb
124
+ - test/fixtures/vcr_cassettes/central_ict/failure.yml
125
+ - test/fixtures/vcr_cassettes/central_ict/success.yml
126
+ - test/fixtures/vcr_cassettes/mobi_web/failure.yml
127
+ - test/fixtures/vcr_cassettes/mobi_web/quick_deliver.yml
128
+ - test/fixtures/vcr_cassettes/mobi_web/success.yml
129
+ - test/fixtures/vcr_cassettes/mobimex/failure.yml
130
+ - test/fixtures/vcr_cassettes/mobimex/success.yml
131
+ - test/fixtures/vcr_cassettes/sms_trade/failure.yml
132
+ - test/fixtures/vcr_cassettes/sms_trade/success.yml
133
+ - test/fixtures/vcr_cassettes/stub_provider/success.yml
134
+ - test/helper.rb
135
+ - test/http_test.rb
136
+ - test/logging_test.rb
137
+ - test/mobi_web_test.rb
138
+ - test/mobimex_test.rb
139
+ - test/provider_test.rb
140
+ - test/sms_trade_test.rb
141
+ - test/utils_test.rb
142
+ homepage: https://github.com/jamii-Technologies/sms_kit
143
+ licenses:
144
+ - MIT
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 2.4.5
163
+ signing_key:
164
+ specification_version: 4
165
+ summary: Easily send text messages through SMS over HTTP providers
166
+ test_files:
167
+ - test/central_ict_test.rb
168
+ - test/config_test.rb
169
+ - test/delivery_test.rb
170
+ - test/fixtures/vcr_cassettes/central_ict/failure.yml
171
+ - test/fixtures/vcr_cassettes/central_ict/success.yml
172
+ - test/fixtures/vcr_cassettes/mobi_web/failure.yml
173
+ - test/fixtures/vcr_cassettes/mobi_web/quick_deliver.yml
174
+ - test/fixtures/vcr_cassettes/mobi_web/success.yml
175
+ - test/fixtures/vcr_cassettes/mobimex/failure.yml
176
+ - test/fixtures/vcr_cassettes/mobimex/success.yml
177
+ - test/fixtures/vcr_cassettes/sms_trade/failure.yml
178
+ - test/fixtures/vcr_cassettes/sms_trade/success.yml
179
+ - test/fixtures/vcr_cassettes/stub_provider/success.yml
180
+ - test/helper.rb
181
+ - test/http_test.rb
182
+ - test/logging_test.rb
183
+ - test/mobi_web_test.rb
184
+ - test/mobimex_test.rb
185
+ - test/provider_test.rb
186
+ - test/sms_trade_test.rb
187
+ - test/utils_test.rb