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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c451e4295f5c62ea8b7c8113815a0c7a2b5c70a739826fdf651a7fb99a75be48
4
- data.tar.gz: 2445e4958a2bf96b70e0ce99f4df31ab02a61183a496289a1b20b3360e2fecaf
3
+ metadata.gz: 7b9ea7310d3fb561b37d8b0753360ddd5742188a2f71b68560a121d716d65083
4
+ data.tar.gz: a0504e61ff66a749d7c0b0fcc36ad629474d793abd78bc0456bdd6a9ddeae7f7
5
5
  SHA512:
6
- metadata.gz: 650a16f6a2cda5c762f2f685b4fe515848135a6c4995ba08504ec80435696d4e1ab6289adaf4aae839ca0d77978338d2603411a7330fe2db0f2bede587554cfd
7
- data.tar.gz: 996deb9300188c286dc0a051f744262367f928192e5c30fcd981f7f964283463f2dc606c4876163378397b767ed235f51bc749bac55e801866810aa19318da91
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
- last_char = (regexp.to_s.gsub("?-mix:", "").length) - 2
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 #jal
132
+ pata << pats.chop
130
133
  else
131
- pata << "1:[#{pats}" #jal
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
- pats += "]"
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
- pats = "x" + pats
234
+ if options.include?('i')
235
+ pats = "L" + pats
236
+ else
237
+ pats = "x" + pats
238
+ end
220
239
  elsif range == "A-Z"
221
- pats = "X" + pats
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
- pats += if set
226
- (range[0]..range[2]).to_a.join
227
- else
228
- "[" + (range[0]..range[2]).to_a.join + "]"
229
- end
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! if size[-1] == "-"
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}"
@@ -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.2.3
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-01-14 00:00:00.000000000 Z
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: '1.3'
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: '1.3'
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.0.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.