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