genny 0.1.0 → 0.2.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 +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
|