class BerkeleyLibrary::TIND::Export::ColumnGroupList
Public Class Methods
new(exportable_only: false)
click to toggle source
Initializer
# File lib/berkeley_library/tind/export/column_group_list.rb, line 17 def initialize(exportable_only: false) @exportable_only = exportable_only end
Public Instance Methods
add_data_fields(marc_record, row)
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 42 def add_data_fields(marc_record, row) # TODO: what about control fields? marc_record.data_fields_by_tag.each do |tag, data_fields| next unless can_export_tag(tag) next if data_fields.empty? add_fields_at(data_fields, row) end rescue StandardError => e raise Export::ExportException, "Error adding MARC record #{marc_record.record_id} at row #{row}: #{e.message}" end
all_groups()
click to toggle source
Misc. instance methods
# File lib/berkeley_library/tind/export/column_group_list.rb, line 31 def all_groups # NOTE: this isn't ||= because we only cache on #freeze @all_groups || begin all_tags = column_groups_by_tag.keys.sort all_tags.each_with_object([]) do |tag, groups| tag_column_groups = column_groups_by_tag[tag] groups.concat(tag_column_groups) end end end
each(&block)
click to toggle source
Enumerable
# File lib/berkeley_library/tind/export/column_group_list.rb, line 57 def each(&block) all_groups.each(&block) end
exportable_only?()
click to toggle source
Accessors
# File lib/berkeley_library/tind/export/column_group_list.rb, line 24 def exportable_only? @exportable_only end
freeze()
click to toggle source
Object overrides
# File lib/berkeley_library/tind/export/column_group_list.rb, line 64 def freeze column_groups_by_tag.each_value(&:freeze) column_groups_by_tag.freeze @all_groups ||= all_groups.freeze self end
frozen?()
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 71 def frozen? column_groups_by_tag.frozen? && @all_groups && @all_groups.frozen? end
Private Instance Methods
add_data_field(df, row, tag_column_groups, at_or_after: 0)
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 96 def add_data_field(df, row, tag_column_groups, at_or_after: 0) added_at = added_at_index(df, row, tag_column_groups, at_or_after) return added_at if added_at new_group = ColumnGroup.new(df.tag, tag_column_groups.size, df.indicator1, df.indicator2, exportable_subfield_codes(df)).tap do |cg| raise Export::ExportException, "Unexpected failure to add #{df} to #{cg}" unless cg.maybe_add_at(row, df) end tag_column_groups << new_group tag_column_groups.size - 1 end
add_fields_at(data_fields, row)
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 85 def add_fields_at(data_fields, row) tag = data_fields[0].tag.freeze tag_column_groups = (column_groups_by_tag[tag] ||= []) data_fields.inject(0) do |offset, df| next offset unless can_export_df(df) 1 + add_data_field(df, row, tag_column_groups, at_or_after: offset) end end
added_at_index(df, row, tag_column_groups, at_or_after)
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 107 def added_at_index(df, row, tag_column_groups, at_or_after) BerkeleyLibrary::Util::Arrays.find_index(in_array: tag_column_groups, start_index: at_or_after) { |cg| cg.maybe_add_at(row, df) } end
can_export_df(df)
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 117 def can_export_df(df) return true unless exportable_only? Filter.can_export_data_field?(df) end
can_export_tag(tag)
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 111 def can_export_tag(tag) return true unless exportable_only? Filter.can_export_tag?(tag) end
column_groups_by_tag()
click to toggle source
Private methods
# File lib/berkeley_library/tind/export/column_group_list.rb, line 81 def column_groups_by_tag @column_groups_by_tag ||= {} end
exportable_subfield_codes(df)
click to toggle source
# File lib/berkeley_library/tind/export/column_group_list.rb, line 123 def exportable_subfield_codes(df) return df.subfield_codes unless exportable_only? Filter.exportable_subfield_codes(df) end