class Astrails::Safe::Config::Builder
Constants
- COLLECTIONS
- ITEMS
- NAMES
Public Class Methods
new(node)
click to toggle source
# File lib/astrails/safe/config/builder.rb, line 9 def initialize(node) @node = node end
Public Instance Methods
method_missing(sym, *args, &block)
click to toggle source
supported args:
args = [value] args = [id, data] args = [data]
id/value - simple values, data - hash
Calls superclass method
# File lib/astrails/safe/config/builder.rb, line 18 def method_missing(sym, *args, &block) return super unless NAMES.include?(sym.to_s) # do we have id or value? unless args.first.is_a?(Hash) id_or_value = args.shift # nil for args == [] end id_or_value = id_or_value.map {|v| v.to_s} if id_or_value.is_a?(Array) # do we have data hash? if data = args.shift raise "#{sym}: hash expected: #{data.inspect}" unless data.is_a?(Hash) end #puts "#{sym}: args=#{args.inspect}, id_or_value=#{id_or_value}, data=#{data.inspect}, block=#{block.inspect}" raise "#{sym}: unexpected: #{args.inspect}" unless args.empty? raise "#{sym}: missing arguments" unless id_or_value || data || block if COLLECTIONS.include?(sym.to_s) && id_or_value data ||= {} end if !data && !block # simple value assignment @node[sym] = id_or_value elsif id_or_value # collection element with id => create collection node and a subnode in it key = sym.to_s + "s" collection = @node[key] || @node.set(key, {}) collection.set(id_or_value, data || {}, &block) else # simple subnode @node.set(sym, data || {}, &block) end end