module FormJourney::UsesSingleModel

Public Instance Methods

edit() click to toggle source
# File lib/form_journey/uses_single_model.rb, line 10
def edit
  journey_params.clear!
  journey_params.set(:_model_object_id, value: params[:id])
  redirect_to step_path(steps.first)
end
editing?() click to toggle source
# File lib/form_journey/uses_single_model.rb, line 16
def editing?
  model_object_id.present?
end
model_object_id() click to toggle source
# File lib/form_journey/uses_single_model.rb, line 20
def model_object_id
  journey_params.get(:_model_object_id)
end

Private Instance Methods

model_object() click to toggle source
# File lib/form_journey/uses_single_model.rb, line 26
def model_object
  @model_object ||= begin
    if editing?
      scoped_class.find(model_object_id).tap do |obj|
        obj.assign_attributes(model_params)
      end
    else
      scoped_class.new(model_params)
    end
  end
end
model_params() click to toggle source
# File lib/form_journey/uses_single_model.rb, line 52
def model_params
  if self.class._params_method.respond_to?(:call)
    self.class._params_method.call
  else
    self.send(self.class._params_method.to_sym)
  end
end
scoped_class() click to toggle source
# File lib/form_journey/uses_single_model.rb, line 38
def scoped_class
  model_class = self.class._model_class
  scope = self.class._model_scope
  return model_class unless scope
  if scope.respond_to?(:call)
    instance_exec(model_class, &scope)
  else
    messages = Array(scope)
    messages.reduce(model_class) do |chained_scope, message|
      chained_scope.send(message.to_sym)
    end
  end
end