Module: LightOperations::Flow::ClassMethods

Defined in:
lib/light_operations/flow.rb

Instance Method Summary collapse

Instance Method Details

#operation(operation_name, namespace: Kernel, actions: [], default_view: nil, view_prefix: 'render_', default_fail_view: nil, fail_view_prefix: 'render_fail_') ⇒ Object

rubocop:disable all



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/light_operations/flow.rb', line 10

def operation(operation_name, namespace: Kernel, actions: [], default_view: nil, view_prefix: 'render_', default_fail_view: nil, fail_view_prefix: 'render_fail_') # rubocop:disable all
  actions.each do |action_name|
    operation_method = "#{action_name}_op"

    define_method(action_name.to_s) do
      send(operation_method).run((operation_opts || {}).merge(params: params))
    end

    define_method(operation_method) do
      success_view = default_view || "#{view_prefix}#{action_name}".to_sym
      fail_view    = default_fail_view || "#{fail_view_prefix}#{action_name}".to_sym
      const        = operation_name.to_s.titleize.delete(' ')
      action       = action_name.to_s.titleize.delete(' ')
      namespace.const_get(const).const_get(action)
        .new(operation_dependencies)
        .bind_with(self)
        .on_success(success_view)
        .on_fail(fail_view)
    end
  end
end