class Trailblazer::Option

Constants

VERSION

Public Class Methods

build(value) click to toggle source

Generic builder for a callable “option”. @param call_implementation [Class, Module] implements the process of calling the proc

while passing arguments/options to it in a specific style (e.g. kw args, step interface).

@return [Proc] when called, this proc will evaluate its option (at run-time).

# File lib/trailblazer/option.rb, line 43
def self.build(value)
  evaluate = case value
             when Symbol then  method(:evaluate_method)
             when Proc   then  method(:evaluate_proc)
             else              method(:evaluate_callable)
             end

  ->(*args, **options, &block) { evaluate.(value, *args, **options, &block) }
end
call!(value, *args, signal: :call, keyword_arguments: {}, **, &block) click to toggle source
# File lib/trailblazer/option.rb, line 7
def self.call!(value, *args, signal: :call, keyword_arguments: {}, **, &block)
  # NOTE: {**keyword_arguments} gets removed automatically if it's an empty hash.
  value.public_send(signal, *args, **keyword_arguments, &block)
end
evaluate_callable(value, *args, **options, &block) click to toggle source

Note that evaluate_callable, evaluate_proc and evaluate_method drop most of the args. If you need those, override this class.

@private

# File lib/trailblazer/option.rb, line 23
def self.evaluate_callable(value, *args, **options, &block)
  call!(value, *args, **options, &block)
end
evaluate_method(value, *args, exec_context: raise("No :exec_context given."), **options, &block) click to toggle source

Make the exec_context’s instance method a “lambda” and reuse call!. @private

# File lib/trailblazer/option.rb, line 35
def self.evaluate_method(value, *args, exec_context: raise("No :exec_context given."), **options, &block)
  call!(exec_context.method(value), *args, **options, &block)
end
evaluate_proc(value, *args, signal: :instance_exec, exec_context: raise("No :exec_context given."), **options) click to toggle source

Pass given ‘value` as a block and evaluate it within `exec_context` binding. @private

# File lib/trailblazer/option.rb, line 29
def self.evaluate_proc(value, *args, signal: :instance_exec, exec_context: raise("No :exec_context given."), **options)
  call!(exec_context, *args, signal: signal, **options, &value)
end