Class: Decidim::Conferences::Admin::UpdateConferenceSpeaker

Inherits:
Decidim::Command show all
Includes:
AttachmentAttributesMethods
Defined in:
decidim-conferences/app/commands/decidim/conferences/admin/update_conference_speaker.rb

Overview

A command with all the business logic when updating a conference speaker in the system.

Instance Method Summary collapse

Methods inherited from Decidim::Command

call, #evaluate, #method_missing, #respond_to_missing?, #transaction, #with_events

Constructor Details

#initialize(form, conference_speaker) ⇒ UpdateConferenceSpeaker

Public: Initializes the command.

form - A form object with the params. conference_speaker - The ConferenceSpeaker to update



15
16
17
18
# File 'decidim-conferences/app/commands/decidim/conferences/admin/update_conference_speaker.rb', line 15

def initialize(form, conference_speaker)
  @form = form
  @conference_speaker = conference_speaker
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Decidim::Command

Instance Method Details

#callObject

Executes the command. Broadcasts these events:

  • :ok when everything is valid.

  • :invalid if the form was not valid and we could not proceed.

Returns nothing.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'decidim-conferences/app/commands/decidim/conferences/admin/update_conference_speaker.rb', line 26

def call
  return broadcast(:invalid) if form.invalid?
  return broadcast(:invalid) unless conference_speaker

  # We are going to assign the attributes only to handle the validation of the avatar before accessing
  # `update_conference_speaker!` which uses `update!`. Without this step, the image validation may render
  # an ActiveRecord::RecordInvalid error
  # After we assign and check if the object is valid, we reload the model to let it be handled the old way
  # If there is an error we add the error to the form
  conference_speaker.assign_attributes(attributes)

  if conference_speaker.valid?
    conference_speaker.reload

    transaction do
      update_conference_speaker!
      link_meetings(@conference_speaker)
    end
    broadcast(:ok)
  else
    form.errors.add(:avatar, conference_speaker.errors[:avatar]) if conference_speaker.errors.include? :avatar

    broadcast(:invalid)
  end
end