twilio_contactable 0.8.5 → 0.8.7

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.5
1
+ 0.8.7
data/lib/contactable.rb CHANGED
@@ -89,14 +89,7 @@ module TwilioContactable
89
89
  return false if _TC_phone_number.blank?
90
90
 
91
91
  format_phone_number
92
- confirmation_code =
93
- if sms_confirmation_attempted &&
94
- sms_confirmation_code &&
95
- sms_confirmation_attempted > Time.now.utc - 60*5
96
- sms_confirmation_code
97
- else
98
- TwilioContactable.generate_confirmation_code
99
- end
92
+ confirmation_code = TwilioContactable.confirmation_code(self, :sms)
100
93
 
101
94
  # Use this class' confirmation_message method if it
102
95
  # exists, otherwise use the generic message
@@ -112,9 +105,9 @@ module TwilioContactable
112
105
 
113
106
  if response.success?
114
107
  update_twilio_contactable_sms_confirmation confirmation_code
115
- else
116
- false
117
108
  end
109
+
110
+ response
118
111
  end
119
112
 
120
113
  # Begins a phone call to the user where they'll need to type
@@ -125,22 +118,15 @@ module TwilioContactable
125
118
  return false if _TC_phone_number.blank?
126
119
 
127
120
  format_phone_number
128
- confirmation_code =
129
- if voice_confirmation_attempted &&
130
- voice_confirmation_code &&
131
- voice_confirmation_attempted > Time.now.utc - 60*5
132
- voice_confirmation_code
133
- else
134
- TwilioContactable.generate_confirmation_code
135
- end
121
+ confirmation_code = TwilioContactable.confirmation_code(self, :voice)
136
122
 
137
123
  response = TwilioContactable::Gateway.initiate_voice_call(self, _TC_formatted_phone_number)
138
124
 
139
125
  if response.success?
140
126
  update_twilio_contactable_voice_confirmation confirmation_code
141
- else
142
- false
143
127
  end
128
+
129
+ response
144
130
  end
145
131
 
146
132
  # Compares user-provided code with the stored confirmation
data/lib/gateway.rb CHANGED
@@ -17,16 +17,20 @@ module TwilioContactable
17
17
  end
18
18
  end
19
19
  class Response
20
- def initialize(*args)
21
- @options = args.last
20
+ def initialize(response = nil)
21
+ @response = response
22
22
  end
23
-
23
+ end
24
+ class Success < Response
25
+ def success?
26
+ true
27
+ end
28
+ end
29
+ class Error < Response
24
30
  def success?
25
- :success == @options[:status]
31
+ false
26
32
  end
27
33
  end
28
- Success = Response.new(:status => :success)
29
- Error = Response.new(:status => :error)
30
34
 
31
35
  API_VERSION = '2010-04-01'
32
36
 
@@ -88,8 +92,8 @@ module TwilioContactable
88
92
  response = post service, data
89
93
 
90
94
  Net::HTTPCreated == response.code_type ?
91
- TwilioContactable::Gateway::Success :
92
- TwilioContactable::Gateway::Error
95
+ TwilioContactable::Gateway::Success.new(response) :
96
+ TwilioContactable::Gateway::Error.new(response)
93
97
  end
94
98
 
95
99
  def post(service, data = {})
@@ -1,4 +1,5 @@
1
1
  module TwilioContactable
2
+ CONFIRMATION_CODE_LENGTH = 4
2
3
  class << self
3
4
  def numerize(numberish)
4
5
  numberish.to_s.scan(/\d+/).join
@@ -20,9 +21,21 @@ module TwilioContactable
20
21
  "Code: #{confirmation_code} Enter code on web to verify phone. Msg&data rates may apply. Freq set by u. T&C & support on web site. Txt HELP for help"
21
22
  end
22
23
 
24
+ def confirmation_code(record, type)
25
+ attempted = record.send("_TC_#{type}_confirmation_attempted")
26
+ current_code = record.send("_TC_#{type}_confirmation_code")
27
+ if !attempted.blank? &&
28
+ attempted > Time.now.utc - 60*5 &&
29
+ current_code.to_s.size == CONFIRMATION_CODE_LENGTH
30
+ current_code
31
+ else
32
+ generate_confirmation_code
33
+ end
34
+ end
35
+
23
36
  def generate_confirmation_code
24
37
  nums = (0..9).to_a
25
- (0...4).collect { nums[Kernel.rand(nums.length)] }.join
38
+ (0...CONFIRMATION_CODE_LENGTH).collect { nums[Kernel.rand(nums.length)] }.join
26
39
  end
27
40
  end
28
41
  end
@@ -2,8 +2,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
2
 
3
3
  class TwilioContactableContactableTest < ActiveSupport::TestCase
4
4
 
5
- Success = TwilioContactable::Gateway::Response.new(:status => :success)
6
- Error = TwilioContactable::Gateway::Response.new(:status => :error)
5
+ Success = TwilioContactable::Gateway::Success.new
6
+ Error = TwilioContactable::Gateway::Error.new
7
7
 
8
8
  context "configuration" do
9
9
  TwilioContactable::Contactable::Attributes.each do |attr|
@@ -98,7 +98,8 @@ class TwilioContactableContactableTest < ActiveSupport::TestCase
98
98
  }
99
99
  should "work" do assert @worked end
100
100
  should "save confirmation number in proper attribute" do
101
- assert @user._TC_sms_confirmation_code
101
+ assert @user._TC_sms_confirmation_code.length ==
102
+ TwilioContactable::CONFIRMATION_CODE_LENGTH
102
103
  end
103
104
  should "set confirmation attempted time" do
104
105
  assert @user._TC_sms_confirmation_attempted > 3.minutes.ago
@@ -151,7 +152,7 @@ class TwilioContactableContactableTest < ActiveSupport::TestCase
151
152
  end
152
153
  end
153
154
  end
154
- context "confirming phone number with a custom short code" do
155
+ context "with a custom short code" do
155
156
  context "with expectations" do
156
157
  setup {
157
158
  message = "long message blah blah MYCODE blah"
@@ -171,12 +172,14 @@ class TwilioContactableContactableTest < ActiveSupport::TestCase
171
172
  end
172
173
  end
173
174
  end
174
- context "confirming phone number when the confirmation fails for some reason" do
175
+ context "when the confirmation fails for some reason" do
175
176
  setup {
176
177
  TwilioContactable::Gateway.stubs(:deliver).returns(Error)
177
- @worked = @user.send_sms_confirmation!
178
+ @response = @user.send_sms_confirmation!
178
179
  }
179
- should "not work" do assert !@worked end
180
+ should "not work" do
181
+ assert !@response.success?
182
+ end
180
183
  should "not save confirmation number" do
181
184
  assert @user._TC_sms_confirmation_code.blank?
182
185
  end
@@ -192,11 +195,12 @@ class TwilioContactableContactableTest < ActiveSupport::TestCase
192
195
  class TestController < ActionController::Base
193
196
  include TwilioContactable::Controller
194
197
  twilio_contactable User
195
- self
196
198
  end
197
- @worked = @user.send_voice_confirmation!
199
+ @response = @user.send_voice_confirmation!
198
200
  }
199
- should "work" do assert @worked end
201
+ should "work" do
202
+ assert @response.success?
203
+ end
200
204
  should "save confirmation number in proper attribute" do
201
205
  assert @user._TC_voice_confirmation_code
202
206
  end
@@ -210,7 +214,9 @@ class TwilioContactableContactableTest < ActiveSupport::TestCase
210
214
  assert !@user.voice_confirmed?
211
215
  end
212
216
  context "calling voice_confirm_with(right_code)" do
213
- setup { @user.voice_confirm_with(@user._TC_voice_confirmation_code) }
217
+ setup {
218
+ @worked = @user.voice_confirm_with(@user._TC_voice_confirmation_code)
219
+ }
214
220
  should "work" do
215
221
  assert @worked
216
222
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{twilio_contactable}
8
- s.version = "0.8.5"
8
+ s.version = "0.8.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jack Danger Canty"]
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twilio_contactable
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 49
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 8
8
- - 5
9
- version: 0.8.5
9
+ - 7
10
+ version: 0.8.7
10
11
  platform: ruby
11
12
  authors:
12
13
  - Jack Danger Canty
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ">="
27
28
  - !ruby/object:Gem::Version
29
+ hash: 5
28
30
  segments:
29
31
  - 2
30
32
  - 0
@@ -40,6 +42,7 @@ dependencies:
40
42
  requirements:
41
43
  - - ">="
42
44
  - !ruby/object:Gem::Version
45
+ hash: 3
43
46
  segments:
44
47
  - 0
45
48
  version: "0"
@@ -53,6 +56,7 @@ dependencies:
53
56
  requirements:
54
57
  - - ">="
55
58
  - !ruby/object:Gem::Version
59
+ hash: 3
56
60
  segments:
57
61
  - 0
58
62
  version: "0"
@@ -98,6 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
102
  requirements:
99
103
  - - ">="
100
104
  - !ruby/object:Gem::Version
105
+ hash: 3
101
106
  segments:
102
107
  - 0
103
108
  version: "0"
@@ -106,6 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
111
  requirements:
107
112
  - - ">="
108
113
  - !ruby/object:Gem::Version
114
+ hash: 3
109
115
  segments:
110
116
  - 0
111
117
  version: "0"