class Verifly::Applicator::InstanceEvaluator

InstanceEvaluator is used for strings. It works like instance_eval or Binding#eval depending on binding_ class @example

Applicator.call('foo if context[:foo]', binding_, *context)
# => foo if context[:foo]

Public Class Methods

build_class(applicable) click to toggle source

@param applicable [String] @return InstanceEvaluator if applicable is a String @return [nil] otherwise

# File lib/verifly/applicator.rb, line 118
def self.build_class(applicable)
  self if applicable.is_a?(String)
end

Public Instance Methods

call(binding_, *context) click to toggle source

@param binding_ [#instance_exec] target to apply applicable to @param context additional info to send to applicable @return application result

# File lib/verifly/applicator.rb, line 125
def call(binding_, *context)
  if binding_.is_a?(Binding)
    binding_ = binding_.dup
    binding_.local_variable_set(:context, context)
    binding_.eval(applicable, *caller_line)
  else
    binding_.instance_eval(applicable, *caller_line)
  end
end
source(*) click to toggle source

@return [String] exactly it's defenition

# File lib/verifly/applicator.rb, line 140
def source(*)
  applicable
end
source_location(*) click to toggle source

Source location is not available @return [nil]

# File lib/verifly/applicator.rb, line 137
def source_location(*); end

Private Instance Methods

caller_line() click to toggle source

@return [String, Integer]

file and line where `Applicator.call` was called
# File lib/verifly/applicator.rb, line 148
def caller_line
  offset = 2
  backtace_line = caller(offset..offset)[0]
  _, file, line = backtace_line.match(/\A(.+):(\d+):[^:]+\z/).to_a
  [file, Integer(line)]
end