Class: MARC::Spec::Parsing::ClosedIntRange
- Inherits:
-
Parslet::Atoms::Base
- Object
- Parslet::Atoms::Base
- MARC::Spec::Parsing::ClosedIntRange
- Defined in:
- lib/marc/spec/parsing/closed_int_range.rb
Constant Summary collapse
- SIMPLE_CLASS_NAME =
ClosedIntRange.name.split('::').last
- INT_RANGE_RE =
/^(0|[1-9][0-9]*)-(0|[1-9][0-9]*)/.freeze
Instance Method Summary collapse
Instance Method Details
#to_s_inner(_prec) ⇒ Object
22 23 24 |
# File 'lib/marc/spec/parsing/closed_int_range.rb', line 22 def to_s_inner(_prec) SIMPLE_CLASS_NAME end |
#try(source, context, _consume_all) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/marc/spec/parsing/closed_int_range.rb', line 11 def try(source, context, _consume_all) source_str = source.instance_variable_get(:@str) # TODO: something less hacky return context.err(self, source, 'Not a non-negative integer range') unless (range_str = source_str.check(INT_RANGE_RE)) s, e = range_str.match(INT_RANGE_RE)[1, 2] return context.err(self, source, "#{s} !<= #{e}") unless s.to_i <= e.to_i sv, _, ev = [s.size, 1, e.size].map { |l| source.consume(l) } # discard hyphen succ(from: sv, to: ev) end |