Class: Decidim::Conferences::Admin::CreateConferenceSpeaker

Inherits:
Decidim::Command
  • Object
show all
Includes:
AttachmentAttributesMethods
Defined in:
app/commands/decidim/conferences/admin/create_conference_speaker.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(form, current_user, conference) ⇒ CreateConferenceSpeaker

Public: Initializes the command.

form - A form object with the params. conference - The Conference that will hold the speaker



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

def initialize(form, current_user, conference)
  @form = form
  @current_user = current_user
  @conference = conference
end

Instance Method Details

#callObject

Executes the command. Broadcasts these events:

  • :ok when everything is valid.

  • :invalid if the form wasn’t valid and we couldn’t proceed.

Returns nothing.



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

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

  # We are going to assign the attributes only to handle the validation of the avatar before accessing
  # `create_conference_speaker!` which uses `create!`, and this will render an ActiveRecord::RecordInvalid error
  # After we assign and check if the object is valid, we will not save the model to let it be handled the old way
  # If there is an error we add the error to the form
  # We are using this method to assign the conference because if we are trying to assign all at once, there will be thrown a
  # Delegation error

  if conference_speaker_with_attributes.valid?

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

    broadcast(:invalid)
  end
end