BibleRef
This small Rubygem does its best at taking a user-input string like "john 3:16" and turning it into something useful
for querying a database (this is how we use it in bible_api).
Usage
ref = BibleRef::Reference.new('jn 3:16')
ref.valid?
ref.book_id
ref.normalize
Ranges
Call #ranges
to get from/to pairs of verses.
BibleRef::Reference.new('john 3:16').ranges
BibleRef::Reference.new('Romans 12:1,3-4 & 13:2-4,7-8').ranges
You can then take this and turn it into a few small SQL queries like this:
verses = ranges.map do |from_ref, to_ref|
first = DB['select id from verses where book = :book and chapter = :chapter and verse = :verse limit 1', from_ref].first
last = DB['select id from verses where book = :book and chapter = :chapter and verse = :verse limit 1', to_ref].first
DB['select * from verses where id between ? and ?', first['id'], last['id']]
end
Single-Chapter Book Matching
Passing single_chapter_book_matching
keyword to Reference
changes how single-chapter books are handled.
It affects how something like Jude 1
is parsed:
setting | input | result |
---|
:special (default) | jude 1 | single verse of Jude 1:1 |
:indifferent | jude 1 | whole chapter of Jude |
While the default of :special
seems to match what most people expect, using the :indifferent
setting will make jude 1
behave the same as something like john 1
-- both will return the entire chapter.
BibleRef::Reference.new('jude 1').ranges
BibleRef::Reference.new('jude 1', single_chapter_book_matching: :indifferent).ranges
Copyright
Copyright Tim Morgan. Licensed MIT.