Module: RailsJwtAuth::Invitable

Defined in:
app/models/concerns/rails_jwt_auth/invitable.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 3

def self.included(base)
  base.extend ClassMethods
  base.class_eval do
    if defined?(Mongoid) && ancestors.include?(Mongoid::Document)
      # include GlobalID::Identification to use deliver_later method
      # http://edgeguides.rubyonrails.org/active_job_basics.html#globalid
      include GlobalID::Identification if RailsJwtAuth.deliver_later

      field :invitation_token,         type: String
      field :invitation_sent_at,       type: Time
      field :invitation_accepted_at,   type: Time
    end
  end
end

Instance Method Details

#accept_invitation(params) ⇒ Object

Finishes invitation process setting user password



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 54

def accept_invitation(params)
  return false unless invitation_token.present?

  self.assign_attributes(params)

  valid?
  errors.add(:password, :blank) if params[:password].blank?
  errors.add(:invitation_token, :expired) if expired_invitation_token?

  return false unless errors.empty?

  self.invitation_accepted_at = Time.current
  self.invitation_token = nil
  self.invitation_sent_at = nil
  self.confirmed_at = Time.current if respond_to?(:confirmed_at) && confirmed_at.nil?
  save
end

#expired_invitation_token?Boolean

Returns:

  • (Boolean)


83
84
85
86
87
88
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 83

def expired_invitation_token?
  expiration_time = RailsJwtAuth.invitation_expiration_time
  return false if expiration_time.to_i.zero?

  invitation_sent_at && invitation_sent_at < expiration_time.ago
end

#inviteObject

Sends an invitation to user If the user has pending invitation, new one is sent



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 35

def invite
  if persisted? && !invitation_token
    errors.add(RailsJwtAuth.auth_field_name, :registered)
    return false
  end

  @inviting = true
  self.invitation_token = generate_invitation_token
  self.invitation_sent_at = Time.current

  return false unless save_without_password

  RailsJwtAuth.send_email(:invitation_instructions, self)
  true
ensure
  @inviting = false
end

#inviting?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 72

def inviting?
  @inviting || false
end

#valid_for_invite?Boolean

Returns:

  • (Boolean)


76
77
78
79
80
81
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 76

def valid_for_invite?
  @inviting = true
  valid_without_password?
ensure
  @inviting = false
end