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 +4 -4
- data/lib/l43/rgx/compile.rb +8 -4
- data/lib/l43/rgx/methods.rb +12 -4
- data/lib/l43/rgx/version.rb +1 -1
- data/lib/l43/rgx.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 01a532b87cd5cfd3a0f06d773bbd556168b9548bd081b7ae22df35f6f2adcdba
|
|
4
|
+
data.tar.gz: a7784b4825e708af44f2703d643b0f08bd46d84f6b78d452e02ceacd8668bbd6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7d1f476ba49438a5db986e2cc607308aaa85857e31f779ea136395edd4b65800ae67d36885dac3e5e7e1e24d16f510a7e9c5252940c6b9f90d32c2f9129074b2
|
|
7
|
+
data.tar.gz: 0e7c86b2ca3c2da91acc7b97c2e0315897c146888532280709cfbdf8cd76f911325ed0f0deaf044588fff2c4cb0a5d31c7c4956dc0370bf3680143da9bac6d85
|
data/lib/l43/rgx/compile.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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?
|
data/lib/l43/rgx/methods.rb
CHANGED
|
@@ -4,11 +4,19 @@ module L43
|
|
|
4
4
|
class Rgx
|
|
5
5
|
module Methods
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
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
|
data/lib/l43/rgx/version.rb
CHANGED
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.
|
|
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-
|
|
10
|
+
date: 2026-09-10 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ostruct
|