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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92070599c885225a8466e24f2bf46d3b5aea40c2ec205e8da99af425bf00d4e3
4
- data.tar.gz: 42ce090a8b56be47aa2ca63caf8ec4c85868ff7229c7fec327b02086413b2327
3
+ metadata.gz: d7467fda4e27fd5886a4fd0c455ad5ebe4cb8db161c6c06bf99bb5912f907c9a
4
+ data.tar.gz: 98c6ca7fe45449a814575e13fc98cd343dc2fafd7e0e4962261a459212924add
5
5
  SHA512:
6
- metadata.gz: 8040c4d4a11602ccdf7ad2059f0474d57890af8613ba678c911dd6f2699cff6a74b18b64fbe56ef3a8b86656f849b1520ff06c4fdc4f7b8a7686dd408d008c4a
7
- data.tar.gz: 142da4ce9ad77977a7379e514be5206647b08eb727f0422fa31af97827a29d552ddd0ed687f6a79cdababf0be6f4e00481bbd336dbde4c8c79f0ad507a935653
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
- if value.instance_of?(Hash)
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
- { from: Regexp.escape(from), to: Regexp.escape(to) }
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/pattern"
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
- error_message = "Value should only be of type String or Integer or Hash with from & to keys"
12
- raise Regexer::Exceptions::InvalidValueError, error_message unless valid?(value)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Regexer
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.0"
5
5
  end
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.0.0
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-08-08 00:00:00.000000000 Z
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