class BuilderBuilder

Attributes

map[RW]
rules[RW]
target_class[RW]

Public Class Methods

new(target_class, rules = []) click to toggle source
# File lib/Builder/builder_builder.rb, line 7
def initialize(target_class, rules = [])
  @target_class = target_class
  @rules = rules
  @map = RuleMap.new
end

Public Instance Methods

add_rule(&block) click to toggle source
# File lib/Builder/builder_builder.rb, line 42
def add_rule(&block)
  rules.append(Rule.new(map, &block))
end
build(validate = true, skip_contingency = false) click to toggle source
# File lib/Builder/builder_builder.rb, line 13
def build(validate = true, skip_contingency = false)
  builder = Builder.new(target_class, rules)
  target_class.attributes.each do |attribute|
    builder.class.attr_accessor attribute
  end

  begin
    validate_contradictions if validate
  rescue Contingency => c
    raise c unless skip_contingency
  end

  builder
end
validate_contradictions() click to toggle source
# File lib/Builder/builder_builder.rb, line 28
def validate_contradictions
  rules.each do |rule|
    other_rules = rules.reject do |other_rule|
      other_rule.equal?(rule)
    end

    next unless other_rules.any? do |other_rule|
      rule.contradictory?(other_rule)
    end

    raise ContradictionError
  end
end