bible_ref 1.4.0 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b66f31665e878b3a71f4c334f43ed5a26c972f15989e8569fab62aa557df191
4
- data.tar.gz: 9e7d5a746bf49b140963dfcc945eeaee58fcf68633828892447519841d656f5f
3
+ metadata.gz: cfd107c033d80842c4439b6b1b051494c2159b9a09ff8b37f8619dddc7047c05
4
+ data.tar.gz: 6c89efe81988afabc86f8cc59dabc9761b902a25cf87d2666f3d1325ff18780c
5
5
  SHA512:
6
- metadata.gz: 460cb9fc1df0ae490c46607ed010b21986d636dc63c2a5783ca3343589a58351570c15df9deca603a309108ca59ac74c70b89e994da1e45eec939f648fb2b27f
7
- data.tar.gz: 88462cdbb3dc94dc66c1470455ea5b0de6605da4d1df45a2b1be761fc7ee2262aa8558173df036686f1f8bc2ab329995b7bf64e430bc411bae982591b3032154
6
+ metadata.gz: 8a2606c594f7b74000a47c109155f5db6dd91a0d584d350daf0b6747ec4dbdc201d553cc9765d62d2323d20d351037ab43dae6f20af5952199464d9bc05203f6
7
+ data.tar.gz: 4cdd24de24e1cd85edcd726917afa60fabc317b5dd0c9757a00b9b257f16a40ea4698d3e8cc4db3869f2e8172a0d5f9534f36178f890e524f2be86dd0f951861
data/README.md CHANGED
@@ -53,6 +53,11 @@ verses = ranges.map do |from_ref, to_ref|
53
53
  end
54
54
  ```
55
55
 
56
+ ## Note
57
+
58
+ When searching a book that contains a single chapter (ie. Obadiah, Philemon, Jude, 2 John, 3 John), you can use either Jude 1 or Jude 1:1 to retrieve verse 1.
59
+ This is quite different from searching a book with multiple chapters. **John 1** will return all of chapter 1, where as **Jude 1** only returns the first verse.
60
+
56
61
  ## Copyright
57
62
 
58
63
  Copyright [Tim Morgan](http://timmorgan.org). Licensed MIT.
@@ -5,6 +5,11 @@ module BibleRef
5
5
  fail NotImplementedError, "You must override #books in your language class."
6
6
  end
7
7
 
8
+ # Is it a single chapter book?
9
+ def has_single_chapter?(reference)
10
+ fail NotImplementedError, "You must override #has_single_chapter? in your language class."
11
+ end
12
+
8
13
  def book_id(book_name, canon)
9
14
  book_name = replace_roman_numerals(book_name)
10
15
  return book_name.upcase if books[book_name.upcase] # already normalized
@@ -4,6 +4,13 @@ require_relative 'base'
4
4
  module BibleRef
5
5
  module Languages
6
6
  class Cherokee < Base
7
+
8
+ # Is it a single chapter book?
9
+ def has_single_chapter?(reference)
10
+ matches = ['ᏉᎳ ᏆᎵᎹᏂ ᎤᏬᏪᎳᏁᎸᎯ', 'ᏣᏂ ᏔᎵᏁ ᎤᏬᏪᎳᏅᎯ', 'ᏣᏂ ᏦᎢᏁ ᎤᏬᏪᎳᏅᎯ', 'ᏧᏓᏏ ᎤᏬᏪᎳᏅᎯ']
11
+ return matches.any? { |e| reference.include?(e) }
12
+ end
13
+
7
14
  def books
8
15
  {
9
16
  'MAT' => { name: 'ᎣᏍᏛ ᎧᏃᎮᏛ ᎹᏚ ᎤᏬᏪᎳᏅᎯ' },
@@ -4,6 +4,12 @@ require_relative 'base'
4
4
  module BibleRef
5
5
  module Languages
6
6
  class English < Base
7
+ # Is it a single chapter book?
8
+ def has_single_chapter?(reference)
9
+ matches = [/^ob/, /^(jud|jd|jude)\b/, /^2 ?jo?h?n/, /^3 ?jo?h?n/, /^(philem|phm|pm)/]
10
+ return Regexp.union(matches).match?(reference.downcase)
11
+ end
12
+
7
13
  def books
8
14
  {
9
15
  'GEN' => { match: /^gen/, name: 'Genesis' },
@@ -46,7 +52,7 @@ module BibleRef
46
52
  'ZEC' => { match: /^zec/, name: 'Zechariah' },
47
53
  'MAL' => { match: /^mal/, name: 'Malachi' },
48
54
  'TOB' => { match: /^tob/, name: 'Tobit' },
49
- 'JDT' => { match: /^(jth|jdth?|judith)/, name: 'Judith' },
55
+ 'JDT' => { match: /^(jth|jdth?|judith)/, name: 'Judith' },
50
56
  'ESG' => { match: /^(est.*greek|esg)/, name: 'Esther (Greek)' },
51
57
  'WIS' => { match: /^wis(dom)?/, name: 'Wisdom of Solomon' },
52
58
  'SIR' => { match: /^sir/, name: 'Sirach' },
@@ -63,7 +69,7 @@ module BibleRef
63
69
  '3MA' => { match: /^3 ?mac?/, name: '3 Maccabees' },
64
70
  '2ES' => { match: /^2 ?esd?/, name: '2 Esdras' },
65
71
  '4MA' => { match: /^4 ?mac?/, name: '4 Maccabees' },
66
- 'MAT' => { match: /^mat/, name: 'Matthew' },
72
+ 'MAT' => { match: /^ma?t/, name: 'Matthew' },
67
73
  'MRK' => { match: /^(ma?rk|mk)/, name: 'Mark' },
68
74
  'LUK' => { match: /^lu?k/, name: 'Luke' },
69
75
  'JHN' => { match: /^(john|jn|jhn)/, name: 'John' },
@@ -73,14 +79,14 @@ module BibleRef
73
79
  '2CO' => { match: /^2 ?cor?/, name: '2 Corinthians' },
74
80
  'GAL' => { match: /^gal/, name: 'Galatians' },
75
81
  'EPH' => { match: /^eph/, name: 'Ephesians' },
76
- 'PHP' => { match: /^(phill?i|php)/, name: 'Philippians' },
82
+ 'PHP' => { match: /^(phil|php|pp)/, name: 'Philippians' },
77
83
  'COL' => { match: /^col/, name: 'Colossians' },
78
84
  '1TH' => { match: /^1 ?the?s?/, name: '1 Thessalonians' },
79
85
  '2TH' => { match: /^2 ?the?s?/, name: '2 Thessalonians' },
80
86
  '1TI' => { match: /^1 ?tim?/, name: '1 Timothy' },
81
87
  '2TI' => { match: /^2 ?tim?/, name: '2 Timothy' },
82
88
  'TIT' => { match: /^tit/, name: 'Titus' },
83
- 'PHM' => { match: /^ph(i?l|m)/, name: 'Philemon' },
89
+ 'PHM' => { match: /^(philem|phm|pm)/, name: 'Philemon' },
84
90
  'HEB' => { match: /^heb/, name: 'Hebrews' },
85
91
  'JAS' => { match: /^ja(m|s)/, name: 'James' },
86
92
  '1PE' => { match: /^1 ?pet?/, name: '1 Peter' },
@@ -88,7 +94,7 @@ module BibleRef
88
94
  '1JN' => { match: /^1 ?jo?h?n/, name: '1 John' },
89
95
  '2JN' => { match: /^2 ?jo?h?n/, name: '2 John' },
90
96
  '3JN' => { match: /^3 ?jo?h?n/, name: '3 John' },
91
- 'JUD' => { match: /^(jud$|jd$|jude$)/, name: 'Jude' },
97
+ 'JUD' => { match: /^(jud|jd|jude)$/, name: 'Jude' },
92
98
  'REV' => { match: /^re?v/, name: 'Revelation' }
93
99
  }
94
100
  end
@@ -4,6 +4,12 @@ require_relative 'base'
4
4
  module BibleRef
5
5
  module Languages
6
6
  class Latin < Base
7
+ # Is it a single chapter book?
8
+ def has_single_chapter?(reference)
9
+ matches = ['Abdias', 'ad Philemonem', 'Joannis II', 'Joannis III', 'Judæ']
10
+ return matches.any? { |e| reference.include?(e) }
11
+ end
12
+
7
13
  def books
8
14
  {
9
15
  'GEN' => { name: 'Genesis' },
@@ -4,6 +4,13 @@ require_relative 'base'
4
4
  module BibleRef
5
5
  module Languages
6
6
  class Portuguese < Base
7
+
8
+ # Is it a single chapter book?
9
+ def has_single_chapter?(reference)
10
+ matches = [/^ob/, /^jud/, /^2 jo/, /^3 jo/, /^fil/]
11
+ return Regexp.union(matches).match?(reference.downcase)
12
+ end
13
+
7
14
  def books
8
15
  {
9
16
  'GEN' => { match: /^g[eê]n/, name: 'Gênesis' },
@@ -4,6 +4,13 @@ require_relative 'base'
4
4
  module BibleRef
5
5
  module Languages
6
6
  class Romanian < Base
7
+
8
+ # Is it a single chapter book?
9
+ def has_single_chapter?(reference)
10
+ matches = [/^ob/, /^iud/, /^2 io/, /^3 io/, /^fil/]
11
+ return Regexp.union(matches).match?(reference.downcase)
12
+ end
13
+
7
14
  def books
8
15
  {
9
16
  'GEN' => { match: /^gen/, name: 'Geneza' },
@@ -8,10 +8,11 @@ module BibleRef
8
8
 
9
9
  # Create a new Reference instance by passing in the user-supplied bible reference as a string.
10
10
  def initialize(reference, language: 'eng', canon: 'all')
11
- @reference = reference
12
- @details = parse
13
11
  @language = language.respond_to?(:book_id) ? language : LANGUAGES.fetch(language.to_s).new
14
12
  @canon = canon.respond_to?(:books) ? canon : CANONS.fetch(canon.to_s).new
13
+ @reference = reference
14
+ standardize_reference()
15
+ @details = parse
15
16
  end
16
17
 
17
18
  # Returns an array of pairs, each one being the from and to for a range.
@@ -22,7 +23,6 @@ module BibleRef
22
23
  def ranges
23
24
  return nil unless valid?
24
25
  @chapter = nil
25
- fix_chapter_for_jude if book_id == 'JUD'
26
26
  [@details[:refs]].flatten.map do |ref|
27
27
  normalize_range(ref) || normalize_ref(ref)
28
28
  end
@@ -75,6 +75,19 @@ module BibleRef
75
75
  end
76
76
  end
77
77
 
78
+ # standardize the reference so it can be handed to the parser.
79
+ def standardize_reference
80
+ return @reference unless @language.has_single_chapter?(@reference)
81
+ return @reference if @reference.include? ':'
82
+
83
+ matches = @reference.match(/^([\d]?[\D\s]*)/)
84
+ return @reference if matches.length() == 0
85
+
86
+ book = matches[0].strip
87
+ requested = @reference.sub(book, '').strip
88
+ @reference = "#{book} 1:#{requested}"
89
+ end
90
+
78
91
  def parse
79
92
  begin
80
93
  parsed = Parser.new.parse(@reference)
@@ -102,23 +115,5 @@ module BibleRef
102
115
  end
103
116
  end
104
117
 
105
- def fix_chapter_for_jude
106
- (start, finish) = @details[:refs]
107
- finish ||= start
108
- @details[:refs] = [
109
- {
110
- range: {
111
- from: {
112
- chapter: 1,
113
- verse: start[:chapter]
114
- },
115
- to: {
116
- chapter: 1,
117
- verse: finish[:chapter]
118
- }
119
- }
120
- }
121
- ]
122
- end
123
118
  end
124
119
  end
@@ -1,3 +1,3 @@
1
1
  module BibleRef
2
- VERSION = '1.4.0'
2
+ VERSION = '1.5.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bible_ref
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Morgan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-16 00:00:00.000000000 Z
11
+ date: 2021-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet
@@ -93,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
95
  requirements: []
96
- rubygems_version: 3.1.2
96
+ rubygems_version: 3.2.22
97
97
  signing_key:
98
98
  specification_version: 4
99
99
  summary: Bible reference parser