regexer 1.0.0 → 1.1.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 +4 -4
- data/lib/regexer/models/character_range_pattern.rb +15 -0
- data/lib/regexer/pattern_builder.rb +12 -7
- data/lib/regexer/utils/any_character_in_value_transformer.rb +27 -0
- data/lib/regexer/utils/handlers/any_character_in_input_value_handlers/base.rb +25 -0
- data/lib/regexer/utils/handlers/any_character_in_input_value_handlers/basic_types_handler.rb +26 -0
- data/lib/regexer/utils/handlers/any_character_in_input_value_handlers/character_range_pattern_handler.rb +24 -0
- data/lib/regexer/utils/handlers/any_character_in_input_value_handlers/from_to_hash_handler.rb +26 -0
- data/lib/regexer/validators/any_character_in_validator.rb +11 -4
- data/lib/regexer/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7467fda4e27fd5886a4fd0c455ad5ebe4cb8db161c6c06bf99bb5912f907c9a
|
4
|
+
data.tar.gz: 98c6ca7fe45449a814575e13fc98cd343dc2fafd7e0e4962261a459212924add
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51192fa1910ff86346c8da105030a9c33810e3c1974b38dc22676a77eb7a5eefab597155132ad174dcd8fee12da2fc746fe703e86418a68c7f97ec2d666b9d3b
|
7
|
+
data.tar.gz: 37490e66c2c56d24a5af2b1dc7c8ad2631f188df0582f391946b02c8e97a13830641a46deb1e61c365276018678c77729f6350bfaac1a550d5d86ef44a0a2418
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Regexer
|
4
|
+
module Models
|
5
|
+
# The main model for character range patterns
|
6
|
+
class CharacterRangePattern
|
7
|
+
attr_reader :from, :to
|
8
|
+
|
9
|
+
def initialize(from, to)
|
10
|
+
@from = Regexp.escape(from)
|
11
|
+
@to = Regexp.escape(to)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -3,10 +3,12 @@ require "regexer/validators/contains_value_validator"
|
|
3
3
|
require "regexer/validators/any_character_in_validator"
|
4
4
|
require "regexer/exceptions/no_block_given_error"
|
5
5
|
require "regexer/models/pattern"
|
6
|
+
require "regexer/models/character_range_pattern"
|
6
7
|
require "regexer/utils/single_entity_checker"
|
7
8
|
require "regexer/utils/quantifier_value_generator"
|
8
9
|
require "regexer/utils/pattern_sanitizer"
|
9
10
|
require "regexer/utils/string_helper"
|
11
|
+
require "regexer/utils/any_character_in_value_transformer"
|
10
12
|
require "pry"
|
11
13
|
|
12
14
|
module Regexer
|
@@ -165,12 +167,7 @@ module Regexer
|
|
165
167
|
def has_any_character_in(*values)
|
166
168
|
combined_pattern = values.reduce("") do |pattern, value|
|
167
169
|
Regexer::Validators::AnyCharacterInValidator.value_valid?(value)
|
168
|
-
|
169
|
-
Regexer::Validators::FromToValidator.valid_values?("ascii_character", value[:from], value[:to])
|
170
|
-
pattern + "#{value[:from]}-#{value[:to]}"
|
171
|
-
else
|
172
|
-
pattern + Regexer::Utils::PatternSanitizer.sanitize(value)
|
173
|
-
end
|
170
|
+
pattern + Regexer::Utils::AnyCharacterInValueTransformer.transform(value)
|
174
171
|
end
|
175
172
|
|
176
173
|
pattern_object = Regexer::Models::Pattern.new("[#{combined_pattern}]")
|
@@ -178,10 +175,17 @@ module Regexer
|
|
178
175
|
pattern_object
|
179
176
|
end
|
180
177
|
|
178
|
+
def has_any_character_not_in(*values)
|
179
|
+
pattern = has_any_character_in(*values)&.raw_pattern
|
180
|
+
|
181
|
+
pattern_object = Regexer::Models::Pattern.new(String.new(pattern).insert(1, "^"), single_entity: true)
|
182
|
+
Regexer::Utils::StringHelper.update_string_pattern(@final_pattern, pattern, pattern_object.raw_pattern)
|
183
|
+
end
|
184
|
+
|
181
185
|
# VALUE BUILDER METHOD THAT IS COMPATIBILE WITH THE PATTERN BUILDER
|
182
186
|
def character_range(from:, to:)
|
183
187
|
Regexer::Validators::FromToValidator.valid_values?("ascii_character", from, to)
|
184
|
-
|
188
|
+
Regexer::Models::CharacterRangePattern.new(from, to)
|
185
189
|
end
|
186
190
|
|
187
191
|
alias word_character has_word_character
|
@@ -197,5 +201,6 @@ module Regexer
|
|
197
201
|
alias none_or_one_instance_of has_none_or_one_instance_of
|
198
202
|
alias group has_group
|
199
203
|
alias any_character_in has_any_character_in
|
204
|
+
alias any_character_not_in has_any_character_not_in
|
200
205
|
end
|
201
206
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/base"
|
4
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/basic_types_handler"
|
5
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/character_range_pattern_handler"
|
6
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/from_to_hash_handler"
|
7
|
+
|
8
|
+
module Regexer
|
9
|
+
module Utils
|
10
|
+
# A Utility Class that transforms a given value based on
|
11
|
+
# its types so that it is compatible with the
|
12
|
+
# has_any_character_in or has_any_character_not_in methods
|
13
|
+
class AnyCharacterInValueTransformer
|
14
|
+
def self.transform(value)
|
15
|
+
basic_types_handler = ::Regexer::Utils::Handlers::AnyCharacterInInputValueHandlers::BasicTypesHandler.new
|
16
|
+
char_range_pattern_handler =
|
17
|
+
::Regexer::Utils::Handlers::AnyCharacterInInputValueHandlers::CharacterRangePatternHandler.new
|
18
|
+
from_to_hash_handler = ::Regexer::Utils::Handlers::AnyCharacterInInputValueHandlers::FromToHashHandler.new
|
19
|
+
|
20
|
+
basic_types_handler.next_handler(char_range_pattern_handler)
|
21
|
+
.next_handler(from_to_hash_handler)
|
22
|
+
|
23
|
+
basic_types_handler.handle(value) || ""
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "regexer/utils/handlers/base_handler"
|
4
|
+
|
5
|
+
module Regexer
|
6
|
+
module Utils
|
7
|
+
module Handlers
|
8
|
+
module AnyCharacterInInputValueHandlers
|
9
|
+
# The base class for the handling of input values of
|
10
|
+
# has_any_character_in method
|
11
|
+
class Base < ::Regexer::Utils::Handlers::BaseHandler
|
12
|
+
def next_handler(handler)
|
13
|
+
@next_handler = handler
|
14
|
+
|
15
|
+
handler
|
16
|
+
end
|
17
|
+
|
18
|
+
def give_to_next_handler(value)
|
19
|
+
@next_handler&.handle(value) if @next_handler
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/base"
|
4
|
+
require "regexer/utils/pattern_sanitizer"
|
5
|
+
|
6
|
+
module Regexer
|
7
|
+
module Utils
|
8
|
+
module Handlers
|
9
|
+
module AnyCharacterInInputValueHandlers
|
10
|
+
# A handler class to check if input value is one of the valid
|
11
|
+
# basic data types e.g. String, Integer, Float
|
12
|
+
# If its one of the basic types, just return a sanitized
|
13
|
+
# value for regex
|
14
|
+
class BasicTypesHandler < Base
|
15
|
+
def handle(value)
|
16
|
+
if value.instance_of?(String) || value.instance_of?(Integer) || value.instance_of?(Float)
|
17
|
+
Regexer::Utils::PatternSanitizer.sanitize(value)
|
18
|
+
else
|
19
|
+
give_to_next_handler(value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/base"
|
4
|
+
require "regexer/models/character_range_pattern"
|
5
|
+
|
6
|
+
module Regexer
|
7
|
+
module Utils
|
8
|
+
module Handlers
|
9
|
+
module AnyCharacterInInputValueHandlers
|
10
|
+
# A handler class to check if input value is a CharacterRangePattern object
|
11
|
+
# if true, should return a string based on values in that object
|
12
|
+
class CharacterRangePatternHandler < Base
|
13
|
+
def handle(value)
|
14
|
+
if value.instance_of?(Regexer::Models::CharacterRangePattern)
|
15
|
+
"#{value.from}-#{value.to}"
|
16
|
+
else
|
17
|
+
give_to_next_handler(value)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/base"
|
4
|
+
require "regexer/models/character_range_pattern"
|
5
|
+
require "regexer/validators/from_to_validator"
|
6
|
+
|
7
|
+
module Regexer
|
8
|
+
module Utils
|
9
|
+
module Handlers
|
10
|
+
module AnyCharacterInInputValueHandlers
|
11
|
+
# A handler class to check if input value is a Hash with from & to keys only
|
12
|
+
# if true, should return a regex escaped string based on values in that Hash
|
13
|
+
class FromToHashHandler < Base
|
14
|
+
def handle(value)
|
15
|
+
if value.instance_of?(Hash) && value.keys == %i[from to]
|
16
|
+
Regexer::Validators::FromToValidator.valid_values?("ascii_character", value[:from], value[:to])
|
17
|
+
"#{Regexp.escape(value[:from])}-#{Regexp.escape(value[:to])}"
|
18
|
+
else
|
19
|
+
give_to_next_handler(value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,15 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "regexer/exceptions/invalid_value_error"
|
4
|
-
require "regexer/models/
|
4
|
+
require "regexer/models/character_range_pattern"
|
5
5
|
|
6
6
|
module Regexer
|
7
7
|
module Validators
|
8
8
|
# A Validator Class for validating values being passed to has_any_character_in Regexer::Pattern method
|
9
9
|
class AnyCharacterInValidator
|
10
10
|
def self.value_valid?(value)
|
11
|
-
|
12
|
-
|
11
|
+
char_range_model = "Regexer::Models::CharacterRangePattern"
|
12
|
+
valid_hash_model = "Hash with from & to keys"
|
13
|
+
valid_basic_types = "String or Integer or Float"
|
14
|
+
message = "Value should only be of type #{valid_basic_types} or #{char_range_model} or #{valid_hash_model}"
|
15
|
+
raise Regexer::Exceptions::InvalidValueError, message unless valid?(value)
|
13
16
|
end
|
14
17
|
|
15
18
|
class << self
|
@@ -27,8 +30,12 @@ module Regexer
|
|
27
30
|
value.instance_of?(Hash) && value.keys == %i[from to]
|
28
31
|
end
|
29
32
|
|
33
|
+
def character_range?(value)
|
34
|
+
value.instance_of?(Regexer::Models::CharacterRangePattern)
|
35
|
+
end
|
36
|
+
|
30
37
|
def valid?(value)
|
31
|
-
number?(value) || string?(value) || from_to_hash?(value)
|
38
|
+
number?(value) || string?(value) || character_range?(value) || from_to_hash?(value)
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
data/lib/regexer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: regexer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genesis Ivan Ilagan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -78,8 +78,14 @@ files:
|
|
78
78
|
- lib/regexer.rb
|
79
79
|
- lib/regexer/exceptions/invalid_value_error.rb
|
80
80
|
- lib/regexer/exceptions/no_block_given_error.rb
|
81
|
+
- lib/regexer/models/character_range_pattern.rb
|
81
82
|
- lib/regexer/models/pattern.rb
|
82
83
|
- lib/regexer/pattern_builder.rb
|
84
|
+
- lib/regexer/utils/any_character_in_value_transformer.rb
|
85
|
+
- lib/regexer/utils/handlers/any_character_in_input_value_handlers/base.rb
|
86
|
+
- lib/regexer/utils/handlers/any_character_in_input_value_handlers/basic_types_handler.rb
|
87
|
+
- lib/regexer/utils/handlers/any_character_in_input_value_handlers/character_range_pattern_handler.rb
|
88
|
+
- lib/regexer/utils/handlers/any_character_in_input_value_handlers/from_to_hash_handler.rb
|
83
89
|
- lib/regexer/utils/handlers/base_handler.rb
|
84
90
|
- lib/regexer/utils/handlers/quantifier_options_handlers/base.rb
|
85
91
|
- lib/regexer/utils/handlers/quantifier_options_handlers/exactly_option_handler.rb
|