regex_generator 0.1.0 → 0.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/Gemfile +1 -0
- data/README.md +7 -6
- data/lib/regex_generator.rb +2 -5
- data/lib/regex_generator/characters_recognizer.rb +5 -2
- data/lib/regex_generator/generator.rb +21 -9
- data/lib/regex_generator/version.rb +1 -1
- data/regex_generator.gemspec +3 -3
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfee60e3cfcb8a136e87fa00d7785edf2b3ae4d1c8726084ce034f1ca980c68d
|
4
|
+
data.tar.gz: 6bbc1cb7dceb4b7f1e16a7d7d4cb8825288fb46b60fba0a4c47bd49d41067053
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3816b3dd44f5754de3bb4f04eb835e927b9d92deb71447eb3333e8a12c01e604aaf8a0c8c66f2009dae61f7dc338034c649cafb1c9238d11a5ec5af8bbc0e58b
|
7
|
+
data.tar.gz: a57ebcee6e9f2ea089461ce2f73265a090207922d5baf3200b033e99c159499cadfb5efe8b9fe70da3acf4e38a93d5ba4bce54184161ebeaa84eb0133071a077
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -30,12 +30,9 @@ You can use additional options to generate regex. For example:
|
|
30
30
|
RegexGenerator.generate('45', 'some text 45', exact_target: true)
|
31
31
|
```
|
32
32
|
|
33
|
-
|
34
|
-
generated for exact target value
|
35
|
-
|
36
|
-
## License
|
37
|
-
|
38
|
-
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
33
|
+
Allowed options:
|
34
|
+
- `:exact_target` - When it `true` regex will generated for exact target value
|
35
|
+
- `:self_recognition` - Symbols that will be represented as itself. Can be string or array
|
39
36
|
|
40
37
|
## Contributing
|
41
38
|
|
@@ -44,3 +41,7 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
44
41
|
- Commit your changes (git commit -am 'Add some feature')
|
45
42
|
- Push to the branch (git push origin my-new-feature)
|
46
43
|
- Create new Pull Reques
|
44
|
+
|
45
|
+
## License
|
46
|
+
|
47
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/regex_generator.rb
CHANGED
@@ -5,20 +5,17 @@ require 'regex_generator/characters_recognizer'
|
|
5
5
|
require 'regex_generator/exceptions'
|
6
6
|
|
7
7
|
module RegexGenerator
|
8
|
-
# rubocop:disable Metrics/LineLength
|
9
|
-
#
|
10
8
|
# Generates regex by text and target text
|
11
9
|
#
|
12
10
|
# @param target [String] what you want to find
|
13
11
|
# @param text [String] source text
|
14
12
|
# @param options [Hash] options to generate regex with
|
15
|
-
# @option options [true, false] :exact_target to generate regex
|
13
|
+
# @option options [true, false] :exact_target to generate regex
|
14
|
+
# with exact target value
|
16
15
|
# @return [Regexp]
|
17
16
|
#
|
18
17
|
# @example Generate regex
|
19
18
|
# RegexGenerator.generate('45', 'some text 45') #=> /[a-z]+\s[a-z]+(\d+)/
|
20
|
-
#
|
21
|
-
# rubocop:enable Metrics/LineLength
|
22
19
|
def self.generate(target, text, options = {})
|
23
20
|
RegexGenerator::Generator.new(target, text, options).generate
|
24
21
|
end
|
@@ -5,8 +5,10 @@ module RegexGenerator
|
|
5
5
|
# Creates array with regex representation for each char from the text
|
6
6
|
#
|
7
7
|
# @param text [String]
|
8
|
+
# @param options [Hash] options to recognize regex patterns with
|
9
|
+
# @option options [Array] :self_recognition to recognize chars as itself
|
8
10
|
# @return [Array]
|
9
|
-
def self.recognize(text)
|
11
|
+
def self.recognize(text, options = {})
|
10
12
|
return [] unless text
|
11
13
|
|
12
14
|
result = []
|
@@ -16,7 +18,8 @@ module RegexGenerator
|
|
16
18
|
|
17
19
|
escaped_char = Regexp.escape(char)
|
18
20
|
res_pattern = escaped_char
|
19
|
-
res_pattern = pattern.source if char.eql?(escaped_char)
|
21
|
+
res_pattern = pattern.source if (char.eql?(escaped_char) &&
|
22
|
+
!options[:self_recognition]&.include?(escaped_char)) || char[/\s/]
|
20
23
|
break result << res_pattern
|
21
24
|
end
|
22
25
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
module RegexGenerator
|
2
2
|
class Generator
|
3
|
-
# rubocop:disable Metrics/LineLength
|
4
|
-
#
|
5
3
|
# @param target [String] what you want to find
|
6
4
|
# @param text [String] source text
|
7
5
|
# @param options [Hash] options to generate regex with
|
8
|
-
# @option options [true, false] :exact_target to generate regex
|
9
|
-
#
|
10
|
-
#
|
6
|
+
# @option options [true, false] :exact_target to generate regex
|
7
|
+
# with exact target value
|
8
|
+
# @option options [String, Array] :self_recognition to recognize chars as
|
9
|
+
# itself
|
11
10
|
def initialize(target, text, options = {})
|
12
11
|
@text = text
|
13
12
|
@target = target
|
@@ -15,15 +14,17 @@ module RegexGenerator
|
|
15
14
|
end
|
16
15
|
|
17
16
|
# @return [Regexp]
|
17
|
+
# @raise [TargetNotFoundError] if target text was not found in the text
|
18
18
|
def generate
|
19
19
|
raise RegexGenerator::TargetNotFoundError unless @text[@target]
|
20
20
|
|
21
|
-
|
21
|
+
string_regex_chars = recognize(cut_nearest_text, options)
|
22
|
+
string_patterns_array = slice_to_identicals(string_regex_chars)
|
22
23
|
string_regex_str = join_patterns(string_patterns_array)
|
23
24
|
target_regex_str = if @options[:exact_target]
|
24
25
|
Regexp.escape @target
|
25
26
|
else
|
26
|
-
target_patterns_array = slice_to_identicals(recognize(@target))
|
27
|
+
target_patterns_array = slice_to_identicals(recognize(@target, options))
|
27
28
|
join_patterns(target_patterns_array)
|
28
29
|
end
|
29
30
|
|
@@ -61,8 +62,19 @@ module RegexGenerator
|
|
61
62
|
end.join
|
62
63
|
end
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
# Prepares options
|
66
|
+
def options
|
67
|
+
return @options unless @options.any?
|
68
|
+
|
69
|
+
if @options[:self_recognition].is_a? String
|
70
|
+
@options[:self_recognition] = @options[:self_recognition].chars
|
71
|
+
end
|
72
|
+
|
73
|
+
@options
|
74
|
+
end
|
75
|
+
|
76
|
+
def recognize(text, options)
|
77
|
+
RegexGenerator::CharactersRecognizer.recognize(text, options)
|
66
78
|
end
|
67
79
|
end
|
68
80
|
end
|
data/regex_generator.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
|
-
spec.add_development_dependency "bundler", "
|
26
|
-
spec.add_development_dependency "rake", "
|
27
|
-
spec.add_development_dependency "rspec", "
|
25
|
+
spec.add_development_dependency "bundler", ">= 1.16"
|
26
|
+
spec.add_development_dependency "rake", ">= 10.0"
|
27
|
+
spec.add_development_dependency "rspec", ">= 3.0"
|
28
28
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: regex_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- o.vykhor
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.16'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.16'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
description:
|