class DocTemplate::Objects::AgendaMetadata

Public Class Methods

build_from(data) click to toggle source
# File lib/doc_template/objects/agenda_metadata.rb, line 65
def self.build_from(data) # rubocop:disable Metrics/AbcSize
  copy = Marshal.load Marshal.dump(data)
  agenda_data =
    copy.map do |d|
      d[:children].each do |s|
        m = s[:metadata]
        s[:icons] = m['icons']
        s[:material_ids] = m['material_ids']
        s[:priority] = m['priority']
        m['time'] = m['time'].to_s[/\d+/].to_i || 0
        # Use color unless `no` is stated explicitly
        s[:use_color] = m['color'].present? ? !m['color'].casecmp('no').zero? : true
        s[:deselectable] = m['deselectable'].present? ? m['deselectable'].casecmp('yes').zero? : true
        s[:optional] = m['optional']&.casecmp('optional')&.zero?
      end
      d[:material_ids] = d[:metadata]['material_ids']
      d.deep_merge(metadata: { time: d[:children].sum { |s| s[:metadata]['time'] } })
    end
  new(set_index(children: agenda_data))
end

Public Instance Methods

add_break() click to toggle source
# File lib/doc_template/objects/agenda_metadata.rb, line 86
def add_break
  idx = children.index { |c| !c.handled } || -1
  group = Group.new title: '45 Minute Mark', anchor: 'optbreak', time: 0, children: []
  children.insert(idx, group)
end