Class: Gringotts::Vault
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Gringotts::Vault
- Defined in:
- app/models/gringotts/vault.rb
Constant Summary collapse
- SESSION_FRESHNESS_KEY =
:gringotts_expires_at
Class Method Summary collapse
Instance Method Summary collapse
- #confirm! ⇒ Object
- #confirmed? ⇒ Boolean
- #deliver_new_code! ⇒ Object
- #last_4 ⇒ Object
- #lock! ⇒ Object
- #locked? ⇒ Boolean
- #new_code ⇒ Object
- #opted_in? ⇒ Boolean
- #phone_number ⇒ Object
- #prompt_shown! ⇒ Object
- #recent_code ⇒ Object
- #should_lock? ⇒ Boolean
- #show_prompt? ⇒ Boolean
- #signed_up? ⇒ Boolean
- #unconfirm! ⇒ Object
- #unlock! ⇒ Object
- #verified?(session) ⇒ Boolean
- #verify!(session) ⇒ Object
Class Method Details
.for_owner(obj) ⇒ Object
15 16 17 18 19 |
# File 'app/models/gringotts/vault.rb', line 15 def self.for_owner(obj) # this is not quite as pretty as the new rails4 way, but we want it to be backwards compatible without a separate branch conditions = { owner_id: obj.id, owner_type: obj.class.name } return Gringotts::Vault.where(conditions).first || Gringotts::Vault.create(conditions) end |
Instance Method Details
#confirm! ⇒ Object
41 42 43 |
# File 'app/models/gringotts/vault.rb', line 41 def confirm! self.update_attributes!(confirmed_at: Time.now) unless self.confirmed? end |
#confirmed? ⇒ Boolean
37 38 39 |
# File 'app/models/gringotts/vault.rb', line 37 def confirmed? self.confirmed_at.present? end |
#deliver_new_code! ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'app/models/gringotts/vault.rb', line 68 def deliver_new_code! code = self.new_code # I'm not proud of this but... # You have to 'create' here, not 'new' # Because delivery uses before_validation callbacks, instead of after_initialize # That's a whole 'nother can of worms... # ...just FYI return Delivery.create(vault: self).deliver! end |
#last_4 ⇒ Object
82 83 84 |
# File 'app/models/gringotts/vault.rb', line 82 def last_4 self.phone_number.present? ? self.phone_number[-4..-1] : nil end |
#lock! ⇒ Object
91 92 93 |
# File 'app/models/gringotts/vault.rb', line 91 def lock! self.update_attributes(locked_at: Time.now) end |
#locked? ⇒ Boolean
95 96 97 |
# File 'app/models/gringotts/vault.rb', line 95 def locked? return self.locked_at.present? && self.locked_at > Gringotts::AttemptValidator::LOCKOUT_PERIOD.ago end |
#new_code ⇒ Object
63 64 65 66 |
# File 'app/models/gringotts/vault.rb', line 63 def new_code self.codes << Gringotts::Code.create({vault: self}) return self.recent_code end |
#opted_in? ⇒ Boolean
25 26 27 |
# File 'app/models/gringotts/vault.rb', line 25 def opted_in? return self.signed_up? && self.confirmed? end |
#phone_number ⇒ Object
78 79 80 |
# File 'app/models/gringotts/vault.rb', line 78 def phone_number return self.settings.present? ? self.settings.phone_number : nil end |
#prompt_shown! ⇒ Object
33 34 35 |
# File 'app/models/gringotts/vault.rb', line 33 def prompt_shown! self.update_attributes!(prompt_seen_at: Time.now) end |
#recent_code ⇒ Object
57 58 59 60 61 |
# File 'app/models/gringotts/vault.rb', line 57 def recent_code # generate a new code if there is no previous code! # aka, should never have a null code return self.codes.last || self.new_code end |
#should_lock? ⇒ Boolean
86 87 88 89 |
# File 'app/models/gringotts/vault.rb', line 86 def should_lock? return false unless self.confirmed? self.attempts.unsuccessful.since(Time.now - Gringotts::AttemptValidator::LOCKOUT_PERIOD).count >= Gringotts::AttemptValidator::MAX_UNSUCCESSFUL_ATTEMPTS end |
#show_prompt? ⇒ Boolean
29 30 31 |
# File 'app/models/gringotts/vault.rb', line 29 def show_prompt? return self.prompt_seen_at.nil? end |
#signed_up? ⇒ Boolean
21 22 23 |
# File 'app/models/gringotts/vault.rb', line 21 def signed_up? return self.settings.present? && self.settings.phone_number.present? end |
#unconfirm! ⇒ Object
45 46 47 |
# File 'app/models/gringotts/vault.rb', line 45 def unconfirm! self.update_attributes!(confirmed_at: nil) end |
#unlock! ⇒ Object
99 100 101 |
# File 'app/models/gringotts/vault.rb', line 99 def unlock! self.update_attributes(locked_at: nil) end |
#verified?(session) ⇒ Boolean
49 50 51 |
# File 'app/models/gringotts/vault.rb', line 49 def verified?(session) return session[SESSION_FRESHNESS_KEY].present? && session[SESSION_FRESHNESS_KEY] >= Time.now end |
#verify!(session) ⇒ Object
53 54 55 |
# File 'app/models/gringotts/vault.rb', line 53 def verify!(session) session[SESSION_FRESHNESS_KEY] = (Time.now + 30.days) end |