Module: Devise::Models::Invitable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/devise_invitable/model.rb
Overview
Invitable is responsible for sending invitation emails. When an invitation is sent to an email address, an account is created for it. Invitation email contains a link allowing the user to accept the invitation by setting a password (as reset password from Devise’s recoverable module).
Configuration:
invite_for: The period the generated invitation token is valid, after
this period, the invited resource won't be able to accept the invitation.
When invite_for is 0 (the default), the invitation won't expire.
Examples:
User.find(1).invited_to_sign_up? # => true/false
User.invite!(:email => '[email protected]') # => send invitation
User.accept_invitation!(:invitation_token => '...') # => accept invitation with a token
User.find(1).accept_invitation! # => accept invitation
User.find(1).invite! # => reset invitation status and send invitation again
Defined Under Namespace
Modules: ClassMethods
Instance Attribute Summary collapse
-
#completing_invite ⇒ Object
Returns the value of attribute completing_invite.
-
#raw_invitation_token ⇒ Object
readonly
Returns the value of attribute raw_invitation_token.
-
#skip_invitation ⇒ Object
Returns the value of attribute skip_invitation.
Class Method Summary collapse
Instance Method Summary collapse
-
#accept_invitation ⇒ Object
Accept an invitation by clearing invitation token and and setting invitation_accepted_at.
-
#accept_invitation! ⇒ Object
Accept an invitation by clearing invitation token and and setting invitation_accepted_at Saves the model and confirms it if model is confirmable, running invitation_accepted callbacks.
-
#accepted_or_not_invited? ⇒ Boolean
Verifies whether a user has accepted an invitation (or is accepting it), or was never invited.
-
#active_for_authentication? ⇒ Boolean
Only verify password when is not invited.
- #after_password_reset ⇒ Object
- #clear_errors_on_valid_keys ⇒ Object
- #confirmation_required_for_invited? ⇒ Boolean
-
#deliver_invitation ⇒ Object
Deliver the invitation email.
-
#encrypted_invitation_token ⇒ Object
provide alias to the encrypted invitation_token stored by devise.
- #inactive_message ⇒ Object
-
#invitation_accepted? ⇒ Boolean
Verifies whether a user accepted an invitation (or is accepting it).
-
#invite!(invited_by = nil) {|_self| ... } ⇒ Object
Reset invitation token and send invitation again.
-
#invited_to_sign_up? ⇒ Boolean
Verifies whether a user has been invited or not.
-
#valid_invitation? ⇒ Boolean
Verify whether a invitation is active or not.
Instance Attribute Details
#completing_invite ⇒ Object
Returns the value of attribute completing_invite.
27 28 29 |
# File 'lib/devise_invitable/model.rb', line 27 def completing_invite @completing_invite end |
#raw_invitation_token ⇒ Object (readonly)
Returns the value of attribute raw_invitation_token.
28 29 30 |
# File 'lib/devise_invitable/model.rb', line 28 def raw_invitation_token @raw_invitation_token end |
#skip_invitation ⇒ Object
Returns the value of attribute skip_invitation.
26 27 28 |
# File 'lib/devise_invitable/model.rb', line 26 def skip_invitation @skip_invitation end |
Class Method Details
.required_fields(klass) ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/devise_invitable/model.rb', line 62 def self.required_fields(klass) fields = [:invitation_token, :invitation_created_at, :invitation_sent_at, :invitation_accepted_at, :invitation_limit, :invited_by_id, :invited_by_type] fields << :invitations_count if defined?(ActiveRecord) && self < ActiveRecord::Base fields -= [:invited_by_type] if Devise.invited_by_class_name fields end |
Instance Method Details
#accept_invitation ⇒ Object
Accept an invitation by clearing invitation token and and setting invitation_accepted_at
71 72 73 74 |
# File 'lib/devise_invitable/model.rb', line 71 def accept_invitation self.invitation_accepted_at = Time.now.utc self.invitation_token = nil end |
#accept_invitation! ⇒ Object
Accept an invitation by clearing invitation token and and setting invitation_accepted_at Saves the model and confirms it if model is confirmable, running invitation_accepted callbacks
78 79 80 81 82 83 84 85 86 |
# File 'lib/devise_invitable/model.rb', line 78 def accept_invitation! if self.invited_to_sign_up? && self.valid? run_callbacks :invitation_accepted do self.accept_invitation self.confirmed_at = self.invitation_accepted_at if self.respond_to?(:confirmed_at) self.save(:validate => false) end end end |
#accepted_or_not_invited? ⇒ Boolean
Verifies whether a user has accepted an invitation (or is accepting it), or was never invited
99 100 101 |
# File 'lib/devise_invitable/model.rb', line 99 def accepted_or_not_invited? invitation_accepted? || !invited_to_sign_up? end |
#active_for_authentication? ⇒ Boolean
Only verify password when is not invited
137 138 139 |
# File 'lib/devise_invitable/model.rb', line 137 def active_for_authentication? super unless invited_to_sign_up? end |
#after_password_reset ⇒ Object
145 146 147 148 |
# File 'lib/devise_invitable/model.rb', line 145 def after_password_reset super accept_invitation! if invited_to_sign_up? end |
#clear_errors_on_valid_keys ⇒ Object
150 151 152 153 154 |
# File 'lib/devise_invitable/model.rb', line 150 def clear_errors_on_valid_keys self.class.invite_key.each do |key, value| self.errors.delete(key) if value === self.send(key) end end |
#confirmation_required_for_invited? ⇒ Boolean
168 169 170 |
# File 'lib/devise_invitable/model.rb', line 168 def confirmation_required_for_invited? respond_to?(:confirmation_required?, true) && confirmation_required? end |
#deliver_invitation ⇒ Object
Deliver the invitation email
157 158 159 160 161 |
# File 'lib/devise_invitable/model.rb', line 157 def deliver_invitation generate_invitation_token! unless @raw_invitation_token self.update_attribute :invitation_sent_at, Time.now.utc unless self.invitation_sent_at send_devise_notification(:invitation_instructions, @raw_invitation_token) end |
#encrypted_invitation_token ⇒ Object
provide alias to the encrypted invitation_token stored by devise
164 165 166 |
# File 'lib/devise_invitable/model.rb', line 164 def encrypted_invitation_token self.invitation_token end |
#inactive_message ⇒ Object
141 142 143 |
# File 'lib/devise_invitable/model.rb', line 141 def invited_to_sign_up? ? :invited : super end |
#invitation_accepted? ⇒ Boolean
Verifies whether a user accepted an invitation (or is accepting it)
94 95 96 |
# File 'lib/devise_invitable/model.rb', line 94 def invitation_accepted? invitation_accepted_at.present? end |
#invite!(invited_by = nil) {|_self| ... } ⇒ Object
Reset invitation token and send invitation again
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/devise_invitable/model.rb', line 104 def invite!(invited_by = nil) was_invited = invited_to_sign_up? # Required to workaround confirmable model's confirmation_required? method # being implemented to check for non-nil value of confirmed_at if self.new_record? && self.respond_to?(:confirmation_required?, true) def self.confirmation_required?; false; end end yield self if block_given? generate_invitation_token if self.invitation_token.nil? || (!skip_invitation || @raw_invitation_token.nil?) self.invitation_created_at = Time.now.utc self.invitation_sent_at = self.invitation_created_at unless skip_invitation self.invited_by = invited_by if invited_by # Call these before_validate methods since we aren't validating on save self.downcase_keys if self.new_record? && self.respond_to?(:downcase_keys, true) self.strip_whitespace if self.new_record? && self.respond_to?(:strip_whitespace, true) if save(:validate => false) self.invited_by.decrement_invitation_limit! if !was_invited and self.invited_by.present? deliver_invitation unless skip_invitation end end |
#invited_to_sign_up? ⇒ Boolean
Verifies whether a user has been invited or not
89 90 91 |
# File 'lib/devise_invitable/model.rb', line 89 def invited_to_sign_up? persisted? && invitation_token.present? end |
#valid_invitation? ⇒ Boolean
Verify whether a invitation is active or not. If the user has been invited, we need to calculate if the invitation time has not expired for this user, in other words, if the invitation is still valid.
132 133 134 |
# File 'lib/devise_invitable/model.rb', line 132 def valid_invitation? invited_to_sign_up? && invitation_period_valid? end |