Class: BerkeleyLibrary::TIND::Export::ColumnGroup
- Inherits:
-
Object
- Object
- BerkeleyLibrary::TIND::Export::ColumnGroup
- Includes:
- Util::Arrays
- Defined in:
- lib/berkeley_library/tind/export/column_group.rb
Overview
A group of columns representing the subfields of a particular data field.
Constant Summary collapse
- INDICATOR_RE =
Indicators SHOULD NOT be capital letters, but TIND internal fields don't respect that. Thus the /i flag.
/^[0-9a-z ]$/i.freeze
- SUBFIELD_CODE_RE =
/^[0-9a-z]$/.freeze
Instance Attribute Summary collapse
-
#ind1 ⇒ Object
readonly
------------------------------------------------------------ Accessors.
-
#ind2 ⇒ Object
readonly
------------------------------------------------------------ Accessors.
-
#index_in_tag ⇒ Object
readonly
------------------------------------------------------------ Accessors.
-
#subfield_codes ⇒ Object
readonly
------------------------------------------------------------ Accessors.
-
#tag ⇒ Object
readonly
------------------------------------------------------------ Accessors.
Class Method Summary collapse
- .format_indicator(ind) ⇒ Object
- .format_prefix(tag, ind1, ind2) ⇒ Object
- .prefix_for(data_field) ⇒ Object
Instance Method Summary collapse
- #columns ⇒ Object
-
#initialize(tag, index_in_tag, ind1, ind2, subfield_codes) ⇒ ColumnGroup
constructor
------------------------------------------------------------ Initializer.
- #maybe_add_at(row, data_field) ⇒ Object
-
#prefix ⇒ Object
------------------------------------------------------------ Instance methods.
- #row_count ⇒ Object
-
#to_s ⇒ Object
------------------------------------------------------------ Object overrides.
- #value_at(row, col) ⇒ Object
Constructor Details
#initialize(tag, index_in_tag, ind1, ind2, subfield_codes) ⇒ ColumnGroup
Initializer
31 32 33 34 35 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 31 def initialize(tag, index_in_tag, ind1, ind2, subfield_codes) @tag, @ind1, @ind2 = valid_tag_and_indicators(tag, ind1, ind2) @subfield_codes = valid_subfield_codes(subfield_codes).dup.freeze @index_in_tag = index_in_tag end |
Instance Attribute Details
#ind1 ⇒ Object (readonly)
Accessors
26 27 28 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26 def ind1 @ind1 end |
#ind2 ⇒ Object (readonly)
Accessors
26 27 28 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26 def ind2 @ind2 end |
#index_in_tag ⇒ Object (readonly)
Accessors
26 27 28 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26 def index_in_tag @index_in_tag end |
#subfield_codes ⇒ Object (readonly)
Accessors
26 27 28 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26 def subfield_codes @subfield_codes end |
#tag ⇒ Object (readonly)
Accessors
26 27 28 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26 def tag @tag end |
Class Method Details
.format_indicator(ind) ⇒ Object
46 47 48 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 46 def format_indicator(ind) ind == ' ' ? '_' : ind end |
.format_prefix(tag, ind1, ind2) ⇒ Object
50 51 52 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 50 def format_prefix(tag, ind1, ind2) [tag, format_indicator(ind1), format_indicator(ind2)].join end |
.prefix_for(data_field) ⇒ Object
42 43 44 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 42 def prefix_for(data_field) format_prefix(data_field.tag, data_field.indicator1, data_field.indicator2) end |
Instance Method Details
#columns ⇒ Object
80 81 82 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 80 def columns @columns ||= (0...subfield_codes.length).map { |col| Column.new(self, col) } end |
#maybe_add_at(row, data_field) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 62 def maybe_add_at(row, data_field) warn "Data field at row #{row} is not frozen: #{data_field}" unless data_field.subfields.frozen? # set nil explicitly so row_count etc. are correct return (data_fields[row] = nil) unless can_add?(data_field) @subfield_codes = merge(subfield_codes, data_field.subfield_codes) data_fields[row] = data_field end |
#prefix ⇒ Object
Instance methods
58 59 60 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 58 def prefix ColumnGroup.format_prefix(tag, ind1, ind2) end |
#row_count ⇒ Object
84 85 86 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 84 def row_count data_fields.size end |
#to_s ⇒ Object
Object overrides
91 92 93 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 91 def to_s "ColumnGroup #{tag}-#{index_in_tag}:" + [prefix, subfield_codes.join].join end |
#value_at(row, col) ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'lib/berkeley_library/tind/export/column_group.rb', line 71 def value_at(row, col) return unless (data_field = data_fields[row]) return unless (subfield_indices = subfield_indices_for(row)) return unless (subfield_index = subfield_indices[col]) return unless (subfield = data_field.subfields[subfield_index]) subfield.value end |