class Verifly::ApplicatorWithOptions
An applicator with useful options @example if
ApplicatorWithOptions.new(action, if: true)
@example unless
ApplicatorWithOptions.new(action, unless: false)
@attr action [Applicator]
main action to apply on call
@attr if_condition
[Applicator]
main action only apply if condition evaluates to truthy value
@attr unless_condition
[Applicator]
main action only apply if condition evaluates to falsey value
Attributes
action[RW]
if_condition[RW]
unless_condition[RW]
Public Class Methods
new(*args, &block)
click to toggle source
@!method initialize(action = block, options = {}, &block) @param action [applicable] main action @option options [applicable] :if
main action is only applied if this evaluates to truthy value
@option options [applicable] :unless
main action is only applied if this evaluates to falsey value
@raise [ArgumentError] if there is more than two arguments and block @raise [ArgumentError] if there is zero arguments and no block
# File lib/verifly/applicator_with_options.rb, line 26 def initialize(*args, &block) action, options = normalize_options(*args, &block) self.action = Applicator.build(action) self.if_condition = Applicator.build(options.fetch(:if, true)) self.unless_condition = Applicator.build(options.fetch(:unless, false)) end
Public Instance Methods
call(binding_, *context)
click to toggle source
Applies main action if if_condition
is evaluated to truthy value and unless_condition
is evaluated to falsey value @param binding_ [#instance_exec]
binding to apply (see Applicator)
@param context
generic context to apply (see Applicator)
@return main action application result @return [nil] if condition checks failed
# File lib/verifly/applicator_with_options.rb, line 42 def call(binding_, *context) return unless if_condition.call(binding_, *context) return if unless_condition.call(binding_, *context) action.call(binding_, *context) end
Private Instance Methods
normalize_options(*args, &block)
click to toggle source
# File lib/verifly/applicator_with_options.rb, line 50 def normalize_options(*args, &block) action, options, *rest = block ? [block, *args] : args options ||= {} raise ArgumentError unless action && rest.empty? [action, options] end