class Astrails::Safe::Config::Builder

Public Class Methods

collection(*names) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 55
def collection(*names)
  names.each do |m|
    define_method(m) do |id, data={}, &block|
      raise "bad collection id: #{id.inspect}" unless id
      ensure_hash(m, data)

      name = "#{m}s"
      collection = @node.get(name) || @node.set(name, Node.new(@node, {}))
      collection.set id, Node.new(collection, data, &block)
    end
  end
end
hash_value(*names) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 31
def hash_value(*names)
  names.each do |m|
    define_method(m) do |data = {}, &block|
      ensure_uniq(m)
      ensure_hash(m, data)
      @node.set m, Node.new(@node, data || {}, &block)
    end
  end
end
mixed_value(*names) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 41
def mixed_value(*names)
  names.each do |m|
    define_method(m) do |data={}, &block|
      ensure_uniq(m)
      if data.is_a?(Hash) || block
        ensure_hash(m, data) if block
        @node.set m, Node.new(@node, data, &block)
      else
        @node.set m, data
      end
    end
  end
end
multi_value(*names) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 22
def multi_value(*names)
  names.each do |m|
    define_method(m) do |value|
      value = value.map(&:to_s) if value.is_a?(Array)
      @node.set_multi m, value
    end
  end
end
new(node, data = {}) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 6
def initialize(node, data = {})
  @node = node
  data.each { |k, v| self.send k, v }
end
simple_value(*names) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 13
def simple_value(*names)
  names.each do |m|
    define_method(m) do |value|
      ensure_uniq(m)
      @node.set m, value
    end
  end
end

Private Instance Methods

ensure_hash(k, v) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 84
def ensure_hash(k, v)
  raise "#{k}: hash expected: #{v.inspect}" unless v.is_a?(Hash)
end
ensure_uniq(m) click to toggle source
# File lib/astrails/safe/config/builder.rb, line 80
def ensure_uniq(m)
  raise(ArgumentError, "duplicate value for '#{m}'") if @node.get(m)
end