Class: Bible::BibleRefParser::Chapter

Inherits:
Object
  • Object
show all
Includes:
Comparable, Enumerable
Defined in:
lib/bible/parser.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(book, chapter) ⇒ Chapter

Returns a new instance of Chapter.



383
384
385
386
387
388
# File 'lib/bible/parser.rb', line 383

def initialize(book, chapter)
  raise "Chapter must be an integer" unless chapter.is_a?(Fixnum)

  @book = book
  @chapter_number = chapter
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(symbol, *args) ⇒ Object



441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
# File 'lib/bible/parser.rb', line 441

def method_missing(symbol, *args)
  unless @fixedUp
    case symbol
      # when chapters is referenced, remove the chapter method
      # and add chapters method so this book has multiple chapters.
      when :verses
        c = self.verse
        class << self
          attr_reader :verses
          undef_method :verse, :verse=
        end
        remove_instance_variable :@verse if defined?(@verse)

        @verses = Verses.new(self)
        # If no initial verse, set it to 1
        if c.nil?
          @verses << Verse.new(self, 1)
        else
          @verses << c
        end

        @verses
      else
        super(symbol, *args)
    end
  else
    super(symbol, *args)
  end
end

Instance Attribute Details

#bookObject (readonly)

Returns the value of attribute book.



380
381
382
# File 'lib/bible/parser.rb', line 380

def book
  @book
end

#chapter_numberObject (readonly)

Returns the value of attribute chapter_number.



380
381
382
# File 'lib/bible/parser.rb', line 380

def chapter_number
  @chapter_number
end

#verseObject

Returns the value of attribute verse.



381
382
383
# File 'lib/bible/parser.rb', line 381

def verse
  @verse
end

Instance Method Details

#<=>(value) ⇒ Object



417
418
419
420
421
# File 'lib/bible/parser.rb', line 417

def <=>(value)
  return -1 if value.nil?
  raise "Don't know how to compare Chapter and #{value.inspect} becuase it does not implement to_i." unless value.respond_to?(:to_i)
  return @chapter_number.to_i <=> value.to_i
end

#==(value) ⇒ Object

Assumes value is a Fixnum and determines if it is equal to this chapter.



403
404
405
406
407
# File 'lib/bible/parser.rb', line 403

def ==(value)
  return false if value.nil? || @chapter_number.nil?
  raise "Don't know how to compare chapter to #{value.inspect}" unless value.is_a?(Fixnum)
  return value == @chapter_number
end

#fixupObject



390
391
392
393
394
395
396
397
398
399
# File 'lib/bible/parser.rb', line 390

def fixup
  if ! has_verse?
    self.verses << Verse.new(self, -1)
    self.verses.fixup
  elsif ! single_verse?
    @verses.fixup
  end
  # Don't want reference to verses method to create chapters after fixup
  @fixedUp = true
end

#has_verse?Boolean

Returns:

  • (Boolean)


433
434
435
# File 'lib/bible/parser.rb', line 433

def has_verse?
  (respond_to?(:verse) && ! @verse.nil?) || (respond_to?(:verses) && ! @verses.nil?)
end

#inspectObject



471
472
473
474
475
476
477
# File 'lib/bible/parser.rb', line 471

def inspect
  if single_verse?
    "#{@chapter_number}:" + @verse.inspect
  else
    "#{@chapter_number}:" + @verses.inspect
  end
end

#single_verse?Boolean

Returns:

  • (Boolean)


437
438
439
# File 'lib/bible/parser.rb', line 437

def single_verse?
  respond_to?(:verse)
end

#succObject



423
424
425
# File 'lib/bible/parser.rb', line 423

def succ
  return Chapter.new(@book, @chapter_number + 1)
end

#to_iObject



409
410
411
# File 'lib/bible/parser.rb', line 409

def to_i
  return @chapter_number.to_i
end

#to_sObject



413
414
415
# File 'lib/bible/parser.rb', line 413

def to_s
  return @chapter_number.to_s
end

#upto(i) {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



427
428
429
430
431
# File 'lib/bible/parser.rb', line 427

def upto(i)
  raise "Cannot enumerate to value #{i.inspect} because it does not respond to to_i." unless i.respond_to?(:to_i)
  yield self
  (@chapter_number + 1).upto(i.to_i) { |x| yield(Chapter.new(@book, x)) }
end