Module: Biovision::Components::Users::Codes

Included in:
Biovision::Components::UsersComponent
Defined in:
app/lib/biovision/components/users/codes.rb

Overview

Handling user-related codes

Instance Method Summary collapse

Instance Method Details

#activate_email_confirmation(code) ⇒ Object

Parameters:



74
75
76
77
78
# File 'app/lib/biovision/components/users/codes.rb', line 74

def activate_email_confirmation(code)
  return unless valid_email_confirmation?(code)

  code.user.update(email_confirmed: true)
end

#activate_invitation(code, user) ⇒ Object

Parameters:



82
83
84
85
86
87
88
89
# File 'app/lib/biovision/components/users/codes.rb', line 82

def activate_invitation(code, user)
  return if code.nil? || !code.active? || user.nil?

  code.decrement!(:quantity)
  user.update(inviter_id: code.user_id)

  register_metric(self.class::METRIC_USED_INVITATION)
end

#create_email_confirmation(user) ⇒ Object

Parameters:



36
37
38
39
40
41
42
# File 'app/lib/biovision/components/users/codes.rb', line 36

def create_email_confirmation(user)
  code_type = self.class::CODE_EMAIL_CONFIRMATION
  code = @component.codes.new(user: user, code_type: code_type)
  code.data['email'] = user.email
  code.save
  code
end

#create_invitations_for_user(user) ⇒ Object

Parameters:



92
93
94
95
96
97
98
99
100
# File 'app/lib/biovision/components/users/codes.rb', line 92

def create_invitations_for_user(user)
  quantity = settings[self.class::SETTING_INVITE_COUNT].to_i

  return if quantity < 1

  code = @component.codes.new(user: user, quantity: quantity)
  code.code_type = self.class::CODE_INVITATION
  code.save
end

#create_phone_confirmation(user) ⇒ Object

Parameters:



45
46
47
48
49
50
51
# File 'app/lib/biovision/components/users/codes.rb', line 45

def create_phone_confirmation(user)
  code_type = self.class::CODE_PHONE_CONFIRMATION
  code = @component.codes.new(user: user, code_type: code_type)
  code.data['phone'] = user.phone
  code.save
  code
end

#send_email_confirmation(user) ⇒ Object

Parameters:



54
55
56
57
58
59
60
61
# File 'app/lib/biovision/components/users/codes.rb', line 54

def send_email_confirmation(user)
  code_type = self.class::CODE_EMAIL_CONFIRMATION
  codes = @component.codes.active.owned_by(user).with_type(code_type)
  code = codes.find_by("data->>'email' = ?", user.email)
  code = create_email_confirmation(user) if code.nil?

  CodeSender.email(code.id).deliver_later
end

#send_phone_confirmation(user) ⇒ Object

Parameters:



64
65
66
67
68
69
70
71
# File 'app/lib/biovision/components/users/codes.rb', line 64

def send_phone_confirmation(user)
  code_type = self.class::CODE_PHONE_CONFIRMATION
  codes = @component.codes.active.owned_by(user).with_type(code_type)
  code = codes.find_by("data->>'phone' = ?", user.email)
  code = create_phone_confirmation(user) if code.nil?

  SendPhoneConfirmationJob.perform_later(code.id)
end

#valid_code?(code, code_type) ⇒ Boolean

Parameters:

  • code (Code)
  • code_type (String)

Returns:

  • (Boolean)


10
11
12
13
14
# File 'app/lib/biovision/components/users/codes.rb', line 10

def valid_code?(code, code_type)
  return false if code.nil? || code.biovision_component != @component

  code.type?(code_type) && code.active?
end

#valid_email_confirmation?(code) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


17
18
19
20
21
22
23
# File 'app/lib/biovision/components/users/codes.rb', line 17

def valid_email_confirmation?(code)
  return false if code.nil? || code.biovision_component != @component
  return false unless code.active?

  code_type = self.class::CODE_EMAIL_CONFIRMATION
  code.type?(code_type) && code.data['email'] == user.email
end

#valid_invitation?(code) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


26
27
28
# File 'app/lib/biovision/components/users/codes.rb', line 26

def valid_invitation?(code)
  valid_code?(code, self.class::CODE_INVITATION)
end

#valid_recovery?(code) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


31
32
33
# File 'app/lib/biovision/components/users/codes.rb', line 31

def valid_recovery?(code)
  valid_code?(code, self.class::CODE_RECOVERY)
end