Class: BerkeleyLibrary::TIND::Export::ColumnGroup

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

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

#ind1Object (readonly)


Accessors



26
27
28
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26

def ind1
  @ind1
end

#ind2Object (readonly)


Accessors



26
27
28
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26

def ind2
  @ind2
end

#index_in_tagObject (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_codesObject (readonly)


Accessors



26
27
28
# File 'lib/berkeley_library/tind/export/column_group.rb', line 26

def subfield_codes
  @subfield_codes
end

#tagObject (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

#columnsObject



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

#prefixObject


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_countObject



84
85
86
# File 'lib/berkeley_library/tind/export/column_group.rb', line 84

def row_count
  data_fields.size
end

#to_sObject


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