class MARC::Spec::Queries::AlNumRange
Attributes
from[R]
Attributes
to[R]
Attributes
Public Class Methods
new(from, to)
click to toggle source
Initializer
# File lib/marc/spec/queries/al_num_range.rb, line 17 def initialize(from, to) @from, @to = parse_endpoints(from, to) end
Public Instance Methods
alphabetic?()
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 37 def alphabetic? lc_alpha?(from) || lc_alpha?(to) end
empty?()
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 41 def empty? from.nil? && to.nil? end
include?(v)
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 29 def include?(v) return false if empty? return (v < 0 && v > reverse_endpoint) if from.nil? return false if v < from to.nil? ? true : v <= to end
index_range()
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 45 def index_range @index_range ||= to_range end
select_from(seq)
click to toggle source
Instance methods
# File lib/marc/spec/queries/al_num_range.rb, line 24 def select_from(seq) raw_result = select_raw_from(seq) seq.is_a?(String) ? wrap_string_result(raw_result) : raw_result end
to_s()
click to toggle source
Object overrides
# File lib/marc/spec/queries/al_num_range.rb, line 52 def to_s "#{from || '#'}-#{to || '#'}" end
Protected Instance Methods
equality_attrs()
click to toggle source
Private Instance Methods
lc_alpha?(endpoint)
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 96 def lc_alpha?(endpoint) endpoint_str = endpoint.to_s endpoint_str.size == 1 && endpoint_str.ord >= 'a'.ord && endpoint_str.ord <= 'z'.ord end
parse_endpoints(from, to)
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 87 def parse_endpoints(from, to) original_values = [from, to] if original_values.all? { |p| lc_alpha?(p) } original_values.map(&:to_s) else original_values.map { |p| int_or_nil(p) } end end
reverse_endpoint()
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 76 def reverse_endpoint -(1 + to) end
select_raw_from(seq)
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 67 def select_raw_from(seq) return seq if from == 0 && to.nil? return seq[index_range] unless alphabetic? return select_raw_from(seq.chars).join if seq.respond_to?(:chars) raise ArgumentError, "Can't select from non-sequence #{seq.inspect}" unless seq.respond_to?(:select) seq.select { |x| include?(x) } end
to_range()
click to toggle source
# File lib/marc/spec/queries/al_num_range.rb, line 80 def to_range return (0..-1) if empty? return (reverse_endpoint..) if from.nil? (from..to) # OK for to to be nil here end