Class: SpreeCmCommissioner::UserPinCodeAuthenticator

Inherits:
BaseInteractor show all
Defined in:
app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb

Instance Method Summary collapse

Instance Method Details

#assign_role(user) ⇒ Object



45
46
47
48
49
50
51
# File 'app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb', line 45

def assign_role(user)
  role = Spree::Role.find_by(name: context.role)
  return unless role

  user.assigned_roles = [role.name]
  user.spree_roles << role
end

#callObject



3
4
5
6
7
# File 'app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb', line 3

def call
  validate_pin_code!
  register_user!
  mark_pin_code_expired!
end

#mark_pin_code_expired!Object



53
54
55
# File 'app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb', line 53

def mark_pin_code_expired!
  SpreeCmCommissioner::PinCode.mark_expired!(context.pin_code_token)
end

#register_user!Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb', line 29

def register_user!
  sanitize_contact
  fields = i[first_name last_name password password_confirmation phone_number email gender dob]
  create_options = context.to_h.slice(*fields)

  user = Spree::User.new(create_options)
  user.confirmed_at = Time.zone.now
  assign_role(user) if context.role.present?

  if user.save
    context.user = user
  else
    context.fail!(message: user.errors.full_messages.join('\n'))
  end
end

#sanitize_contactObject



9
10
11
# File 'app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb', line 9

def sanitize_contact
  context.email = nil if context.phone_number.present?
end

#validate_pin_code!Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb', line 13

def validate_pin_code!
  options = context.to_h.slice(:email, :phone_number)

  options[:pin_code] = context.pin_code
  options[:pin_code_token] = context.pin_code_token
  options[:id] = context.pin_code_token
  options[:type] = 'SpreeCmCommissioner::PinCodeRegistration'
  options[:long_life_pin_code] = true

  pin_code_checker = SpreeCmCommissioner::PinCodeChecker.call(options)

  return if pin_code_checker.success?

  context.fail!(message: pin_code_checker.message)
end