bsielski_value_generator 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +0 -1
- data/README.md +128 -116
- data/lib/bsielski_v_gen/array_gen.rb +26 -4
- data/lib/bsielski_v_gen/hash_gen.rb +25 -8
- data/lib/bsielski_v_gen/var_word_gen.rb +14 -3
- data/lib/bsielski_v_gen/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d9a3b8d67dba32050aa9fa381fc01c5ab17271c6ab1fa32d9fab0edec461f1c
|
4
|
+
data.tar.gz: d245b33cc4b1ae56f6ce5b316be8bfe3bc77bbb510f654c8386eae56147b5b0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17f230e9f5ff70ae372c8b389056c6a000d1c2ff59344800f51ef514a2dffe1cc0e2493c8f00ad7ba140f0f87a50bb0d36737685b852c8c0ad20f635521bb96b
|
7
|
+
data.tar.gz: e67eed2246e46ce31c5e4314d1aa1a8b4bbf5e33656a0b7ad4a97906abec94c8403a339e0e78fdee537367775d8d2484d9fb97240291e098c560c8a45a73b67b
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -45,250 +45,262 @@ int_gen = VGen::IntGen.new
|
|
45
45
|
random_int = int_gen.call
|
46
46
|
```
|
47
47
|
|
48
|
-
All generators have just one public method:
|
49
|
-
|
48
|
+
All generators have just one public method: ***#call***.
|
50
49
|
|
51
50
|
|
52
51
|
## API
|
53
52
|
|
54
53
|
|
55
|
-
|
56
|
-
### VGen::IntGen
|
54
|
+
### Class VGen::IntGen
|
57
55
|
|
58
56
|
```ruby
|
59
57
|
require "v_gen/int_gen"
|
60
58
|
```
|
61
59
|
|
62
|
-
####
|
63
|
-
|
64
|
-
##### `new(range=(0..10)) → new_generator`
|
60
|
+
#### Constructor
|
65
61
|
|
66
|
-
|
62
|
+
```ruby
|
63
|
+
VGen::IntGen.new # => new_generator
|
64
|
+
```
|
67
65
|
|
68
|
-
|
66
|
+
Optionally paramaters:
|
69
67
|
|
70
|
-
|
68
|
+
- **_range_** - is the range from which the number is randomly generated. Default is `(0..10)`.
|
69
|
+
|
71
70
|
|
71
|
+
#### Call
|
72
72
|
|
73
|
+
```ruby
|
74
|
+
VGen::IntGen.new.call # => new_int
|
75
|
+
```
|
73
76
|
|
74
|
-
### VGen::FloatGen
|
77
|
+
### Class VGen::FloatGen
|
75
78
|
|
76
79
|
```ruby
|
77
80
|
require "v_gen/float_gen"
|
78
81
|
```
|
82
|
+
#### Constructor
|
79
83
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
See VGen::IntGen.new for details about *range* argument.
|
84
|
+
```ruby
|
85
|
+
VGen::FloatGen.new # => new_generator
|
86
|
+
```
|
85
87
|
|
86
|
-
|
88
|
+
Optionally paramaters:
|
87
89
|
|
88
|
-
|
90
|
+
- **_range_** - is the range from which the number is randomly generated. Default is `(-10..10)`.
|
89
91
|
|
92
|
+
#### Call
|
90
93
|
|
94
|
+
```ruby
|
95
|
+
VGen::FloatGen.new.call # => new_float
|
96
|
+
```
|
91
97
|
|
92
|
-
### VGen::LetterGen
|
98
|
+
### Class VGen::LetterGen
|
93
99
|
|
94
100
|
```ruby
|
95
101
|
require "v_gen/letter_gen"
|
96
102
|
```
|
97
103
|
|
98
|
-
####
|
104
|
+
#### Constructor
|
99
105
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
*except* an array (or range) that is substracted from *only* array (range).
|
106
|
+
```ruby
|
107
|
+
VGen::LetterGen.new # => new_generator
|
108
|
+
```
|
105
109
|
|
106
|
-
|
110
|
+
Optionally paramaters:
|
107
111
|
|
108
|
-
|
112
|
+
- **_only:_** - an array (or range) of objects from which one randomly chosen is returned. Default is `("A".."Z").to_a + ("a".."z").to_a`.
|
113
|
+
- **_except:_** - an array (or range) that is substracted from **_only:_** array (or range). Default is `[]`.
|
109
114
|
|
115
|
+
#### Call
|
110
116
|
|
117
|
+
```ruby
|
118
|
+
VGen::LetterGen.new.call # => new_letter
|
119
|
+
```
|
111
120
|
|
112
|
-
### VGen::LowerLetterGen
|
121
|
+
### Class VGen::LowerLetterGen
|
113
122
|
|
114
123
|
```ruby
|
115
124
|
require "v_gen/lower_letter_gen"
|
116
125
|
```
|
117
126
|
|
118
|
-
####
|
119
|
-
|
120
|
-
##### `new(only: ("A".."Z"), except: []) → new_generator`
|
121
|
-
|
122
|
-
See VGen::LetterGen.new for details about *only* and *except* arguments.
|
123
|
-
|
124
|
-
The object in *only* and *except* arrays or ranges must respond to `#downcase` method.
|
127
|
+
#### Constructor
|
125
128
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
+
```ruby
|
130
|
+
VGen::LowerLetterGen.new # => new_generator
|
131
|
+
```
|
129
132
|
|
133
|
+
Optionally paramaters:
|
130
134
|
|
135
|
+
- **_only:_** - an array (or range) of objects from which one randomly chosen is returned. Default is `("A".."Z")` (those letters are downcased anyway by the class).
|
136
|
+
- **_except:_** - an array (or range) that is substracted from **_only:_** array (or range). Default is `[]`.
|
131
137
|
|
132
|
-
####
|
138
|
+
#### Call
|
133
139
|
|
134
140
|
```ruby
|
135
|
-
|
136
|
-
lower_letter_gen.call # => "j"
|
137
|
-
lower_letter_gen.call # => "e"
|
141
|
+
VGen::LowerLetterGen.new.call # => new_lower_letter
|
138
142
|
```
|
139
143
|
|
144
|
+
|
140
145
|
### VGen::UpperLetterGen
|
141
146
|
|
142
147
|
```ruby
|
143
148
|
require "v_gen/upper_letter_gen"
|
144
149
|
```
|
145
150
|
|
146
|
-
####
|
151
|
+
#### Constructor
|
147
152
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
The object in *only* and *except* arrays or ranges must respond to `#upcase` method.
|
153
|
+
```ruby
|
154
|
+
VGen::UpperGen.new # => new_generator
|
155
|
+
```
|
153
156
|
|
154
|
-
|
157
|
+
Optionally paramaters:
|
155
158
|
|
156
|
-
|
159
|
+
- **_only:_** - an array (or range) of objects from which one randomly chosen is returned. Default is `("A".."Z")`.
|
160
|
+
- **_except:_** - an array (or range) that is substracted from **_only:_** array (or range). Default is `[]`.
|
157
161
|
|
158
|
-
####
|
162
|
+
#### Call
|
159
163
|
|
160
164
|
```ruby
|
161
|
-
|
162
|
-
upper_letter_gen.call # => "I"
|
163
|
-
upper_letter_gen.call # => "D"
|
165
|
+
VGen::UpperLetterGen.new.call # => new_upper_letter
|
164
166
|
```
|
165
167
|
|
166
168
|
|
169
|
+
### Class VGen::TypicalLetterGen
|
167
170
|
|
168
|
-
|
171
|
+
This generator returns random lower letters with with taking into account the frequency of occurrence in English language.
|
169
172
|
|
170
173
|
```ruby
|
171
174
|
require "v_gen/typical_letter_gen"
|
172
175
|
```
|
173
176
|
|
174
|
-
####
|
177
|
+
#### Constructor
|
175
178
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
+
```ruby
|
180
|
+
VGen::TypicalLetterGen.new # => new_generator
|
181
|
+
```
|
179
182
|
|
180
|
-
|
183
|
+
#### Call
|
181
184
|
|
182
|
-
|
185
|
+
```ruby
|
186
|
+
VGen::TypicalLetterGen.new.call # => new_letter
|
187
|
+
```
|
183
188
|
|
184
189
|
|
190
|
+
### Class VGen::VarWordGen
|
185
191
|
|
186
|
-
|
192
|
+
This generator returns random lowercased strings sometimes with underscore in the middle of the string.
|
187
193
|
|
188
194
|
```ruby
|
189
195
|
require "v_gen/var_word_gen"
|
190
196
|
```
|
191
197
|
|
192
|
-
####
|
193
|
-
|
194
|
-
##### `new(letter_gen: TypicalLetterGen.new, lenght: (4..9), except: []) → new_generator`
|
195
|
-
|
196
|
-
*letter_gen* is a generator used to creating a letters for words.
|
198
|
+
#### Constructor
|
197
199
|
|
198
|
-
|
200
|
+
```ruby
|
201
|
+
VGen::VarWordGen.new # => new_generator
|
202
|
+
```
|
199
203
|
|
200
|
-
|
204
|
+
Optionally paramaters:
|
201
205
|
|
202
|
-
|
206
|
+
- **_letter_gen:_** - is a generator used to creating a letters for words. Default is `VGen::TypicalLetterGen.new`.
|
207
|
+
- **_length:_** - possible word length as a range (for random length) or an int (for fixed length).
|
208
|
+
- **_except:_** - words forbidden to generate. Default is `[]`.
|
203
209
|
|
204
|
-
|
210
|
+
#### Call
|
205
211
|
|
206
|
-
|
212
|
+
```ruby
|
213
|
+
VGen::VarWordGen.new.call # => new_word
|
214
|
+
```
|
207
215
|
|
208
216
|
|
217
|
+
### Class VGen::KeywordGen
|
209
218
|
|
210
|
-
|
219
|
+
This generator returns random lowercased symbols sometimes with underscore in the middle of the string.
|
211
220
|
|
212
221
|
```ruby
|
213
222
|
require "v_gen/keyword_gen"
|
214
223
|
```
|
215
224
|
|
216
|
-
####
|
225
|
+
#### Constructor
|
217
226
|
|
218
|
-
|
219
|
-
|
220
|
-
|
227
|
+
```ruby
|
228
|
+
VGen::KeywordGen.new # => new_generator
|
229
|
+
```
|
221
230
|
|
222
|
-
|
231
|
+
Optionally paramaters:
|
223
232
|
|
224
|
-
|
233
|
+
- **_word_gen:_** - is a generator used to creating a string, which is converted into a symbos. Default is `VGen::VarWordGen.new`.
|
225
234
|
|
226
|
-
|
235
|
+
#### Call
|
227
236
|
|
237
|
+
```ruby
|
238
|
+
VGen::KeywordGen.new.call # => new_keyword
|
239
|
+
```
|
228
240
|
|
241
|
+
### Class VGen::ArrayGen
|
229
242
|
|
230
|
-
|
243
|
+
This generator returns an array of random values.
|
231
244
|
|
232
245
|
```ruby
|
233
246
|
require "v_gen/array_gen"
|
234
247
|
```
|
235
248
|
|
236
|
-
####
|
237
|
-
|
238
|
-
##### `new(min: 4, max: 8, gens: [proc {Random.new.rand}]) → new_generator`
|
249
|
+
#### Constructor
|
239
250
|
|
240
|
-
|
241
|
-
|
242
|
-
|
251
|
+
```ruby
|
252
|
+
VGen::ArrayGen.new # => new_generator
|
253
|
+
```
|
243
254
|
|
244
|
-
|
255
|
+
Optionally paramaters:
|
245
256
|
|
246
|
-
|
257
|
+
- **_min:_** - is a minimum size of a generated arrays. Default is `4`.
|
258
|
+
- **_max:_** - is a maximum size of a generated arrays. Default is `9`.
|
259
|
+
- **_length:_** - possible array length as a range (for random length) or an int (for fixed length).
|
260
|
+
- **_size:_** - alias for **_length:_**.
|
261
|
+
- **_gens:_** - are generators used randomly to generate values. Default is `[ proc {Random.new.rand} ]`.
|
262
|
+
- **_uniq:_** - if truthy then generated arrays have unique elements. Default is `false`.
|
247
263
|
|
248
|
-
|
264
|
+
#### Call
|
249
265
|
|
250
|
-
|
266
|
+
```ruby
|
267
|
+
VGen::ArrayGen.new.call # => new_array
|
268
|
+
```
|
251
269
|
|
252
270
|
|
271
|
+
### Class VGen::HashGen
|
253
272
|
|
254
|
-
|
273
|
+
This generator returns a hash of random keys and values.
|
255
274
|
|
256
275
|
```ruby
|
257
276
|
require "v_gen/hash_gen"
|
258
277
|
```
|
259
278
|
|
260
|
-
####
|
261
|
-
|
262
|
-
##### `new(min: 4, max: 8, key_gens: [proc {Random.new.rand(0..100)}], value_gens: [proc {Random.new.rand}]) → new_generator`
|
263
|
-
|
264
|
-
*min* is a minimum size of a generated arrays.
|
265
|
-
|
266
|
-
*max* is a maximum size of a generated arrays.
|
267
|
-
|
268
|
-
*key_gens* are generators used randomly to generate keys.
|
269
|
-
|
270
|
-
*value_gens* are generators used randomly to generate values.
|
271
|
-
|
272
|
-
#### Public Instance Methods
|
273
|
-
|
274
|
-
##### `call → new_random_word`
|
275
|
-
|
276
|
-
It returns a hash of random keys and values.
|
277
|
-
|
278
|
-
|
279
|
+
#### Constructor
|
279
280
|
|
281
|
+
```ruby
|
282
|
+
VGen::HashGen.new # => new_generator
|
283
|
+
```
|
280
284
|
|
285
|
+
Optionally paramaters:
|
281
286
|
|
287
|
+
- **_min:_** - is a minimum size of a generated hashes. Default is `4`.
|
288
|
+
- **_max:_** - is a maximum size of a generated hashes. Default is `8`.
|
289
|
+
- **_length:_** - possible hash length as a range (for random length) or an int (for fixed length).
|
290
|
+
- **_size:_** - alias for **_length:_**.
|
291
|
+
- **_key_gens:_** - are generators used randomly to generate keys. Default is `[ proc {Random.new.rand(0..100)} ]`.
|
292
|
+
- **_value_gens:_** - are generators used randomly to generate values. Default is `[ proc {Random.new.rand} ]`.
|
293
|
+
- **_with:_** - is a hash that must be included in the generated hash. In other words it is a obligatory set of key and values pairs. Default is `{}`.
|
282
294
|
|
283
|
-
|
295
|
+
#### Call
|
284
296
|
|
285
|
-
|
286
|
-
|
297
|
+
```ruby
|
298
|
+
VGen::HashGen.new.call # => new_array
|
299
|
+
```
|
287
300
|
|
288
301
|
## To do features
|
289
302
|
|
290
|
-
-
|
291
|
-
- Some easy to use generators with default parameters
|
303
|
+
- Some easy to use generators with default parameters
|
292
304
|
|
293
305
|
## License
|
294
306
|
|
@@ -1,20 +1,42 @@
|
|
1
1
|
module VGen
|
2
2
|
class ArrayGen
|
3
3
|
def initialize(
|
4
|
+
uniq: false,
|
4
5
|
min: 4,
|
5
|
-
max:
|
6
|
+
max: 9,
|
7
|
+
length: nil,
|
8
|
+
size: nil,
|
6
9
|
gens: [ proc {Random.new.rand} ]
|
7
10
|
)
|
11
|
+
@uniq = uniq
|
12
|
+
@length = length || size || (min..max)
|
8
13
|
@gens = gens
|
9
14
|
@min = min
|
10
15
|
@max = max
|
11
16
|
end
|
12
17
|
|
13
18
|
def call()
|
14
|
-
|
15
|
-
|
19
|
+
used_values = []
|
20
|
+
Array.new(array_length) {
|
21
|
+
loop do
|
22
|
+
candidate_value = @gens.sample.call
|
23
|
+
if used_values.include?(candidate_value)
|
24
|
+
next
|
25
|
+
else
|
26
|
+
used_values << candidate_value if @uniq
|
27
|
+
break candidate_value
|
28
|
+
end
|
29
|
+
end
|
16
30
|
}
|
17
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def array_length
|
36
|
+
length = Random.new.rand(@length) if @length.is_a? Range
|
37
|
+
length = @length if @length.is_a? Integer
|
38
|
+
raise "length (size) can't be negative" if length < 0
|
39
|
+
length
|
18
40
|
end
|
19
41
|
end
|
20
42
|
end
|
@@ -1,11 +1,16 @@
|
|
1
1
|
module VGen
|
2
2
|
class HashGen
|
3
3
|
def initialize(
|
4
|
+
with: {},
|
4
5
|
min: 4,
|
5
6
|
max: 8,
|
7
|
+
length: nil,
|
8
|
+
size: nil,
|
6
9
|
key_gens: [ proc {Random.new.rand(0..100)} ],
|
7
10
|
value_gens: [ proc {Random.new.rand} ]
|
8
11
|
)
|
12
|
+
@with = with
|
13
|
+
@length = length || size || (min..max)
|
9
14
|
@key_gens = key_gens
|
10
15
|
@value_gens = value_gens
|
11
16
|
@min = min
|
@@ -13,23 +18,35 @@ module VGen
|
|
13
18
|
end
|
14
19
|
|
15
20
|
def call()
|
16
|
-
|
21
|
+
with_length = @with.length
|
17
22
|
hash = Hash[
|
18
|
-
Array.new(
|
23
|
+
Array.new(hash_length - with_length) do
|
19
24
|
[
|
20
25
|
@key_gens.sample.call,
|
21
26
|
@value_gens.sample.call
|
22
27
|
]
|
23
28
|
end
|
24
29
|
]
|
25
|
-
|
26
|
-
hash
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
unless @with.empty?
|
31
|
+
hash.merge!(@with)
|
32
|
+
end
|
33
|
+
while hash.size < hash_length do
|
34
|
+
new_pair = {
|
35
|
+
@key_gens.sample.call => @value_gens.sample.call
|
36
|
+
}
|
37
|
+
hash = new_pair.merge(hash)
|
31
38
|
end
|
39
|
+
hash = hash.to_a.shuffle.to_h unless @with.empty?
|
32
40
|
hash
|
33
41
|
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def hash_length
|
46
|
+
length = Random.new.rand(@length) if @length.is_a? Range
|
47
|
+
length = @length if @length.is_a? Integer
|
48
|
+
raise "length (size) can't be negative" if length < 0
|
49
|
+
length
|
50
|
+
end
|
34
51
|
end
|
35
52
|
end
|
@@ -4,18 +4,20 @@ module VGen
|
|
4
4
|
class VarWordGen
|
5
5
|
def initialize(
|
6
6
|
letter_gen: TypicalLetterGen.new,
|
7
|
-
length:
|
7
|
+
length: nil,
|
8
|
+
size: (4..9),
|
8
9
|
except: []
|
9
10
|
)
|
10
|
-
@length = length
|
11
|
+
@length = length || size
|
11
12
|
@letter_gen = letter_gen
|
12
13
|
@except = except
|
13
14
|
end
|
14
15
|
|
15
16
|
def call()
|
17
|
+
|
16
18
|
loop do
|
17
19
|
word = Array.new(
|
18
|
-
|
20
|
+
word_length,
|
19
21
|
@letter_gen
|
20
22
|
).map(&:call).join
|
21
23
|
if word.size > 2
|
@@ -26,5 +28,14 @@ module VGen
|
|
26
28
|
return word unless @except.include? word
|
27
29
|
end
|
28
30
|
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def word_length
|
35
|
+
length = Random.new.rand(@length) if @length.is_a? Range
|
36
|
+
length = @length if @length.is_a? Integer
|
37
|
+
raise "length (size) can't be negative" if length < 0
|
38
|
+
length
|
39
|
+
end
|
29
40
|
end
|
30
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bsielski_value_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bartłomiej Sielski
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|