Sha256: 4f3e3f655b4eb5ee88ad52aec6832e139059657985ecc72939352ca5d425fa04

Contents?: true

Size: 1.43 KB

Versions: 2

Compression:

Stored size: 1.43 KB

Contents

module Trailblazer::Rails
  module Controller
    def run(operation, *dependencies)
      result = if Rails.application.config.trailblazer.enable_tracing
                 _run_operation(operation, :trace, *dependencies).tap { |r| _operation_trace(r) }
               else
                 _run_operation(operation, :call, *dependencies)
               end

      @model = result[:model]
      @form  = Trailblazer::Rails::Form.new(result["contract.default"], @model.class)

      yield(result) if result.success? && block_given?

      @_result = result
    end

  private
    # Override to tweak params. Not recommended.
    # Use a deserializer instead.
    def _run_params(params)
      params
    end

    # This is where we can inject Dry.RB containers and the like via dependencies.
    def _run_runtime_options(ctx = {}, *dependencies)
      [_run_options(ctx), *dependencies]
    end

    # Override this to inject dependencies such as "current_user"
    # into the runtime options.
    def _run_options(ctx)
      ctx
    end

    def _run_operation(operation, call_method, *dependencies)
      operation.send(
        call_method,
        { params: _run_params(self.params) }.merge(*_run_runtime_options(*dependencies))
      )
    end

    def _operation_trace(result)
      puts result.wtf?
    end

    module Result
      def result
        @_result
      end
    end

    include Result
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
trailblazer-rails-2.1.4 lib/trailblazer/rails/controller.rb
trailblazer-rails-2.1.2 lib/trailblazer/rails/controller.rb