string_pattern 2.2.3 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|