Class: LcpRuby::Actions::FormActionPipeline

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/actions/form_action_pipeline.rb

Defined Under Namespace

Classes: PipelineResult, StepFailure

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record, pipeline, user:, evaluator:, model_name:, model_class:, params: {}) ⇒ FormActionPipeline

Returns a new instance of FormActionPipeline.



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/lcp_ruby/actions/form_action_pipeline.rb', line 28

def initialize(record, pipeline, user:, evaluator:, model_name:, model_class:, params: {})
  @record = record
  @pipeline = pipeline
  @user = user
  @evaluator = evaluator
  @model_name = model_name
  @model_class = model_class
  @params = params
  @deferred_events = []
  @last_message = nil
  @last_redirect_to = nil
end

Class Method Details

.execute(record, pipeline, user:, evaluator:, model_name:, model_class:, params: {}) ⇒ PipelineResult

Parameters:

  • record (ActiveRecord::Base)

    record with user params + set_fields already applied

  • pipeline (Array)

    normalized pipeline steps, e.g. [“save”, “transition”=>“submit”]

  • user (Object)

    current_user

  • evaluator (PermissionEvaluator)
  • model_name (String)

    LCP model name (for action key resolution)

  • model_class (Class)

    ActiveRecord model class

  • params (Hash) (defaults to: {})

    action params (for custom actions)

Returns:



21
22
23
24
25
26
# File 'lib/lcp_ruby/actions/form_action_pipeline.rb', line 21

def self.execute(record, pipeline, user:, evaluator:, model_name:, model_class:, params: {})
  new(record, pipeline,
    user: user, evaluator: evaluator,
    model_name: model_name, model_class: model_class,
    params: params).execute
end

Instance Method Details

#executeObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/lcp_ruby/actions/form_action_pipeline.rb', line 41

def execute
  success = false

  ActiveRecord::Base.transaction do
    @pipeline.each { |step| execute_step(step) }
    success = true
  rescue StepFailure
    raise ActiveRecord::Rollback
  end

  if success
    PipelineResult.new(
      success: true,
      message: @last_message,
      redirect_to: @last_redirect_to,
      deferred_events: @deferred_events
    )
  else
    PipelineResult.new(
      success: false,
      errors: @record.errors.full_messages
    )
  end
end