class Edifunct::SegmentGroup

Represents the logical grouping of segments.

Attributes

children[R]
tag[R]

Public Class Methods

new(tag) click to toggle source
# File lib/edifunct/segment_group.rb, line 11
def initialize(tag)
  @tag = tag
  @children = []

  @child_segment_map = Hash.new { |hash, key| hash[key] = [] }
  @child_segment_group_map = Hash.new { |hash, key| hash[key] = [] }
end

Public Instance Methods

add_segment(segment) click to toggle source
# File lib/edifunct/segment_group.rb, line 19
def add_segment(segment)
  @children << segment
  @child_segment_map[segment.tag] << segment

  segment
end
create_group(segment_group_tag) click to toggle source
# File lib/edifunct/segment_group.rb, line 26
def create_group(segment_group_tag)
  segment_group = SegmentGroup.new(segment_group_tag)

  @children << segment_group
  @child_segment_group_map[segment_group.tag] << segment_group

  segment_group
end
lookup_group(segment_group_tag) click to toggle source
# File lib/edifunct/segment_group.rb, line 39
def lookup_group(segment_group_tag)
  lookup_groups(segment_group_tag).first
end
lookup_groups(segment_group_tag) click to toggle source
# File lib/edifunct/segment_group.rb, line 35
def lookup_groups(segment_group_tag)
  @child_segment_group_map[segment_group_tag]
end
lookup_segment(segment_tag, &block) click to toggle source
# File lib/edifunct/segment_group.rb, line 47
def lookup_segment(segment_tag, &block)
  if block_given?
    lookup_segments(segment_tag).find(&block)
  else
    lookup_segments(segment_tag).first
  end
end
lookup_segments(segment_tag) click to toggle source
# File lib/edifunct/segment_group.rb, line 43
def lookup_segments(segment_tag)
  @child_segment_map[segment_tag]
end
print_with_structure() click to toggle source

Private Instance Methods

_print_with_structure(group, padding: "") click to toggle source
# File lib/edifunct/segment_group.rb, line 61
def _print_with_structure(group, padding: "")
  group.children.each do |child|
    case child
    when Segment
      print "#{padding}#{child.raw_segment}\n"
    when SegmentGroup
      print "#{padding}#{child.tag}\n"
      _print_with_structure(child, padding: padding + "  ")
    end
  end
end