l43_rgx 0.1.0 → 0.1.1

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: 16234666a82b0ee1a42c90674890ec10a4ae5e64ae38c067520e51c4bec64796
4
- data.tar.gz: 2472f2c910a99c485b67c31c43012be28c6516b428c3d3a7dd87ec8754935586
3
+ metadata.gz: 01a532b87cd5cfd3a0f06d773bbd556168b9548bd081b7ae22df35f6f2adcdba
4
+ data.tar.gz: a7784b4825e708af44f2703d643b0f08bd46d84f6b78d452e02ceacd8668bbd6
5
5
  SHA512:
6
- metadata.gz: 3d4d321341fa59397399d892a8e224999932534739b91aaa26925e0ee2d3e43aab8734fcb986fa4ceda8ba892d968b70fe80436532424787bb6bd911077b09b8
7
- data.tar.gz: 916dc34de7fc7589c809ad916eed701798de220efbaf6478993bba32f78a11bcb941f13fefa75c23ef8ef0c17170b7454c17b2126b66a4e59ee5baeec43d5e5f
6
+ metadata.gz: 7d1f476ba49438a5db986e2cc607308aaa85857e31f779ea136395edd4b65800ae67d36885dac3e5e7e1e24d16f510a7e9c5252940c6b9f90d32c2f9129074b2
7
+ data.tar.gz: 0e7c86b2ca3c2da91acc7b97c2e0315897c146888532280709cfbdf8cd76f911325ed0f0deaf044588fff2c4cb0a5d31c7c4956dc0370bf3680143da9bac6d85
@@ -9,16 +9,21 @@ module L43
9
9
  "\\A" if [:begin, :both].member?(anchored)
10
10
  end
11
11
 
12
+ def _capture(rgx_source)
13
+ return rgx_source unless captures?
14
+ "(#{rgx_source})"
15
+ end
16
+
12
17
  def _capture_rest
13
18
  @___capture_rest__ ||= "(.*)\\z" if capture_rest
14
19
  end
15
20
 
16
21
  def _compile
17
- @source = [a_anchor, look_behind, compiled_parts, look_ahead, _capture_rest, z_anchor].join.freeze
22
+ @source = _capture([a_anchor, look_behind, compiled_parts, look_ahead, _capture_rest, z_anchor].join.freeze)
18
23
  @regexp = Regexp.compile(source).freeze
19
24
  end
20
25
 
21
- def _compile_part(part, level: 0)
26
+ def _compile_part(part)
22
27
  case part
23
28
  in String
24
29
  part
@@ -34,8 +39,7 @@ module L43
34
39
  in Range
35
40
  "{#{part.first},#{part.last}}"
36
41
  in Array
37
- raise CompilationError, "nested groups are not allowed" if level.positive?
38
- "(#{part.map { _compile_part(it, level: level.succ) }.join})"
42
+ "(#{part.map { _compile_part(it) }.join})"
39
43
  else
40
44
  if self.class === part
41
45
  raise CompilationError, "part is anchored, only use unanchored instances of #{self.class}" if part.anchored?
@@ -4,11 +4,19 @@ module L43
4
4
  class Rgx
5
5
  module Methods
6
6
 
7
- def or(*parts, **options)
8
- self.class.new(wrap, "|", self.class.new(*parts, **options).wrap)
7
+ module ClassMethods
8
+ def or(*rgxen)
9
+ new_source =
10
+ rgxen.map do |rgx|
11
+ rgx.captures? ? rgx.source : "(?:#{rgx.source})"
12
+ end.join("|")
13
+ new(new_source)
14
+ end
9
15
  end
10
16
 
11
- def many(min: 0)
17
+ def or(*rgxen) = self.class.or(self, *rgxen)
18
+
19
+ def many(min: 1)
12
20
  inner_part = wrap
13
21
  new_source =
14
22
  case min
@@ -21,7 +29,7 @@ module L43
21
29
  end
22
30
  self.class.new(new_source)
23
31
  end
24
-
32
+
25
33
  def wrap = _wrap(self)
26
34
 
27
35
  private
@@ -2,7 +2,7 @@
2
2
 
3
3
  module L43
4
4
  class Rgx
5
- VERSION = "0.1.0"
5
+ VERSION = "0.1.1"
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: AGPL-3.0-or-later
data/lib/l43/rgx.rb CHANGED
@@ -11,6 +11,7 @@ module L43
11
11
  extend L43::Core::Forwarder
12
12
  include Compile
13
13
  include Methods
14
+ extend Methods::ClassMethods
14
15
 
15
16
  LegalAnchors = [nil, :begin, :both, :end].freeze
16
17
 
@@ -20,6 +21,7 @@ module L43
20
21
  def anchored? = anchored || capture_rest
21
22
  def anchored_at_begin? = [:begin, :both].member?(anchored)
22
23
  def anchored_at_end? = [:end, :both].member?(anchored)
24
+ def captures? = capture
23
25
 
24
26
  def run(subject, include_match: false)
25
27
  case regexp.match(subject)
@@ -37,13 +39,14 @@ module L43
37
39
  private
38
40
  attr_reader \
39
41
  :anchored,
40
- :callback, :capture_rest,
42
+ :callback, :capture, :capture_rest,
41
43
  :followed_by,
42
44
  :not_followed_by, :not_preceded_by,
43
45
  :parts, :preceded_by
44
46
 
45
47
  def initialize(*parts,
46
48
  anchored: nil,
49
+ capture: false,
47
50
  capture_rest: false,
48
51
  followed_by: nil,
49
52
  not_followed_by: nil,
@@ -69,6 +72,7 @@ module L43
69
72
 
70
73
  @anchored = anchored
71
74
  @callback = callback
75
+ @capture = capture
72
76
  @capture_rest = capture_rest
73
77
  @followed_by = followed_by
74
78
  @not_followed_by = not_followed_by
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l43_rgx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-09-08 00:00:00.000000000 Z
10
+ date: 2026-09-10 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ostruct