Class: Bible::BibleRefParser::Verses

Inherits:
Object
  • Object
show all
Includes:
RangeComparisons
Defined in:
lib/bible/parser.rb

Overview

Represents range or discontinuous series of chaptesr

Instance Method Summary collapse

Methods included from RangeComparisons

#compare_ranges

Constructor Details

#initialize(chapter) ⇒ Verses

Returns a new instance of Verses.



603
604
605
606
# File 'lib/bible/parser.rb', line 603

def initialize(chapter)
  @verses = []
  @chapter = chapter
end

Instance Method Details

#<<(value) ⇒ Object



618
619
620
621
622
623
624
625
626
627
628
629
# File 'lib/bible/parser.rb', line 618

def <<(value)
  unless value.nil? || @verses.empty? || @verses.last.nil? || value == -1
    raise "Cannot add a verse reference in reverse order" if @verses.last > value
    unless @verses.last.verse_number == value
      @verses.last.succ.upto(value) { |v|
        @verses << v
      }
    end
  else
    @verses << value
  end
end

#==(value) ⇒ Object



643
644
645
# File 'lib/bible/parser.rb', line 643

def ==(value)
  compare_ranges(@verses, value, "verses")
end

#[](index) ⇒ Object



639
640
641
# File 'lib/bible/parser.rb', line 639

def [](index)
  return @verses.compact[index]
end

#eachObject

All verses defined on the chapter. If none are defined, this is a no-op. Will yield either Verse objects or -1 (indicating go to end of verses).



649
650
651
652
653
654
# File 'lib/bible/parser.rb', line 649

def each
  return if @verses.empty?
  @verses.each { |verse|
    yield verse unless verse.nil?
  }
end

#fixupObject



608
609
610
611
612
613
614
615
616
# File 'lib/bible/parser.rb', line 608

def fixup
  if @verses.last == -1
    @verses.pop
    chapter = Books[@chapter.book.book_symbol][@chapter.chapter_number - 1]
    @verses.last.succ.upto(chapter.verses.last) do |v|
      @verses << v
    end
  end
end

#inspectObject



656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
# File 'lib/bible/parser.rb', line 656

def inspect
  last_verse = nil
  s = @verses.inject("") { |val, v|
    if val.empty? || last_verse.nil?
      val << "," unless val.empty?
      val << v.inspect
    elsif v.nil?
      val << "-#{last_verse.inspect}"
    end

    last_verse = v
    val
  }

  s << "-#{last_verse.inspect}" unless last_verse.nil?
  s
end

#lastObject



635
636
637
# File 'lib/bible/parser.rb', line 635

def last
  @verses.last
end

#lengthObject



631
632
633
# File 'lib/bible/parser.rb', line 631

def length
  @verses.length
end