class Golden::ActionFormOperator

Attributes

action[RW]
form[RW]
params[RW]
user[RW]

Public Class Methods

has_actions(actions, form: nil, presenter: nil) click to toggle source

rubocop:disable Naming/PredicateName

# File lib/golden/objects/form/action_form_operator.rb, line 7
def has_actions(actions, form: nil, presenter: nil)
  define_method :actions do
    actions
  end

  define_method :form_class do
    return form.to_s.constantize if form.present?

    "#{action.capitalize}Form".constantize
  end

  define_method :presenter_class do
    return presenter.to_s.constantize if presenter.present?

    "#{action.capitalize}FormPresenter".constantize
  end
end
new(params, accessors = {}) click to toggle source
# File lib/golden/objects/form/action_form_operator.rb, line 39
def initialize(params, accessors = {})
  @params = params
  @action = params[:action]&.to_sym
  assign_attributes(accessors || {})
  run_callbacks(:build_form) { @form ||= build_form }
end

Public Instance Methods

form_presenter() click to toggle source
# File lib/golden/objects/form/action_form_operator.rb, line 59
def form_presenter
  @form_presenter ||= presenter_class.new(form)
end
perform() click to toggle source
# File lib/golden/objects/form/action_form_operator.rb, line 52
def perform
  return if invalid?

  run_callbacks(:save_form) { save_form }
  errors.empty?
end
valid?(context = nil) click to toggle source
Calls superclass method
# File lib/golden/objects/form/action_form_operator.rb, line 46
def valid?(context = nil)
  super
  run_callbacks(:validate_form) { validate_form }
  errors.empty?
end

Private Instance Methods

build_form() click to toggle source
# File lib/golden/objects/form/action_form_operator.rb, line 65
def build_form
  return if action.blank? || actions.exclude?(action)

  form_params = send("#{action}_params")
  form_accessors = send("#{action}_accessors") if private_methods.include? :"#{action}_accessors"
  form_class.new form_params.permit(*form_class.permits), form_accessors
end
save_form() click to toggle source
# File lib/golden/objects/form/action_form_operator.rb, line 79
def save_form
  form.save
  errors.merge! form.errors
end
validate_form() click to toggle source
# File lib/golden/objects/form/action_form_operator.rb, line 73
def validate_form
  return unless form.present? && form.invalid?

  errors.merge! form.errors
end