string_pattern 2.2.3 → 2.3.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/README.md +11 -0
- data/lib/string/pattern/add_to_ruby.rb +43 -13
- data/lib/string/pattern/generate.rb +10 -0
- data/lib/string_pattern.rb +8 -1
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b9ea7310d3fb561b37d8b0753360ddd5742188a2f71b68560a121d716d65083
|
4
|
+
data.tar.gz: a0504e61ff66a749d7c0b0fcc36ad629474d793abd78bc0456bdd6a9ddeae7f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ade8ead8f7434fb1893f62e44523245fb52776a24ffc9f9f548a16f790ec035f2411d223203886571decd7c7455b6f56cf41a7e62c491910762c210754e11f7
|
7
|
+
data.tar.gz: bbb68322396f6017f6f6f1b6190b1e14cc0a3cea804efa66f6527f892be032fe5cebc321e39ea399e0af9f69ee6f5e4ef1c7a9241ac97541cf6d4aac3191c658
|
data/README.md
CHANGED
@@ -428,6 +428,17 @@ StringPattern.optimistic = true
|
|
428
428
|
#>SAAERfixedtext988
|
429
429
|
```
|
430
430
|
|
431
|
+
#### block_list
|
432
|
+
|
433
|
+
To specify which words will be avoided from the results
|
434
|
+
|
435
|
+
```ruby
|
436
|
+
StringPattern.block_list = ['example', 'wrong', 'ugly']
|
437
|
+
StringPattern.block_list_enabled = true
|
438
|
+
"2-20:Tn".gen #>AAñ34Ef99éNOP
|
439
|
+
```
|
440
|
+
|
441
|
+
|
431
442
|
## Contributing
|
432
443
|
|
433
444
|
Bug reports and pull requests are welcome on GitHub at https://github.com/marioruiz/string_pattern.
|
@@ -90,11 +90,14 @@ class Regexp
|
|
90
90
|
pats = ""
|
91
91
|
patg = [] # for (aa|bb|cc) group
|
92
92
|
set = false
|
93
|
+
set_negate = false
|
94
|
+
options = []
|
93
95
|
capture = false
|
94
96
|
|
95
97
|
range = ""
|
96
98
|
fixed_text = false
|
97
|
-
|
99
|
+
options = regexp.to_s.scan(/\A\(\?([mix]*)\-[mix]*:/).join.split('')
|
100
|
+
last_char = (regexp.to_s.gsub(/\A\(\?[mix]*\-[mix]*:/, "").length) - 2
|
98
101
|
Regexp::Scanner.scan regexp do |type, token, text, ts, te|
|
99
102
|
if type == :escape
|
100
103
|
if token == :dot
|
@@ -126,9 +129,9 @@ class Regexp
|
|
126
129
|
pata[-1] += pats.chop
|
127
130
|
else
|
128
131
|
if pats.size == 2
|
129
|
-
pata << pats.chop
|
132
|
+
pata << pats.chop
|
130
133
|
else
|
131
|
-
pata << "1:[#{pats}"
|
134
|
+
pata << "1:[#{pats}"
|
132
135
|
end
|
133
136
|
if last_char == te and type == :literal and token == :literal
|
134
137
|
pata << text
|
@@ -147,7 +150,6 @@ class Regexp
|
|
147
150
|
pats = ""
|
148
151
|
end
|
149
152
|
fixed_text = false
|
150
|
-
|
151
153
|
case token
|
152
154
|
when :open
|
153
155
|
set = true
|
@@ -158,7 +160,13 @@ class Regexp
|
|
158
160
|
if pats[-1] == "["
|
159
161
|
pats.chop!
|
160
162
|
else
|
161
|
-
|
163
|
+
if set_negate
|
164
|
+
pats+="%]*"
|
165
|
+
set_negate = false
|
166
|
+
else
|
167
|
+
pats += "]"
|
168
|
+
end
|
169
|
+
|
162
170
|
end
|
163
171
|
elsif type == :group
|
164
172
|
capture = false
|
@@ -169,6 +177,11 @@ class Regexp
|
|
169
177
|
pats = ""
|
170
178
|
end
|
171
179
|
end
|
180
|
+
when :negate
|
181
|
+
if set and pats[-1] == '['
|
182
|
+
pats+="%"
|
183
|
+
set_negate = true
|
184
|
+
end
|
172
185
|
when :capture
|
173
186
|
capture = true if type == :group
|
174
187
|
when :alternation
|
@@ -182,6 +195,7 @@ class Regexp
|
|
182
195
|
end
|
183
196
|
end
|
184
197
|
when :range
|
198
|
+
pats.chop! if options.include?('i')
|
185
199
|
range = pats[-1]
|
186
200
|
pats.chop!
|
187
201
|
when :digit
|
@@ -212,28 +226,44 @@ class Regexp
|
|
212
226
|
pats = text[-1]
|
213
227
|
else
|
214
228
|
pats += text
|
229
|
+
pats += text.upcase if options.include?('i')
|
215
230
|
end
|
216
231
|
else
|
217
232
|
range = range + "-" + text
|
218
233
|
if range == "a-z"
|
219
|
-
|
234
|
+
if options.include?('i')
|
235
|
+
pats = "L" + pats
|
236
|
+
else
|
237
|
+
pats = "x" + pats
|
238
|
+
end
|
220
239
|
elsif range == "A-Z"
|
221
|
-
|
240
|
+
if options.include?('i')
|
241
|
+
pats = "L" + pats
|
242
|
+
else
|
243
|
+
pats = "X" + pats
|
244
|
+
end
|
222
245
|
elsif range == "0-9"
|
223
246
|
pats = "n" + pats
|
224
247
|
else
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
248
|
+
if set
|
249
|
+
pats += (range[0]..range[2]).to_a.join
|
250
|
+
if options.include?('i')
|
251
|
+
pats += (range[0]..range[2]).to_a.join.upcase
|
252
|
+
end
|
253
|
+
else
|
254
|
+
trange = (range[0]..range[2]).to_a.join
|
255
|
+
if options.include?('i')
|
256
|
+
trange += trange.upcase
|
257
|
+
end
|
258
|
+
pats += "[" + trange + "]"
|
259
|
+
end
|
230
260
|
end
|
231
261
|
range = ""
|
232
262
|
end
|
233
263
|
pats = "[" + pats + "]" unless set
|
234
264
|
when :interval
|
235
265
|
size = text.sub(",", "-").sub("{", "").sub("}", "")
|
236
|
-
size.chop
|
266
|
+
size+=(default_infinite+size.chop.to_i).to_s if size[-1] == "-"
|
237
267
|
pats = size + ":" + pats
|
238
268
|
if !patg.empty?
|
239
269
|
patg << pats
|
@@ -568,6 +568,16 @@ class StringPattern
|
|
568
568
|
good_result = true
|
569
569
|
end
|
570
570
|
end
|
571
|
+
if @block_list_enabled
|
572
|
+
if @block_list.is_a?(Array)
|
573
|
+
@block_list.each do |bl|
|
574
|
+
if string.match?(/#{bl}/i)
|
575
|
+
good_result = false
|
576
|
+
break
|
577
|
+
end
|
578
|
+
end
|
579
|
+
end
|
580
|
+
end
|
571
581
|
end until good_result or tries > 10000
|
572
582
|
unless good_result
|
573
583
|
puts "Not possible to generate the string on StringPattern.generate: #{pattern.inspect}, expected_errors: #{expected_errors.inspect}"
|
data/lib/string_pattern.rb
CHANGED
@@ -25,9 +25,13 @@ require_relative "string/pattern/validate"
|
|
25
25
|
# In case using regular expressions the maximum when using * or + for repetitions
|
26
26
|
# word_separator: (String, default: '_')
|
27
27
|
# When generating words using symbol types 'w' or 'p' the character to separate the english or spanish words.
|
28
|
+
# block_list: (Array, default: empty)
|
29
|
+
# Array of words to be avoided from resultant strings.
|
30
|
+
# block_list_enabled: (TrueFalse, default: false)
|
31
|
+
# If true block_list will be take in consideration
|
28
32
|
class StringPattern
|
29
33
|
class << self
|
30
|
-
attr_accessor :national_chars, :optimistic, :dont_repeat, :cache, :cache_values, :default_infinite, :word_separator
|
34
|
+
attr_accessor :national_chars, :optimistic, :dont_repeat, :cache, :cache_values, :default_infinite, :word_separator, :block_list, :block_list_enabled
|
31
35
|
end
|
32
36
|
@national_chars = (("a".."z").to_a + ("A".."Z").to_a).join
|
33
37
|
@optimistic = true
|
@@ -36,6 +40,8 @@ class StringPattern
|
|
36
40
|
@dont_repeat = false
|
37
41
|
@default_infinite = 10
|
38
42
|
@word_separator = "_"
|
43
|
+
@block_list_enabled = false
|
44
|
+
@block_list = []
|
39
45
|
NUMBER_SET = ("0".."9").to_a
|
40
46
|
SPECIAL_SET = [" ", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "{", "}", "[", "]", "'", ";", ":", "?", ">", "<", "`", "|", "/", '"']
|
41
47
|
ALPHA_SET_LOWER = ("a".."z").to_a
|
@@ -56,4 +62,5 @@ class StringPattern
|
|
56
62
|
@cache = Hash.new()
|
57
63
|
@national_chars = par
|
58
64
|
end
|
65
|
+
|
59
66
|
end
|
metadata
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: string_pattern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mario Ruiz
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: regexp_parser
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.3.0
|
20
17
|
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
19
|
+
version: '2.5'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.5.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.3.0
|
30
27
|
- - "~>"
|
31
28
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
29
|
+
version: '2.5'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.5.0
|
33
33
|
description: 'Easily generate strings supplying a very simple pattern. ''10-20:Xn/x/''.generate
|
34
34
|
#>qBstvc6JN8ra. Generate random strings using a regular expression (Regexp): /[a-z0-9]{2,5}w+/.gen
|
35
35
|
. Also generate words in English or Spanish. Perfect to be used in test data factories.
|
@@ -68,7 +68,7 @@ homepage: https://github.com/MarioRuiz/string_pattern
|
|
68
68
|
licenses:
|
69
69
|
- MIT
|
70
70
|
metadata: {}
|
71
|
-
post_install_message:
|
71
|
+
post_install_message:
|
72
72
|
rdoc_options: []
|
73
73
|
require_paths:
|
74
74
|
- lib
|
@@ -83,8 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
requirements: []
|
86
|
-
rubygems_version: 3.
|
87
|
-
signing_key:
|
86
|
+
rubygems_version: 3.2.15
|
87
|
+
signing_key:
|
88
88
|
specification_version: 4
|
89
89
|
summary: 'Generate easily random strings following a simple pattern or regular expression.
|
90
90
|
''10-20:Xn/x/''.generate #>qBstvc6JN8ra. Also generate words in English or Spanish.
|