class Lt::Lcms::Metadata::Service

Public Class Methods

agenda() click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 9
def agenda
  @agenda.data.presence || []
end
foundational_metadata() click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 13
def foundational_metadata
  @foundational_metadata.data.presence || {}
end
materials_metadata() click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 17
def materials_metadata
  DocTemplate::Objects::MaterialMetadata
end
options_for(context) click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 21
def options_for(context)
  super.merge(
    if material?
      {
        metadata: DocTemplate::Objects::MaterialMetadata.build_from(metadata.data),
        material: true
      }
    else
      {
        foundational_metadata: DocTemplate::Objects::BaseMetadata.build_from(@foundational_metadata.data),
        metadata: DocTemplate::Objects::BaseMetadata.build_from(metadata.data),
        parts: @target_table.try(:parts)
      }
    end
  )
end
parse(content, *args) click to toggle source
Calls superclass method Lt::Lcms::Metadata::BaseService::parse
# File lib/lt/lcms/metadata/service.rb, line 38
def parse(content, *args) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
  super
  if material?
    @metadata = DocTemplate::Tables::MaterialMetadata.parse content
    @errors.concat @metadata.errors
    raise ::MaterialError, 'No metadata present' if !@metadata&.table_exist? || @metadata&.data&.empty?
  else
    @metadata = DocTemplate::Tables::Metadata.parse content
    @errors.concat @metadata.errors
    raise ::DocumentError, 'No metadata present' unless @metadata&.table_exist?

    @agenda = DocTemplate::Tables::Agenda.parse content
    @section_metadata = DocTemplate::Tables::Section.parse content,
                                                           force_inject_section: force_inject_section?
    @activity_metadata = DocTemplate::Tables::Activity.parse content, template_type: template_type
    @target_table = DocTemplate::Tables::Target.parse(content) if target_table?

    @foundational_metadata = if foundational?
                               @metadata
                             else
                               DocTemplate::Tables::FoundationalMetadata.parse content
                             end
  end

  self
end

Private Class Methods

force_inject_section?() click to toggle source

Force injecting of Section metadata only if there are no Agenda tables

# File lib/lt/lcms/metadata/service.rb, line 70
def force_inject_section?
  @agenda.data.empty? && metadata.data.any?
end
foundational?() click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 74
def foundational?
  metadata.data['type'].to_s.casecmp('fs').zero?
end
lesson_options() click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 78
def lesson_options
  {
    activity: DocTemplate::Objects::ActivityMetadata.build_from(@activity_metadata),
    agenda: DocTemplate::Objects::AgendaMetadata.build_from(@agenda.data),
    sections: DocTemplate::Objects::SectionsMetadata.build_from(@section_metadata, template_type)
  }
end
target_table?() click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 86
def target_table?
  return false unless metadata.present?

  metadata.data['subject']&.downcase == 'ela' && metadata.data['grade'] == '6'
end
template_type() click to toggle source
# File lib/lt/lcms/metadata/service.rb, line 92
def template_type
  foundational? ? 'fs' : 'core'
end