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