class SimpleFactory::HashDefinitions

Attributes

samples[R]

Public Class Methods

new(hash) click to toggle source
# File lib/simple_factory/hash_definitions.rb, line 7
def initialize(hash)
  if (samples = (hash[:_sample] || hash['_sample']))
    @samples = samples.map {|sample| parse_attrs(sample) }
  else
    @samples = [parse_attrs(hash)]
  end
end

Private Instance Methods

parse_attrs(hash) click to toggle source
# File lib/simple_factory/hash_definitions.rb, line 16
def parse_attrs(hash)
  hash.map do |name, value|
    Definition.new(name.to_sym, parse_value(value))
  end
end
parse_hash_value(value) click to toggle source
# File lib/simple_factory/hash_definitions.rb, line 31
def parse_hash_value(value)
  if (samples = value[:_sample] || value['_sample'])
    unless Array === samples
      raise TypeError, "`_sample`'s value must be an Array"
    end
    lambda { samples.sample }
  elsif (sequence = value[:_sequence] || value['_sequence'])
    seq = Sequence.new
    lambda { sequence.gsub(/%{i}/, seq.next.to_s) }
  else
    value
  end
end
parse_value(value) click to toggle source
# File lib/simple_factory/hash_definitions.rb, line 22
def parse_value(value)
  case value
  when Hash
    parse_hash_value(value)
  else
    value
  end
end