regexer 1.0.0 → 1.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 +4 -4
- data/lib/regexer/models/character_range_pattern.rb +15 -0
- data/lib/regexer/models/pattern.rb +19 -2
- data/lib/regexer/pattern_builder.rb +132 -29
- data/lib/regexer/utils/any_character_in_value_transformer.rb +31 -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/utils/handlers/any_character_in_input_value_handlers/regex_shorthand_pattern_handler.rb +25 -0
- data/lib/regexer/utils/string_helper.rb +5 -0
- data/lib/regexer/validators/any_character_in_validator.rb +20 -3
- data/lib/regexer/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa1cee078c860f7e156663ec53e028f497b80ad1ab75dd4ddd63bb6dcc863eac
|
4
|
+
data.tar.gz: 2fe31a71bbe3fedc1c5e5fc21fef2cbe8f9109266c7fb57bee7fce477655a396
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ba8841c57b7f87ad5c6a9bfdae871ab31262f2c158f48625fada5a12405762f419f533f9e7ed745a0a7f0692d2165267857698da970f4ded1cd01526a8c734a
|
7
|
+
data.tar.gz: 58610f6cb9a40103a0c59f695b1717de7b3704d57f34798f1a7dd0615c56c85c29c29d6a55f46f7a1350e12a330d6f7a8c40c3c15bf4deb49be40c429990bfa3
|
@@ -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
|
@@ -1,15 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "regexer/exceptions/invalid_value_error"
|
4
|
+
|
3
5
|
module Regexer
|
4
6
|
module Models
|
5
7
|
# The main model for the patterns being build by pattern builder
|
6
8
|
class Pattern
|
7
9
|
attr_reader :raw_pattern
|
8
10
|
|
9
|
-
def initialize(pattern, regex_escaped: true, single_entity: true)
|
10
|
-
@raw_pattern = pattern
|
11
|
+
def initialize(pattern, regex_escaped: true, single_entity: true, regex_shorthand_character: false)
|
12
|
+
@raw_pattern = String.new(pattern)
|
11
13
|
@regex_escaped = regex_escaped
|
12
14
|
@single_entity = single_entity
|
15
|
+
@regex_shorthand_character = regex_shorthand_character
|
16
|
+
end
|
17
|
+
|
18
|
+
def +(other)
|
19
|
+
unless other.is_a?(Regexer::Models::Pattern)
|
20
|
+
raise TypeError,
|
21
|
+
"Unable to add #{other.class} to Regexer::Models::Pattern"
|
22
|
+
end
|
23
|
+
|
24
|
+
Regexer::Models::Pattern.new(@raw_pattern + other.raw_pattern, regex_escaped: @regex_escaped,
|
25
|
+
single_entity: @single_entity)
|
13
26
|
end
|
14
27
|
|
15
28
|
def regex_escaped?
|
@@ -23,6 +36,10 @@ module Regexer
|
|
23
36
|
def regex
|
24
37
|
/#{raw_pattern}/
|
25
38
|
end
|
39
|
+
|
40
|
+
def regex_shorthand_character?
|
41
|
+
@regex_shorthand_character
|
42
|
+
end
|
26
43
|
end
|
27
44
|
end
|
28
45
|
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
|
@@ -21,6 +23,10 @@ module Regexer
|
|
21
23
|
Regexer::Models::Pattern.new(@final_pattern, single_entity: false)
|
22
24
|
end
|
23
25
|
|
26
|
+
def append_pattern(&block)
|
27
|
+
instance_exec(&block)
|
28
|
+
end
|
29
|
+
|
24
30
|
private
|
25
31
|
|
26
32
|
# STRUCTS
|
@@ -97,30 +103,12 @@ module Regexer
|
|
97
103
|
pattern_object
|
98
104
|
end
|
99
105
|
|
100
|
-
def has_word_character
|
101
|
-
pattern_object = Regexer::Models::Pattern.new("\\w")
|
102
|
-
@final_pattern += pattern_object.raw_pattern
|
103
|
-
pattern_object
|
104
|
-
end
|
105
|
-
|
106
106
|
def _or_
|
107
107
|
pattern_object = Regexer::Models::Pattern.new("\|")
|
108
108
|
@final_pattern += pattern_object.raw_pattern
|
109
109
|
pattern_object
|
110
110
|
end
|
111
111
|
|
112
|
-
def has_whitespace_character
|
113
|
-
pattern_object = Regexer::Models::Pattern.new("\\s")
|
114
|
-
@final_pattern += pattern_object.raw_pattern
|
115
|
-
pattern_object
|
116
|
-
end
|
117
|
-
|
118
|
-
def has_digit_character
|
119
|
-
pattern_object = Regexer::Models::Pattern.new("\\d")
|
120
|
-
@final_pattern += pattern_object.raw_pattern
|
121
|
-
pattern_object
|
122
|
-
end
|
123
|
-
|
124
112
|
def has_alphanumeric_character
|
125
113
|
pattern_object = Regexer::Models::Pattern.new("[A-Za-z0-9]")
|
126
114
|
@final_pattern += pattern_object.raw_pattern
|
@@ -158,19 +146,22 @@ module Regexer
|
|
158
146
|
value = Regexer::PatternBuilder.new(&block).result
|
159
147
|
sanitized_pattern = Regexer::Utils::PatternSanitizer.sanitize(value)
|
160
148
|
pattern_object = Regexer::Models::Pattern.new("(#{sanitized_pattern})")
|
161
|
-
|
149
|
+
@final_pattern += pattern_object.raw_pattern
|
162
150
|
pattern_object
|
163
151
|
end
|
164
152
|
|
165
153
|
def has_any_character_in(*values)
|
154
|
+
all_pattern_model_values = ""
|
166
155
|
combined_pattern = values.reduce("") do |pattern, value|
|
167
156
|
Regexer::Validators::AnyCharacterInValidator.value_valid?(value)
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
157
|
+
|
158
|
+
all_pattern_model_values << value.raw_pattern if value.instance_of?(::Regexer::Models::Pattern)
|
159
|
+
|
160
|
+
pattern + Regexer::Utils::AnyCharacterInValueTransformer.transform(value)
|
161
|
+
end
|
162
|
+
|
163
|
+
unless all_pattern_model_values.empty?
|
164
|
+
::Regexer::Utils::StringHelper.remove_pattern_in_the_end_of_string(@final_pattern, all_pattern_model_values)
|
174
165
|
end
|
175
166
|
|
176
167
|
pattern_object = Regexer::Models::Pattern.new("[#{combined_pattern}]")
|
@@ -178,15 +169,108 @@ module Regexer
|
|
178
169
|
pattern_object
|
179
170
|
end
|
180
171
|
|
172
|
+
def has_any_character_not_in(*values)
|
173
|
+
pattern = has_any_character_in(*values)&.raw_pattern
|
174
|
+
|
175
|
+
pattern_object = Regexer::Models::Pattern.new(String.new(pattern).insert(1, "^"), single_entity: true)
|
176
|
+
Regexer::Utils::StringHelper.update_string_pattern(@final_pattern, pattern, pattern_object.raw_pattern)
|
177
|
+
pattern_object
|
178
|
+
end
|
179
|
+
|
180
|
+
# Shorthand characters
|
181
|
+
def has_whitespace_character
|
182
|
+
pattern_object = Regexer::Models::Pattern.new("\\s", regex_shorthand_character: true)
|
183
|
+
@final_pattern += pattern_object.raw_pattern
|
184
|
+
pattern_object
|
185
|
+
end
|
186
|
+
|
187
|
+
def has_non_whitespace_character
|
188
|
+
pattern_object = Regexer::Models::Pattern.new("\\S", regex_shorthand_character: true)
|
189
|
+
@final_pattern += pattern_object.raw_pattern
|
190
|
+
pattern_object
|
191
|
+
end
|
192
|
+
|
193
|
+
def has_digit_character
|
194
|
+
pattern_object = Regexer::Models::Pattern.new("\\d", regex_shorthand_character: true)
|
195
|
+
@final_pattern += pattern_object.raw_pattern
|
196
|
+
pattern_object
|
197
|
+
end
|
198
|
+
|
199
|
+
def has_word_character
|
200
|
+
pattern_object = Regexer::Models::Pattern.new("\\w", regex_shorthand_character: true)
|
201
|
+
@final_pattern += pattern_object.raw_pattern
|
202
|
+
pattern_object
|
203
|
+
end
|
204
|
+
|
205
|
+
def has_non_digit_character
|
206
|
+
pattern_object = Regexer::Models::Pattern.new("\\D", regex_shorthand_character: true)
|
207
|
+
@final_pattern += pattern_object.raw_pattern
|
208
|
+
pattern_object
|
209
|
+
end
|
210
|
+
|
211
|
+
def has_newline_character
|
212
|
+
pattern_object = Regexer::Models::Pattern.new("\\n", regex_shorthand_character: true)
|
213
|
+
@final_pattern += pattern_object.raw_pattern
|
214
|
+
pattern_object
|
215
|
+
end
|
216
|
+
|
217
|
+
def has_tab_character
|
218
|
+
pattern_object = Regexer::Models::Pattern.new("\\t", regex_shorthand_character: true)
|
219
|
+
@final_pattern += pattern_object.raw_pattern
|
220
|
+
pattern_object
|
221
|
+
end
|
222
|
+
|
223
|
+
def has_vertical_tab_character
|
224
|
+
pattern_object = Regexer::Models::Pattern.new("\\v", regex_shorthand_character: true)
|
225
|
+
@final_pattern += pattern_object.raw_pattern
|
226
|
+
pattern_object
|
227
|
+
end
|
228
|
+
|
229
|
+
def has_carriage_return_character
|
230
|
+
pattern_object = Regexer::Models::Pattern.new("\\r", regex_shorthand_character: true)
|
231
|
+
@final_pattern += pattern_object.raw_pattern
|
232
|
+
pattern_object
|
233
|
+
end
|
234
|
+
|
235
|
+
def has_form_feed_character
|
236
|
+
pattern_object = Regexer::Models::Pattern.new("\\f", regex_shorthand_character: true)
|
237
|
+
@final_pattern += pattern_object.raw_pattern
|
238
|
+
pattern_object
|
239
|
+
end
|
240
|
+
|
241
|
+
def has_non_word_character
|
242
|
+
pattern_object = Regexer::Models::Pattern.new("\\W", regex_shorthand_character: true)
|
243
|
+
@final_pattern += pattern_object.raw_pattern
|
244
|
+
pattern_object
|
245
|
+
end
|
246
|
+
|
247
|
+
def contains_a_word_ending_with(value)
|
248
|
+
pattern = contains(value)&.raw_pattern
|
249
|
+
pattern_object = Regexer::Models::Pattern.new("#{pattern}\\b", single_entity: false)
|
250
|
+
Regexer::Utils::StringHelper.update_string_pattern(@final_pattern, pattern, pattern_object.raw_pattern)
|
251
|
+
pattern_object
|
252
|
+
end
|
253
|
+
|
254
|
+
def contains_a_word_starting_with(value)
|
255
|
+
pattern = contains(value)&.raw_pattern
|
256
|
+
pattern_object = Regexer::Models::Pattern.new("\\b#{pattern}", single_entity: false)
|
257
|
+
Regexer::Utils::StringHelper.update_string_pattern(@final_pattern, pattern, pattern_object.raw_pattern)
|
258
|
+
pattern_object
|
259
|
+
end
|
260
|
+
|
261
|
+
def contains_the_word(value)
|
262
|
+
pattern = contains(value)&.raw_pattern
|
263
|
+
pattern_object = Regexer::Models::Pattern.new("\\b#{pattern}\\b", single_entity: false)
|
264
|
+
Regexer::Utils::StringHelper.update_string_pattern(@final_pattern, pattern, pattern_object.raw_pattern)
|
265
|
+
pattern_object
|
266
|
+
end
|
267
|
+
|
181
268
|
# VALUE BUILDER METHOD THAT IS COMPATIBILE WITH THE PATTERN BUILDER
|
182
269
|
def character_range(from:, to:)
|
183
270
|
Regexer::Validators::FromToValidator.valid_values?("ascii_character", from, to)
|
184
|
-
|
271
|
+
Regexer::Models::CharacterRangePattern.new(from, to)
|
185
272
|
end
|
186
273
|
|
187
|
-
alias word_character has_word_character
|
188
|
-
alias whitespace_character has_whitespace_character
|
189
|
-
alias digit_character has_digit_character
|
190
274
|
alias alphanumeric_character has_alphanumeric_character
|
191
275
|
alias any_character_except_new_line has_any_character_except_new_line
|
192
276
|
alias letter has_letter
|
@@ -197,5 +281,24 @@ module Regexer
|
|
197
281
|
alias none_or_one_instance_of has_none_or_one_instance_of
|
198
282
|
alias group has_group
|
199
283
|
alias any_character_in has_any_character_in
|
284
|
+
alias any_character_not_in has_any_character_not_in
|
285
|
+
|
286
|
+
# Shorthand character alias methods
|
287
|
+
alias word_character has_word_character
|
288
|
+
alias non_word_character has_non_word_character
|
289
|
+
alias whitespace_character has_whitespace_character
|
290
|
+
alias non_whitespace_character has_non_whitespace_character
|
291
|
+
alias digit_character has_digit_character
|
292
|
+
alias non_digit_character has_non_digit_character
|
293
|
+
alias newline_character has_newline_character
|
294
|
+
alias tab_character has_tab_character
|
295
|
+
alias vertical_tab_character has_vertical_tab_character
|
296
|
+
alias carriage_return_character has_carriage_return_character
|
297
|
+
alias form_feed_character has_form_feed_character
|
298
|
+
alias the_word contains_the_word
|
299
|
+
alias contains_a_word_with contains_the_word
|
300
|
+
alias a_word_with contains_the_word
|
301
|
+
alias a_word_starting_with contains_a_word_starting_with
|
302
|
+
alias a_word_ending_with contains_a_word_ending_with
|
200
303
|
end
|
201
304
|
end
|
@@ -0,0 +1,31 @@
|
|
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
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/regex_shorthand_pattern_handler"
|
8
|
+
|
9
|
+
module Regexer
|
10
|
+
module Utils
|
11
|
+
# A Utility Class that transforms a given value based on
|
12
|
+
# its types so that it is compatible with the
|
13
|
+
# has_any_character_in or has_any_character_not_in methods
|
14
|
+
class AnyCharacterInValueTransformer
|
15
|
+
def self.transform(value)
|
16
|
+
basic_types_handler = ::Regexer::Utils::Handlers::AnyCharacterInInputValueHandlers::BasicTypesHandler.new
|
17
|
+
from_to_hash_handler = ::Regexer::Utils::Handlers::AnyCharacterInInputValueHandlers::FromToHashHandler.new
|
18
|
+
char_range_pattern_handler =
|
19
|
+
::Regexer::Utils::Handlers::AnyCharacterInInputValueHandlers::CharacterRangePatternHandler.new
|
20
|
+
regex_shorthand_pattern_handler =
|
21
|
+
::Regexer::Utils::Handlers::AnyCharacterInInputValueHandlers::RegexShorthandPatternHandler.new
|
22
|
+
|
23
|
+
basic_types_handler.next_handler(char_range_pattern_handler)
|
24
|
+
.next_handler(from_to_hash_handler)
|
25
|
+
.next_handler(regex_shorthand_pattern_handler)
|
26
|
+
|
27
|
+
basic_types_handler.handle(value) || ""
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
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
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "regexer/utils/handlers/any_character_in_input_value_handlers/base"
|
4
|
+
require "regexer/models/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 Regexer::Models::Pattern object
|
11
|
+
# tagged as regex shorthand character
|
12
|
+
# this returns the raw_pattern of that object
|
13
|
+
class RegexShorthandPatternHandler < Base
|
14
|
+
def handle(value)
|
15
|
+
if value.instance_of?(Regexer::Models::Pattern) && value.regex_shorthand_character?
|
16
|
+
value.raw_pattern
|
17
|
+
else
|
18
|
+
give_to_next_handler(value)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -10,6 +10,11 @@ module Regexer
|
|
10
10
|
pattern_to_update << new_pattern
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
def self.remove_pattern_in_the_end_of_string(pattern_to_update, pattern_to_remove)
|
15
|
+
pattern_to_update
|
16
|
+
.sub!(/(#{Regexp.escape(pattern_to_remove)})$/) { "" } if pattern_to_update.end_with?(pattern_to_remove)
|
17
|
+
end
|
13
18
|
end
|
14
19
|
end
|
15
20
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "regexer/exceptions/invalid_value_error"
|
4
|
+
require "regexer/models/character_range_pattern"
|
4
5
|
require "regexer/models/pattern"
|
5
6
|
|
6
7
|
module Regexer
|
@@ -8,8 +9,12 @@ module Regexer
|
|
8
9
|
# A Validator Class for validating values being passed to has_any_character_in Regexer::Pattern method
|
9
10
|
class AnyCharacterInValidator
|
10
11
|
def self.value_valid?(value)
|
11
|
-
|
12
|
-
|
12
|
+
char_range = "Regexer::Models::CharacterRangePattern"
|
13
|
+
regex_shorthand_pattern = "Regexer::Models::Pattern as regex shorthand character"
|
14
|
+
hash_model = "Hash with from & to keys"
|
15
|
+
basic_types = "String, Integer, Float"
|
16
|
+
message = "Value should be one of type #{basic_types}, #{char_range}, #{hash_model}, #{regex_shorthand_pattern}"
|
17
|
+
raise Regexer::Exceptions::InvalidValueError, message unless valid?(value)
|
13
18
|
end
|
14
19
|
|
15
20
|
class << self
|
@@ -27,8 +32,20 @@ module Regexer
|
|
27
32
|
value.instance_of?(Hash) && value.keys == %i[from to]
|
28
33
|
end
|
29
34
|
|
35
|
+
def character_range?(value)
|
36
|
+
value.instance_of?(Regexer::Models::CharacterRangePattern)
|
37
|
+
end
|
38
|
+
|
39
|
+
def regex_shorthand_character_pattern?(value)
|
40
|
+
value.instance_of?(Regexer::Models::Pattern) && value.regex_shorthand_character?
|
41
|
+
end
|
42
|
+
|
30
43
|
def valid?(value)
|
31
|
-
number?(value) ||
|
44
|
+
number?(value) ||
|
45
|
+
string?(value) ||
|
46
|
+
character_range?(value) ||
|
47
|
+
from_to_hash?(value) ||
|
48
|
+
regex_shorthand_character_pattern?(value)
|
32
49
|
end
|
33
50
|
end
|
34
51
|
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.2.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:
|
11
|
+
date: 2023-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -78,8 +78,15 @@ 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
|
89
|
+
- lib/regexer/utils/handlers/any_character_in_input_value_handlers/regex_shorthand_pattern_handler.rb
|
83
90
|
- lib/regexer/utils/handlers/base_handler.rb
|
84
91
|
- lib/regexer/utils/handlers/quantifier_options_handlers/base.rb
|
85
92
|
- lib/regexer/utils/handlers/quantifier_options_handlers/exactly_option_handler.rb
|