class MARC::Spec::Queries::Subfield

Attributes

code[R]

Attributes

index[R]

Attributes

Public Class Methods

new(code, index: nil) click to toggle source

Initializer

# File lib/marc/spec/queries/subfield.rb, line 18
def initialize(code, index: nil)
  @code = parse_code(code)
  @index = ensure_type(index, PositionOrRange, allow_nil: true)
end

Public Instance Methods

can_apply?(marc_obj) click to toggle source

Applicable

# File lib/marc/spec/queries/subfield.rb, line 37
def can_apply?(marc_obj)
  marc_obj.respond_to?(:subfields)
end
to_s() click to toggle source

Object overrides

# File lib/marc/spec/queries/subfield.rb, line 26
def to_s
  StringIO.new.tap do |out|
    out << '$'
    out << code
    out << "[#{index}]" if index
  end.string
end

Protected Instance Methods

do_apply(data_field) click to toggle source

Applicable

# File lib/marc/spec/queries/subfield.rb, line 49
def do_apply(data_field)
  subfields = all_subfields(data_field)
  raw_result = index ? index.select_from(subfields) : subfields
  Array(raw_result)
end
equality_attrs() click to toggle source
# File lib/marc/spec/queries/subfield.rb, line 66
def equality_attrs
  %i[code index]
end
to_s_inspect() click to toggle source

Predicate

# File lib/marc/spec/queries/subfield.rb, line 58
def to_s_inspect
  StringIO.new.tap do |out|
    out << '$'
    out << code.inspect
    out << "[#{index.inspect}]" if index
  end.string
end

Private Instance Methods

all_subfields(data_field) click to toggle source

Private methods

# File lib/marc/spec/queries/subfield.rb, line 75
def all_subfields(data_field)
  data_field.subfields.select { |sf| code.include?(sf.code) }
end
parse_code(code) click to toggle source
# File lib/marc/spec/queries/subfield.rb, line 79
def parse_code(code)
  raise ArgumentError, 'Code cannot be nil' if code.nil?

  code.is_a?(AlNumRange) ? code : code.to_s
end