class C::Node

Private Class Methods

from_h(h) click to toggle source

Deserialize a node from a given Hash representation.

# File lib/cast-to-yaml/to_h.rb, line 42
def self.from_h(h)
  params = {}
  fields.each do |f|
    name = f.init_key
    value = h[name.to_s]
    if value
      params[name] =
        if f.child?
          default = f.make_default
          if default.kind_of?(C::NodeList) || value.kind_of?(::Array)
            raise ArgumentError, "node is not a list" unless value.kind_of? ::Array
            default = C::NodeArray.new unless default
            default.push(*(value.collect { |c| C.from_h(c) }))
          else
            C.from_h(value)
          end
        else
          value
        end
    end
  end
  return self.new(params)
end
kind() click to toggle source
# File lib/cast-to-yaml/to_h.rb, line 33
def self.kind
  @kind ||= name.split('::').last.
    gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
    gsub(/([a-z])([A-Z])/, '\1_\2').downcase
end

Public Instance Methods

to_h() click to toggle source

Serialize a node to a Hash representation.

# File lib/cast-to-yaml/to_h.rb, line 8
def to_h
  res = {}
  kind = self.class.kind
  res["kind"] = kind
  fields.each do |f|
    name = f.init_key.to_s
    value = self.send(f.reader)
    if value && !(value == f.make_default)
      res[name] =
        if f.child?
          if value.kind_of? C::NodeList
            value.collect { |n| n.to_h }
          else
            value.to_h
          end
        else
          value
        end
    end
  end
  return res
end
to_h_split() click to toggle source
# File lib/cast-to-yaml/to_yaml.rb, line 5
def to_h_split
  res = {}
  kind = self.class.kind
  res["kind"] = kind
  fields.each do |f|
    name = f.init_key.to_s
    value = self.send(f.reader)
    if value && !(value == f.make_default)
      res[name] =
        if f.child?
          if value.kind_of? C::NodeList
            value.collect { |n| n.to_h_split }
          else
            value.to_h_split
          end
        else
          value
        end
    end
  end
  return res
end