genny 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/README.md +17 -3
- data/VERSION +1 -1
- data/lib/genny/array.rb +27 -8
- data/lib/genny/engines/faker.rb +29 -26
- data/lib/genny/json_schema.rb +2 -2
- data/lib/genny/string.rb +1 -0
- data/lib/genny/uri.rb +2 -0
- data/lib/genny/version.rb +1 -0
- metadata +25 -11
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
M2VkZDQ5YTM3M2RhMjU3YTRlOWI4ODM1NGNmNDE1ODg4YzM0NjkxZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZDNhNWE1MWUwZDU5OWIxNWUzNWIwMTk4NzM3YmU3ZWMxNzE1NTJjZA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MjNhZTA3NDBlMjJkYjVkMTY1OWI5MDBmMTQ2M2E5NDFjY2NiMmRkZDhmOWQ3
|
10
|
+
NTgzMWVmMDQwMjczZjU1ZGM0ZTI3ODk1YTE1OGE0MWRlZjk3NmM3OGM4NTky
|
11
|
+
MjMxM2NlOWRhODU3OWM1M2FjMGUxNDU3MTg4MzQxNDQ5YmQyYTQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MTMzNmIwOTBlNjZlNzNiNmZjMzFlNWJmNWNiMTRlNGFlNDlhZGM0ZjYxZjFi
|
14
|
+
MDVhMTMwNzYyZGE1ZTU0ZmM0MjQyODNjNjIxNDdhYmNlNjY1NTc2YmU5MGEy
|
15
|
+
NTE4Y2YwMTNjZDJjNDAxNTBkMjQxNDk4YTk0OTFkOWQxYThjZjM=
|
data/README.md
CHANGED
@@ -64,13 +64,25 @@ js.genny
|
|
64
64
|
|
65
65
|
### Arrays
|
66
66
|
|
67
|
-
A generated array will always be empty unless a `:
|
67
|
+
A generated array will always be empty unless a `:items` option has been defined. Any class in that array that responds to `genny` may be picked as the prototype for an element of the generated array.
|
68
68
|
|
69
69
|
```
|
70
70
|
Genny::Array.genny
|
71
71
|
# => []
|
72
72
|
|
73
|
-
Genny::Array.genny(
|
73
|
+
Genny::Array.genny(items: [Genny::String, Genny::Integer])
|
74
|
+
# => ["mcztjgoriq", "nohfcavjyz", 739]
|
75
|
+
|
76
|
+
Genny::Array.genny(
|
77
|
+
items: JSONSchema.new(
|
78
|
+
"type" => "object",
|
79
|
+
"properties" => {
|
80
|
+
"key" => {
|
81
|
+
"type" => "string"
|
82
|
+
}
|
83
|
+
}
|
84
|
+
)
|
85
|
+
)
|
74
86
|
# => ["mcztjgoriq", "nohfcavjyz", 739]
|
75
87
|
```
|
76
88
|
|
@@ -178,4 +190,6 @@ Yes please! Pull requests would be lovely.
|
|
178
190
|
|
179
191
|
## Contact
|
180
192
|
|
181
|
-
I am [@jphastings](https://twitter.com/jphastings) and I work at [blinkbox Books](https://github.com/blinkboxbooks), do get in touch.
|
193
|
+
I am [@jphastings](https://twitter.com/jphastings) and I work at [blinkbox Books](https://github.com/blinkboxbooks), do get in touch.
|
194
|
+
|
195
|
+
Also, let's have none of this gif/jif nonsense. Unless it sounds *ugly* in your language, you have just finished reading the documentation for **/jeni/** ;)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/genny/array.rb
CHANGED
@@ -2,18 +2,37 @@ require "genny/base"
|
|
2
2
|
|
3
3
|
module Genny
|
4
4
|
module Array
|
5
|
+
# Generates an array of items of the types specified.
|
6
|
+
#
|
7
|
+
# @example No classes specified, can only return an empty array
|
8
|
+
# Genny::Array.genny
|
9
|
+
# # => []
|
10
|
+
#
|
11
|
+
# @example Specifying classes
|
12
|
+
# Genny::Array.genny(items: [Genny::Integer, JSONSchema.new("type" => "string", "format" => "ipv4")])
|
13
|
+
# # => ["mcztjgoriq", "nohfcavjyz", 739]
|
14
|
+
#
|
15
|
+
# @param [Hash] opts Options for the generator
|
16
|
+
# @option opts [Array<#genny>,#genny] :items The items which should be used to populate the array
|
17
|
+
# @option opts [Integer] :minItems (1) The fewest number of items the array should have
|
18
|
+
# @option opts [Integer] :maxItems (5) The largest number of items the array should have
|
19
|
+
# @raise RuntimeError if no :items given and minItems > 0
|
20
|
+
# @raise RuntimeError if :maxItems is lower than :minItems
|
21
|
+
# @return [Array]
|
5
22
|
def self.genny(opts = {})
|
6
23
|
opts = Genny.symbolize(opts)
|
7
|
-
opts[:
|
8
|
-
raise ArgumentError, "classes must be an array" unless opts[:
|
9
|
-
|
10
|
-
|
24
|
+
opts[:items] = opts[:items].is_a?(Array) ? opts[:items] : [opts[:items]].compact
|
25
|
+
raise ArgumentError, "classes must be an array" unless opts[:items].respond_to?(:select)
|
26
|
+
items = opts[:items].select { |item| item.respond_to?(:genny) }
|
27
|
+
if items.empty?
|
28
|
+
raise "No items given, cannot populate the array." unless opts[:minItems].to_i == 0
|
29
|
+
return []
|
30
|
+
end
|
11
31
|
min_count = opts[:minItems] || 1
|
12
|
-
max_count = opts[:maxItems] || 5
|
32
|
+
max_count = opts[:maxItems] || [opts[:minItems], 5].max
|
33
|
+
raise "maxItems is lower than minItems" if max_count < min_count
|
13
34
|
count = Random.rand(max_count - min_count + 1) + min_count
|
14
|
-
return count.times.map
|
15
|
-
klasses.sample.genny(opts[:items] || {})
|
16
|
-
end
|
35
|
+
return count.times.map { items.sample.genny }
|
17
36
|
end
|
18
37
|
end
|
19
38
|
end
|
data/lib/genny/engines/faker.rb
CHANGED
@@ -1,35 +1,38 @@
|
|
1
1
|
begin
|
2
2
|
require "faker"
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
hint
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
4
|
+
# First name
|
5
|
+
Genny::String.hint do |opts|
|
6
|
+
hint = opts[:hint].downcase
|
7
|
+
next unless hint.match("first") && hint.match("name")
|
8
|
+
# TODO: ensure the length limits are met
|
9
|
+
Faker::Name.first_name
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
# Last name
|
13
|
+
Genny::String.hint do |opts|
|
14
|
+
hint = opts[:hint].downcase
|
15
|
+
next unless hint.match("last") && hint.match("name")
|
16
|
+
# TODO: ensure the length limits are met
|
17
|
+
Faker::Name.last_name
|
18
|
+
end
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
# Full name
|
21
|
+
Genny::String.hint do |opts|
|
22
|
+
next unless opts[:hint].downcase.match("name")
|
23
|
+
# TODO: ensure the length limits are met
|
24
|
+
Faker::Name.name
|
25
|
+
end
|
26
|
+
|
27
|
+
# Email address
|
28
|
+
Genny::String.hint do |opts|
|
29
|
+
next unless opts[:hint].downcase.match("email")
|
30
|
+
Faker::Internet.safe_email
|
31
|
+
end
|
27
32
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
Faker::Internet.safe_email
|
32
|
-
end
|
33
|
+
# Email address as format
|
34
|
+
Genny::String.format("email") do |opts|
|
35
|
+
Faker::Internet.safe_email
|
33
36
|
end
|
34
37
|
rescue LoadError
|
35
38
|
end
|
data/lib/genny/json_schema.rb
CHANGED
@@ -15,8 +15,8 @@ class JSONSchema < SimpleDelegator
|
|
15
15
|
super(hash)
|
16
16
|
end
|
17
17
|
|
18
|
-
def genny
|
19
|
-
opts = Genny.symbolize(self)
|
18
|
+
def genny(additional_opts = {})
|
19
|
+
opts = Genny.symbolize(self.merge(additional_opts))
|
20
20
|
return opts[:enum].sample if opts.has_key?(:enum)
|
21
21
|
return schema_from_ref(opts[:'$ref']).genny if opts[:'$ref']
|
22
22
|
|
data/lib/genny/string.rb
CHANGED
@@ -32,5 +32,6 @@ module Genny
|
|
32
32
|
format("ipv4") { |opts| 4.times.map { Random.rand(255) }.join(".") }
|
33
33
|
format("ipv6") { |opts| 8.times.map { Random.rand(65536).to_s(16).rjust(4, "0") }.join(":") }
|
34
34
|
format("uri") { |opts| Genny::URI.genny(opts).to_s }
|
35
|
+
format("email") { |opts| Genny::String.genny + "@example.com" }
|
35
36
|
end
|
36
37
|
end
|
data/lib/genny/uri.rb
CHANGED
@@ -3,6 +3,8 @@ require "uri"
|
|
3
3
|
|
4
4
|
module Genny
|
5
5
|
module URI
|
6
|
+
# @param [Hash] opts Options for the generator
|
7
|
+
# @option opts [String] :host ('example.com') The host of the generated URI
|
6
8
|
def self.genny(opts = {})
|
7
9
|
opts = Genny.symbolize(opts)
|
8
10
|
::URI::HTTP.build(host: opts[:host] || 'example.com', path: "/#{Genny::String.genny}")
|
data/lib/genny/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JP Hastings-Spital
|
@@ -14,42 +14,56 @@ dependencies:
|
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
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: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '3.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: '3.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json-schema
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
description: Genny likes to make things up. It generates ruby objects, mainly from
|
@@ -78,7 +92,7 @@ files:
|
|
78
92
|
- lib/genny/time.rb
|
79
93
|
- lib/genny/uri.rb
|
80
94
|
- lib/genny/version.rb
|
81
|
-
homepage:
|
95
|
+
homepage: https://github.com/blinkboxbooks/genny
|
82
96
|
licenses: []
|
83
97
|
metadata: {}
|
84
98
|
post_install_message:
|
@@ -87,17 +101,17 @@ require_paths:
|
|
87
101
|
- lib
|
88
102
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
103
|
requirements:
|
90
|
-
- -
|
104
|
+
- - ! '>='
|
91
105
|
- !ruby/object:Gem::Version
|
92
106
|
version: '0'
|
93
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
108
|
requirements:
|
95
|
-
- -
|
109
|
+
- - ! '>='
|
96
110
|
- !ruby/object:Gem::Version
|
97
111
|
version: '0'
|
98
112
|
requirements: []
|
99
113
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.
|
114
|
+
rubygems_version: 2.4.2
|
101
115
|
signing_key:
|
102
116
|
specification_version: 4
|
103
117
|
summary: Genny likes to make things up. It generates ruby objects, mainly from JSON
|