Class: Decidim::Conferences::Admin::CreateConferenceSpeaker
- Inherits:
-
Decidim::Command
- Object
- Decidim::Command
- Decidim::Conferences::Admin::CreateConferenceSpeaker
- Includes:
- AttachmentAttributesMethods
- Defined in:
- decidim-conferences/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
-
#call ⇒ Object
Executes the command.
-
#initialize(form, current_user, conference) ⇒ CreateConferenceSpeaker
constructor
Public: Initializes the command.
Methods inherited from Decidim::Command
call, #evaluate, #method_missing, #respond_to_missing?, #transaction, #with_events
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 'decidim-conferences/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 |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Decidim::Command
Instance Method Details
#call ⇒ Object
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.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'decidim-conferences/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 |