sms_safe 1.0.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 +7 -0
- data/.gitignore +7 -0
- data/.travis.yml +18 -0
- data/Appraisals +19 -0
- data/Gemfile +6 -0
- data/LICENSE +22 -0
- data/README.md +173 -0
- data/Rakefile +15 -0
- data/gemfiles/mail_2_4_4.gemfile +8 -0
- data/gemfiles/mail_2_4_4.gemfile.lock +107 -0
- data/gemfiles/mail_2_5_3.gemfile +8 -0
- data/gemfiles/mail_2_5_3.gemfile.lock +107 -0
- data/gemfiles/mail_2_5_4.gemfile +8 -0
- data/gemfiles/mail_2_5_4.gemfile.lock +106 -0
- data/gemfiles/mail_2_6_1.gemfile +8 -0
- data/gemfiles/mail_2_6_1.gemfile.lock +101 -0
- data/gemfiles/mail_2_6_3.gemfile +8 -0
- data/gemfiles/mail_2_6_3.gemfile.lock +101 -0
- data/lib/sms_safe.rb +10 -0
- data/lib/sms_safe/config.rb +49 -0
- data/lib/sms_safe/hooks.rb +60 -0
- data/lib/sms_safe/interceptor.rb +151 -0
- data/lib/sms_safe/interceptors/action_texter.rb +32 -0
- data/lib/sms_safe/interceptors/nexmo.rb +31 -0
- data/lib/sms_safe/interceptors/twilio.rb +31 -0
- data/lib/sms_safe/message.rb +21 -0
- data/lib/sms_safe/version.rb +3 -0
- data/sms_safe.gemspec +49 -0
- data/test/hooks_test.rb +149 -0
- data/test/interceptor_test.rb +240 -0
- data/test/interceptors/action_texter_test.rb +76 -0
- data/test/interceptors/nexmo_test.rb +73 -0
- data/test/interceptors/twilio_test.rb +72 -0
- data/test/test_helper.rb +88 -0
- metadata +288 -0
data/test/test_helper.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
|
3
|
+
require "simplecov"
|
4
|
+
require "coveralls"
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter "/test/"
|
7
|
+
end
|
8
|
+
|
9
|
+
require "codeclimate-test-reporter"
|
10
|
+
CodeClimate::TestReporter.start
|
11
|
+
|
12
|
+
require "minitest/autorun"
|
13
|
+
require "minitest/reporters"
|
14
|
+
MiniTest::Reporters.use!
|
15
|
+
|
16
|
+
require "shoulda"
|
17
|
+
require "shoulda-context"
|
18
|
+
require "shoulda-matchers"
|
19
|
+
require "mocha/setup"
|
20
|
+
|
21
|
+
# Make the code to be tested easy to load.
|
22
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
23
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
24
|
+
|
25
|
+
require 'active_support/testing/assertions'
|
26
|
+
include ActiveSupport::Testing::Assertions
|
27
|
+
|
28
|
+
require "benchmark"
|
29
|
+
|
30
|
+
require 'mail'
|
31
|
+
Mail.defaults do
|
32
|
+
delivery_method :test
|
33
|
+
end
|
34
|
+
include Mail::Matchers
|
35
|
+
|
36
|
+
require "sms_safe"
|
37
|
+
|
38
|
+
# Add helper methods to use in the tests
|
39
|
+
class MiniTest::Test
|
40
|
+
# Calls Interceptor#intercept_message? with a bunch of numbers, and checks that they return the expected result
|
41
|
+
def check_interception_rules(interceptor, numbers_to_check, expected_result)
|
42
|
+
numbers_to_check.each do |number|
|
43
|
+
message = SmsSafe::Message.new(from: number, to: number, text: "Foo")
|
44
|
+
assert_equal expected_result, interceptor.intercept_message?(message)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Calls process_message for a message that should be intercepted.
|
49
|
+
# Checks that the message received back is identical to the one sent
|
50
|
+
def process_and_assert_identical_message(interceptor, message)
|
51
|
+
original_message = message.clone
|
52
|
+
result = interceptor.process_message(message)
|
53
|
+
refute_nil result
|
54
|
+
assert_equal original_message.class, result.class
|
55
|
+
assert_equal original_message.from, result.from
|
56
|
+
assert_equal original_message.to, result.to
|
57
|
+
assert_equal original_message.text, result.text
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Empty Interceptor that we can use for testing. Does what normal interceptors do,
|
62
|
+
# but it does it with our own internal Message class, no converting or anything fancy.
|
63
|
+
class TestInterceptor < SmsSafe::Interceptor
|
64
|
+
def convert_message(message)
|
65
|
+
message
|
66
|
+
end
|
67
|
+
|
68
|
+
def redirect(message)
|
69
|
+
message.to = redirect_phone_number(message)
|
70
|
+
message.text = redirect_text(message)
|
71
|
+
message
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class Object
|
76
|
+
# Returns a hash with all the instance variables of an object.
|
77
|
+
# Useful for comparing equality of objects that are not designed for that
|
78
|
+
def instance_variables_hash
|
79
|
+
Hash[instance_variables.map { |name| [name, instance_variable_get(name)] } ]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Some sample phone numbers to use in tests
|
84
|
+
DEFAULT_INTERNAL_PHONE_NUMBER = '+447111222222'
|
85
|
+
INTERNAL_PHONE_NUMBERS = ['+447111222221', '+447111222222', '+447111222223']
|
86
|
+
INTERNAL_PHONE_NUMBERS_REGEX = /\+44711122222\d/
|
87
|
+
INTERNAL_PHONE_NUMBERS_PROC = Proc.new { |m| m.to.start_with?('+447111') && ['1','2','3'].include?(m.to[-1]) }
|
88
|
+
EXTERNAL_PHONE_NUMBERS = ["+447222333444", "+13125556666"]
|
metadata
ADDED
@@ -0,0 +1,288 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sms_safe
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Magliola
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mail
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
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: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-reporters
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: shoulda
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mocha
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: action_texter
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: twilio-ruby
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: nexmo
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: appraisal
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: coveralls
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: codeclimate-test-reporter
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
description: |-
|
210
|
+
SmsSafe provides a safety net while you're developing an application that uses ActionTexter
|
211
|
+
or other gems to send SMS. It keeps SMS messages from escaping into the wild.
|
212
|
+
|
213
|
+
Once you've installed and configured this gem, you can rest assures that your app won't send
|
214
|
+
SMS messages to external phone numbers. Instead, messages will be routed to a phone number
|
215
|
+
you specify, converted into e-mails to you, or simply not sent at all.
|
216
|
+
|
217
|
+
SmsSafe can also include an artificial delay to simulate the call to your SMS provider,
|
218
|
+
for realistic load testing.
|
219
|
+
email: dmagliola@crystalgears.com
|
220
|
+
executables: []
|
221
|
+
extensions: []
|
222
|
+
extra_rdoc_files: []
|
223
|
+
files:
|
224
|
+
- ".gitignore"
|
225
|
+
- ".travis.yml"
|
226
|
+
- Appraisals
|
227
|
+
- Gemfile
|
228
|
+
- LICENSE
|
229
|
+
- README.md
|
230
|
+
- Rakefile
|
231
|
+
- gemfiles/mail_2_4_4.gemfile
|
232
|
+
- gemfiles/mail_2_4_4.gemfile.lock
|
233
|
+
- gemfiles/mail_2_5_3.gemfile
|
234
|
+
- gemfiles/mail_2_5_3.gemfile.lock
|
235
|
+
- gemfiles/mail_2_5_4.gemfile
|
236
|
+
- gemfiles/mail_2_5_4.gemfile.lock
|
237
|
+
- gemfiles/mail_2_6_1.gemfile
|
238
|
+
- gemfiles/mail_2_6_1.gemfile.lock
|
239
|
+
- gemfiles/mail_2_6_3.gemfile
|
240
|
+
- gemfiles/mail_2_6_3.gemfile.lock
|
241
|
+
- lib/sms_safe.rb
|
242
|
+
- lib/sms_safe/config.rb
|
243
|
+
- lib/sms_safe/hooks.rb
|
244
|
+
- lib/sms_safe/interceptor.rb
|
245
|
+
- lib/sms_safe/interceptors/action_texter.rb
|
246
|
+
- lib/sms_safe/interceptors/nexmo.rb
|
247
|
+
- lib/sms_safe/interceptors/twilio.rb
|
248
|
+
- lib/sms_safe/message.rb
|
249
|
+
- lib/sms_safe/version.rb
|
250
|
+
- sms_safe.gemspec
|
251
|
+
- test/hooks_test.rb
|
252
|
+
- test/interceptor_test.rb
|
253
|
+
- test/interceptors/action_texter_test.rb
|
254
|
+
- test/interceptors/nexmo_test.rb
|
255
|
+
- test/interceptors/twilio_test.rb
|
256
|
+
- test/test_helper.rb
|
257
|
+
homepage: https://github.com/dmagliola/sms_safe
|
258
|
+
licenses:
|
259
|
+
- MIT
|
260
|
+
metadata: {}
|
261
|
+
post_install_message:
|
262
|
+
rdoc_options: []
|
263
|
+
require_paths:
|
264
|
+
- lib
|
265
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
266
|
+
requirements:
|
267
|
+
- - ">="
|
268
|
+
- !ruby/object:Gem::Version
|
269
|
+
version: 1.9.3
|
270
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
271
|
+
requirements:
|
272
|
+
- - ">="
|
273
|
+
- !ruby/object:Gem::Version
|
274
|
+
version: '0'
|
275
|
+
requirements: []
|
276
|
+
rubyforge_project:
|
277
|
+
rubygems_version: 2.4.3
|
278
|
+
signing_key:
|
279
|
+
specification_version: 4
|
280
|
+
summary: Keep your SMS messages from escaping into the wild during development.
|
281
|
+
test_files:
|
282
|
+
- test/hooks_test.rb
|
283
|
+
- test/interceptor_test.rb
|
284
|
+
- test/interceptors/action_texter_test.rb
|
285
|
+
- test/interceptors/nexmo_test.rb
|
286
|
+
- test/interceptors/twilio_test.rb
|
287
|
+
- test/test_helper.rb
|
288
|
+
has_rdoc:
|