bible_ref_parser 0.1.0 → 0.2.0

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: 444fb0ee3218f9caa74109ee60f834efad718af2f2982453ac9918980d5da614
4
- data.tar.gz: 839da96a5fedb211d67b645cba63335ef12a16db86b89bf1bc8a52a86f4af783
3
+ metadata.gz: 925e15f2c8fe0edb168af8bb3037d888fadec26ea67b9cdf5204be3ed0f2b00d
4
+ data.tar.gz: a6dc3b012dbc430302a4b75d83afb3c003042c1233b002f41eb921628d61226c
5
5
  SHA512:
6
- metadata.gz: 9a40f9a4068dc57f0316e2ac77a15ec27fd9709135eb0530c8dac2859b75fb0f2d25e0b11d5ea7e37cd4c08d145745c49d6a0c6c4e882f28195ff8cbde7e21c1
7
- data.tar.gz: f5234fd33d0c25a4d2ef4ac5d89db6bb771ff2ad4e93e4aaaf4452c30bd462756688ee60cf403d2fe00c503d61112522792821f68e76b912a86ccefe1c60241e
6
+ metadata.gz: 96aad3474367886425c9eaa962ea0a00885a35481b1e85ea12f790fafef0b40a09270cae2aa02f805fbb4b1565ddcc9c0182c1f78e24b1e05e8f1de58db7527d
7
+ data.tar.gz: e03fe4f88db255410405296c1df3632dbc30dc370de075bbb258aa7d994f3fb4e203ac869e88aa7ad89b4094eec5ab678dee276675cbe1966c57011a67107ec6
@@ -0,0 +1,7 @@
1
+ module BibleRefParser
2
+ BibleReference = Data.define(:text, :start_offset, :end_offset) do
3
+ def to_s
4
+ text
5
+ end
6
+ end
7
+ end
@@ -1,35 +1,45 @@
1
+ require "forwardable"
2
+
1
3
  module BibleRefParser
2
4
  class BibleReferenceText
5
+ extend Forwardable
3
6
  include Enumerable
4
7
 
8
+ attr_reader :segments
9
+
10
+ def_delegators :segments, :each, :size, :empty?, :[], :last
11
+ alias_method :length, :size
12
+
5
13
  def initialize(text)
6
14
  raise InvalidInputError, "Expected a string, got #{text.class}" unless text.respond_to?(:to_str)
7
- @original_text = text.to_str
15
+ @text = text.to_str
8
16
  @segments = parse_segments
9
17
  end
10
18
 
11
- def segments
12
- @segments || []
13
- end
14
-
15
19
  def references
16
- segments.select(&:reference?)
20
+ segments.filter_map(&:bible_reference)
17
21
  end
18
22
 
19
- def each(&block)
20
- segments.each(&block)
23
+ def text_with_references
24
+ segments.map(&:to_s)
21
25
  end
22
26
 
23
27
  def to_s
24
28
  segments.map(&:to_s).join
25
29
  end
26
30
 
31
+ def inspect
32
+ displayed = segments.first(10).map(&:inspect)
33
+ displayed << "..." if segments.size > 10
34
+ "#<#{self.class} text=#{@text.inspect} segments=[#{displayed.join(", ")}]>"
35
+ end
36
+
27
37
  private
28
38
 
29
39
  def parse_segments
30
- SegmentParser.new.parse(@original_text)
40
+ SegmentParser.new.parse(@text)
31
41
  rescue Parslet::ParseFailed
32
- nil
42
+ [Segment.new(:text, @text, 0...@text.length)]
33
43
  end
34
44
  end
35
45
  end
@@ -20,6 +20,10 @@ module BibleRefParser
20
20
  original_text
21
21
  end
22
22
 
23
+ def inspect
24
+ "#<#{self.class} type=:#{type} text=\"#{original_text}\">"
25
+ end
26
+
23
27
  # @return [Boolean] true if this is a Bible reference segment
24
28
  def reference?
25
29
  type == :reference
@@ -30,6 +34,17 @@ module BibleRefParser
30
34
  type == :text
31
35
  end
32
36
 
37
+ # @return [BibleReference, nil] a BibleReference for reference segments, nil for text
38
+ def bible_reference
39
+ return nil unless reference?
40
+
41
+ BibleReference.new(
42
+ text: original_text,
43
+ start_offset: position.begin,
44
+ end_offset: position.end
45
+ )
46
+ end
47
+
33
48
  private
34
49
 
35
50
  def validate!
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BibleRefParser
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative "bible_ref_parser/version"
4
4
 
5
+ require_relative "bible_ref_parser/bible_reference"
5
6
  require_relative "bible_ref_parser/bible_reference_text"
6
7
  require_relative "bible_ref_parser/books"
7
8
  require_relative "bible_ref_parser/parser"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bible_ref_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Papa
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-05-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: parslet
@@ -137,6 +137,7 @@ files:
137
137
  - ai_artifacts/spec.md
138
138
  - ai_artifacts/todo.md
139
139
  - lib/bible_ref_parser.rb
140
+ - lib/bible_ref_parser/bible_reference.rb
140
141
  - lib/bible_ref_parser/bible_reference_text.rb
141
142
  - lib/bible_ref_parser/books.rb
142
143
  - lib/bible_ref_parser/parser.rb
@@ -166,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
167
  - !ruby/object:Gem::Version
167
168
  version: '0'
168
169
  requirements: []
169
- rubygems_version: 3.6.2
170
+ rubygems_version: 3.6.8
170
171
  specification_version: 4
171
172
  summary: A parser for Bible references
172
173
  test_files: []