class VRT::Node

Attributes

children[RW]
id[R]
name[R]
parent[R]
priority[R]
qualified_vrt_id[R]
type[R]
version[R]

Public Class Methods

new(attributes = {}) click to toggle source
# File lib/vrt/node.rb, line 6
def initialize(attributes = {})
  @id = attributes['id'].to_sym
  @name = attributes['name']
  @priority = attributes['priority']
  @type = attributes['type']
  @has_children = attributes.key?('children')
  @children = {}
  @version = attributes['version']
  @parent = attributes['parent']
  @qualified_vrt_id = construct_vrt_id
end

Public Instance Methods

as_json(options = nil) click to toggle source

Since this object contains references to parent and children, as_json must be overridden to avoid unending recursion.

# File lib/vrt/node.rb, line 36
def as_json(options = nil)
  json = {}
  instance_variables.each do |attribute|
    attr_name = attribute.to_s.tr('@', '')
    json[attr_name] = case attr_name
                      when 'parent'
                        parent&.qualified_vrt_id
                      when 'children'
                        children.inject({}) do |c, (k, v)|
                          c[k] = v.nil? ? v : v.as_json(options)
                        end
                      else
                        instance_variable_get(attribute)
                      end
  end
  json
end
children?() click to toggle source
# File lib/vrt/node.rb, line 18
def children?
  @has_children
end
construct_vrt_id() click to toggle source
# File lib/vrt/node.rb, line 22
def construct_vrt_id
  id_list.join('.')
end
id_list() click to toggle source
# File lib/vrt/node.rb, line 30
def id_list
  parent ? parent.id_list << id : [id]
end
mappings() click to toggle source
# File lib/vrt/node.rb, line 26
def mappings
  Hash[VRT.mappings.map { |name, map| [name, map.get(id_list, @version)] }]
end