Sha256: 0203e3069fb82d90d80c599970019d9b20044d3680ba801a8051f86c7d55af61

Contents?: true

Size: 1004 Bytes

Versions: 1

Compression:

Stored size: 1004 Bytes

Contents

module Trailblazer::Rails
  module Controller
    def run(operation, params=self.params, *dependencies)
      result = operation.({params: _run_params(params) }.merge(*_run_runtime_options(*dependencies)))

      @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(options={}, *dependencies)
      [_run_options(options), *dependencies]
    end

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

    module Result
      def result
        @_result
      end
    end

    include Result
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trailblazer-rails-2.0.0 lib/trailblazer/rails/controller.rb