class Lopata::ScenarioBuilder::Variant
@private
Attributes
key[R]
option[R]
title[R]
value[R]
Public Class Methods
join(variants)
click to toggle source
# File lib/lopata/scenario_builder.rb, line 416 def self.join(variants) title, metadata = nil, {} variants.each do |v| title = [title, v.title].compact.join(' ') metadata.merge!(v.metadata) end [title, metadata] end
new(option, key, title, value)
click to toggle source
# File lib/lopata/scenario_builder.rb, line 393 def initialize(option, key, title, value) @option, @key, @title, @value = option, key, title, check_lambda_arity(value) end
Public Instance Methods
metadata(option_set)
click to toggle source
# File lib/lopata/scenario_builder.rb, line 397 def metadata(option_set) data = { key => value } if value.is_a? Hash value.each do |k, v| sub_key = "%s_%s" % [key, k] data[sub_key.to_sym] = v end end option.available_metadata_keys.each do |key| data[key] = nil unless data.has_key?(key) end data.each do |key, v| data[key] = v.calculate(option_set) if v.is_a? CalculatedValue end data end
Private Instance Methods
check_lambda_arity(v)
click to toggle source
Лямдда будет передаваться как блок в instance_eval, которому плохеет, если пришло что-то с нулевой arity. Поэтому для лямбд с нулевой arity делаем arity == 1
# File lib/lopata/scenario_builder.rb, line 429 def check_lambda_arity(v) if v.is_a?(Proc) && v.arity == 0 ->(_) { instance_exec(&v) } else v end end