class AcademicBenchmarks::Standards::Publication

Attributes

acronym[RW]
authorities[RW]
children[RW]
code[RW]
descr[RW]
description[RW]
guid[RW]

Public Class Methods

from_hash(hash) click to toggle source
# File lib/academic_benchmarks/standards/publication.rb, line 15
def self.from_hash(hash)
  self.new(
    acronym: hash["acronym"],
    descr: hash["descr"],
    guid: hash["guid"],
    authorities: hash["authorities"]
  )
end
new(acronym:, descr:, guid:, authorities:, children: []) click to toggle source
# File lib/academic_benchmarks/standards/publication.rb, line 24
def initialize(acronym:, descr:, guid:, authorities:, children: [])
  @acronym = acronym
  @descr = descr
  @guid = guid
  @authorities = attr_to_vals(Authority, authorities)
  @children = children
end

Public Instance Methods

rebranch_children() click to toggle source

Children are standards, so rebranch them so we have the following structure:

Publication -> Document -> Section -> Standard
# File lib/academic_benchmarks/standards/publication.rb, line 36
def rebranch_children
  @seen = Set.new()
  @guid_to_obj = {}
  new_children = []
  @children.each do |child|
    doc = reparent(child.document, new_children)
    sec = reparent(child.section, doc.children)
    sec.children.push(child)
  end
  @children.replace(new_children)
  remove_instance_variable('@seen')
  remove_instance_variable('@guid_to_obj')
end

Private Instance Methods

reparent(object, children) click to toggle source
# File lib/academic_benchmarks/standards/publication.rb, line 52
def reparent(object, children)
  cached_object = (@guid_to_obj[object.guid] ||= object)
  children.push(cached_object) if @seen.add? cached_object.guid
  cached_object
end