Class: SpreeCmCommissioner::Guests::Update

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/guests/update.rb

Overview

Updates guest records with dynamic fields.

Per-field replace semantics: for every dynamic_field_id mentioned in the payload, the submitted rows are the complete set of answers for that field; unmentioned fields are untouched. This still handles checkbox deselection (omit that option's row) without a submit containing only e.g. pre_registration fields wiping post_registration answers.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#guestObject (readonly)

Returns the value of attribute guest.



12
13
14
# File 'app/services/spree_cm_commissioner/guests/update.rb', line 12

def guest
  @guest
end

#guest_paramsObject (readonly)

Returns the value of attribute guest_params.



12
13
14
# File 'app/services/spree_cm_commissioner/guests/update.rb', line 12

def guest_params
  @guest_params
end

Instance Method Details

#call(guest:, guest_params:) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/services/spree_cm_commissioner/guests/update.rb', line 14

def call(guest:, guest_params:)
  @guest = guest
  @guest_params = guest_params

  ActiveRecord::Base.transaction do
    replace_dynamic_fields(guest_params[:guest_dynamic_fields_attributes]) if guest_params[:guest_dynamic_fields_attributes]
    guest.update!(guest_params.except(:guest_dynamic_fields_attributes))
  end

  success(guest: guest)
rescue ActiveRecord::RecordInvalid => e
  failure(e.record, e.record.errors)
end