class Spigot::Map::Definition
Public Class Methods
define(resource, name, value = nil, &block)
click to toggle source
# File lib/spigot/map/definition.rb, line 12 def self.define(resource, name, value = nil, &block) definition = new(name, value, &block) resource.append definition definition end
new(name, args = nil, parent = nil, &block)
click to toggle source
# File lib/spigot/map/definition.rb, line 4 def initialize(name, args = nil, parent = nil, &block) @name = name @value = args @children = [] instance_eval(&block) if @value.nil? && block_given? @parse = block unless @children.any? end
Public Instance Methods
method_missing(name, *args, &block)
click to toggle source
Spigot::Map::Definition.new
(:user){ username :login } Spigot::Map::Definition.new
(:user){ username = :login }
# File lib/spigot/map/definition.rb, line 63 def method_missing(name, *args, &block) name = name.to_s.gsub('=', '').to_sym @children << Spigot::Map::Definition.new(name, *args, &block) end
parse(data)
click to toggle source
# File lib/spigot/map/definition.rb, line 18 def parse(data) return {} if data.nil? data.default_proc = proc { |h, k| h.key?(k.to_s) ? h[k.to_s] : nil } if data.is_a?(Hash) if @children.empty? unless data.is_a?(Hash) raise Spigot::InvalidSchemaError, "Cannot extract :#{@name} from #{data.inspect}" end value = @parse ? @parse.call(data[@name]) : data[@name] if @value.is_a?(Class) translator = @value.spigot.translator translator.data = value return { @value.name.underscore.to_sym => translator.format } end return { @value.to_sym => value } end if data[@name].is_a?(Array) set = [] data[@name].each do |element| set << parse_children(element) end { @name.to_sym => set } else parse_children(data[@name]) end end
to_hash()
click to toggle source
# File lib/spigot/map/definition.rb, line 48 def to_hash result = {} value = nil if @children.any? value = {} @children.each { |child| value.merge!(child.to_hash) } else value = @value end result.merge!(@name => value) end
Private Instance Methods
parse_children(data)
click to toggle source
# File lib/spigot/map/definition.rb, line 70 def parse_children(data) child_hash = {} @children.each do |child| child_hash.merge!(child.parse(data)) end child_hash end