Module: RailsJwtAuth::Invitable

Extended by:
ActiveSupport::Concern
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



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

def self.included(base)
  base.extend ClassMethods
  base.class_eval do
    if 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
      field :invitation_created_at,    type: Time
    end
  end
end

Instance Method Details

#accept_invitationObject

Accept an invitation by clearing token and setting invitation_accepted_at



50
51
52
53
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 50

def accept_invitation
  self.invitation_accepted_at = Time.now.utc
  self.invitation_token = nil
end

#accept_invitation!Object



55
56
57
58
59
60
61
62
63
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 55

def accept_invitation!
  return unless invited?
  if valid_invitation?
    accept_invitation
    self.confirmed_at = Time.now.utc if respond_to? :confirmed_at
  else
    errors.add(:invitation_token, :invalid)
  end
end

#accepted_invitation?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 109

def accepted_invitation?
  invitation_token.nil? && invitation_accepted_at.present?
end

#generate_invitation_token!Object



101
102
103
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 101

def generate_invitation_token!
  generate_invitation_token && save(validate: false)
end

#invite!Object

rubocop:disable Metrics/AbcSize



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 66

def invite!
  self.invitation_created_at = Time.now.utc if new_record?

  unless password || password_digest
    passw = SecureRandom.base58(16)
    self.password = passw
    self.password_confirmation = passw
  end

  valid?

  # Users that are registered and were not invited are not reinvitable
  if !new_record? && !invited?
    errors.add(RailsJwtAuth.auth_field_name, :taken)
  end

  # Users that have already accepted an invitation are not reinvitable
  if !new_record? && invited? && invitation_accepted_at.present?
    errors.add(RailsJwtAuth.auth_field_name, :taken)
  end

  return self unless errors.empty?

  generate_invitation_token if invitation_token.nil?
  self.invitation_sent_at = Time.now.utc

  send_invitation_mail if save(validate: false)
  self
end

#invited?Boolean

rubocop:enable Metrics/AbcSize

Returns:

  • (Boolean)


97
98
99
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 97

def invited?
  (persisted? && invitation_token.present?)
end

#valid_invitation?Boolean

Returns:

  • (Boolean)


105
106
107
# File 'app/models/concerns/rails_jwt_auth/invitable.rb', line 105

def valid_invitation?
  invited? && invitation_period_valid?
end