jay_z 0.0.1
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.
- data/.gemtest +0 -0
- data/.gitignore +4 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Rakefile +15 -0
- data/example/blog.rb +66 -0
- data/jay_z.gemspec +20 -0
- data/lib/jay_z/blueprint.rb +78 -0
- data/lib/jay_z/ghost.rb +27 -0
- data/lib/jay_z/serial_number.rb +9 -0
- data/lib/jay_z/version.rb +3 -0
- data/lib/jay_z.rb +8 -0
- data/readme.rdoc +0 -0
- data/spec/jay_z/blueprint_spec.rb +156 -0
- data/spec/jay_z/ghost_spec.rb +43 -0
- data/spec/jay_z/serial_number_spec.rb +22 -0
- data/spec/jay_z_spec.rb +83 -0
- metadata +64 -0
data/.gemtest
ADDED
File without changes
|
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.2-p290@jay_z --create
|
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'minitest/spec'
|
5
|
+
|
6
|
+
Rake::TestTask.new do |t|
|
7
|
+
t.libs.push "lib"
|
8
|
+
t.test_files = FileList['spec/**/*_spec.rb']
|
9
|
+
t.verbose = true
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "open console (require 'jay_z')"
|
13
|
+
task :c do
|
14
|
+
system "irb -I lib -r jay_z"
|
15
|
+
end
|
data/example/blog.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + "../../lib"
|
3
|
+
require 'jay_z'
|
4
|
+
|
5
|
+
module JayZ
|
6
|
+
class Post < Blueprint
|
7
|
+
default do
|
8
|
+
author { Author.make.save }
|
9
|
+
body { "I am a default post body" }
|
10
|
+
end
|
11
|
+
|
12
|
+
set(:video) do
|
13
|
+
author { Author.make(:name => 'Anders defined in video').save }
|
14
|
+
url { 'http://www.youtube.com/watch?v=g5950v0kTJg' }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Author < Blueprint
|
19
|
+
default do
|
20
|
+
name { 'Anders Törnqvist' }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Post
|
26
|
+
extend JayZ
|
27
|
+
attr_accessor :author
|
28
|
+
attr_accessor :body
|
29
|
+
attr_accessor :url
|
30
|
+
def save; 'save in post called'; end
|
31
|
+
def save!; self; end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Author
|
35
|
+
extend JayZ
|
36
|
+
attr_accessor :name
|
37
|
+
def save; self; end
|
38
|
+
end
|
39
|
+
|
40
|
+
puts "\nPost.make \n"
|
41
|
+
p Post.make # => <JayZ::Post:0x007ffb9b838c10
|
42
|
+
# @object=#<Post:0x007ffb9b8389b8
|
43
|
+
# @author=#<Author:0x007ffb9b8386e8
|
44
|
+
# @name="Anders Törnqvist">,
|
45
|
+
# @body="I am a default post body">>
|
46
|
+
|
47
|
+
puts "\nPost.make(:video) \n"
|
48
|
+
p Post.make(:video) # => <JayZ::Post:0x007fd329837f80
|
49
|
+
# @object=#<Post:0x007fd329837dc8
|
50
|
+
# @author=#<Author:0x007fd329837ad0
|
51
|
+
# @name="Anders defined in video">,
|
52
|
+
# @body="I am a default post body",
|
53
|
+
# @url="http://www.youtube.com/watch?v=g5950v0kTJg">>
|
54
|
+
|
55
|
+
|
56
|
+
puts "\npost = Post.make.save! \n"
|
57
|
+
post = Post.make.save!
|
58
|
+
p post.author # => <Author:0x007fc70a838d70 @name="Anders Törnqvist">
|
59
|
+
p post.body # => "I am a default post body"
|
60
|
+
p post.url # => nil
|
61
|
+
|
62
|
+
puts "\npost = Post.make(:video).save! \n"
|
63
|
+
post = Post.make(:video).save!
|
64
|
+
p post.author # => <Author:0x007ff669037db8 @name="Anders defined in video">
|
65
|
+
p post.body # => "I am a default post body"
|
66
|
+
p post.url # => "http://www.youtube.com/watch?v=g5950v0kTJg"
|
data/jay_z.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "jay_z/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "jay_z"
|
7
|
+
s.version = JayZ::VERSION
|
8
|
+
s.authors = ["Anders Törnqvist"]
|
9
|
+
s.email = ["anders.tornqvist@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/unders/jay_z"
|
11
|
+
s.summary = %q{A model factory}
|
12
|
+
s.description = %q{A model factory. Say no to fixtures.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "jay_z"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'jay_z/serial_number'
|
2
|
+
require 'jay_z/ghost'
|
3
|
+
|
4
|
+
module JayZ
|
5
|
+
class Blueprint; end
|
6
|
+
|
7
|
+
class << Blueprint
|
8
|
+
def make(*args)
|
9
|
+
new(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def default(options={}, &block)
|
13
|
+
if block_given?
|
14
|
+
ghosts[:default] = Ghost.new(serial_number).instance_eval(&block)
|
15
|
+
else
|
16
|
+
hash = options.merge({})
|
17
|
+
default = ghosts[:default]
|
18
|
+
(default.keys - options.keys).each do |key|
|
19
|
+
hash[key] = default.send(key)
|
20
|
+
end
|
21
|
+
hash
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def set(method, &block)
|
26
|
+
ghosts[method] = Ghost.new(serial_number).instance_eval(&block)
|
27
|
+
self.class.send(:define_method, method) do |options={}|
|
28
|
+
hash = options.merge({})
|
29
|
+
blueprint = ghosts[method]
|
30
|
+
blueprint_keys = blueprint.keys
|
31
|
+
(blueprint_keys - options.keys).each do |key|
|
32
|
+
hash[key] = blueprint.send(key)
|
33
|
+
end
|
34
|
+
|
35
|
+
default = ghosts.fetch(:default, {})
|
36
|
+
(default.keys - blueprint_keys).each do |key|
|
37
|
+
hash[key] = default.send(key)
|
38
|
+
end
|
39
|
+
|
40
|
+
hash
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def ghosts
|
47
|
+
@ghosts ||={}
|
48
|
+
end
|
49
|
+
|
50
|
+
def serial_number
|
51
|
+
@serial_number ||= SerialNumber.new
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class Blueprint
|
56
|
+
def initialize(*args)
|
57
|
+
symbol = args.first.is_a?(Symbol) ? args.first : :default
|
58
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
59
|
+
@object = Kernel.const_get(self.class.name.sub('JayZ::', '')).new
|
60
|
+
|
61
|
+
self.class.send(symbol, options).each do |key, value|
|
62
|
+
@object.send("#{key}=", value)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def new
|
67
|
+
@object
|
68
|
+
end
|
69
|
+
|
70
|
+
def method_missing(method, *args, &block)
|
71
|
+
@object.send(method, *args, &block)
|
72
|
+
end
|
73
|
+
|
74
|
+
def respond_to_missing?(method, *)
|
75
|
+
@object.respond_to?(method)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/jay_z/ghost.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module JayZ
|
2
|
+
class Ghost
|
3
|
+
def initialize(serial_number)
|
4
|
+
@serial_number = serial_number
|
5
|
+
end
|
6
|
+
|
7
|
+
def sn
|
8
|
+
@serial_number.next
|
9
|
+
end
|
10
|
+
|
11
|
+
def keys
|
12
|
+
@keys ||= []
|
13
|
+
end
|
14
|
+
|
15
|
+
def method_missing(method, *args, &block)
|
16
|
+
if block_given?
|
17
|
+
keys << method
|
18
|
+
m = Module.new do
|
19
|
+
define_method(method, &block)
|
20
|
+
end
|
21
|
+
extend m
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/jay_z.rb
ADDED
data/readme.rdoc
ADDED
File without changes
|
@@ -0,0 +1,156 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'jay_z/blueprint'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
|
5
|
+
module JayZ
|
6
|
+
class User < Blueprint; end
|
7
|
+
class Comment < Blueprint; end
|
8
|
+
end
|
9
|
+
|
10
|
+
class User
|
11
|
+
extend JayZ
|
12
|
+
attr_accessor :name
|
13
|
+
def self.counter; @counter; end
|
14
|
+
def self.counter=(c); @counter = c; end
|
15
|
+
def initialize; self.class.counter = 0; end
|
16
|
+
def save; self.class.counter += 1; end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Comment
|
20
|
+
extend JayZ
|
21
|
+
attr_accessor :user
|
22
|
+
attr_accessor :body
|
23
|
+
end
|
24
|
+
|
25
|
+
describe JayZ::Blueprint do
|
26
|
+
describe ".make" do
|
27
|
+
it "creates an instance" do
|
28
|
+
JayZ::User.make.must_be_instance_of(JayZ::User)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe ".default" do
|
33
|
+
before do
|
34
|
+
JayZ::User.default do
|
35
|
+
name { "User 1" }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "when called with a block" do
|
40
|
+
it "saves the block" do
|
41
|
+
JayZ::User.default.must_equal :name => 'User 1'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "when called without a block" do
|
46
|
+
it "returns a hash" do
|
47
|
+
JayZ::User.default.must_equal :name => 'User 1'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe ".set" do
|
53
|
+
before do
|
54
|
+
JayZ::Comment.set(:admin) do
|
55
|
+
user { JayZ::User.make(:name => 'Anders Admin').new }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "when called with a block" do
|
60
|
+
it "creates a class method specified by the symbol name" do
|
61
|
+
JayZ::Comment.admin[:user].name.must_equal 'Anders Admin'
|
62
|
+
end
|
63
|
+
|
64
|
+
it "saves the block" do
|
65
|
+
JayZ::Comment.admin[:user].name.must_equal 'Anders Admin'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "when called without a block" do
|
70
|
+
it "returns a hash" do
|
71
|
+
JayZ::Comment.admin[:user].name.must_equal 'Anders Admin'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "when the default block values is used" do
|
77
|
+
before do
|
78
|
+
JayZ::Comment.default do
|
79
|
+
user { User.make(:name => 'Anders Default').new }
|
80
|
+
body { 'I am defined in default' }
|
81
|
+
end
|
82
|
+
JayZ::Comment.set(:spam) do
|
83
|
+
user { User.make(:name => 'Anders Spam').new }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "when .set(:spam) has not defined the method in its block" do
|
88
|
+
it "returns the body defined in the default block" do
|
89
|
+
JayZ::Comment.spam[:body].must_equal 'I am defined in default'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
describe "when .set(:spam) has defined the method in its block" do
|
93
|
+
it "returns the value from the spam block" do
|
94
|
+
JayZ::Comment.spam[:user].name.must_equal 'Anders Spam'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "serial number interpolation with sn method" do
|
100
|
+
before do
|
101
|
+
JayZ::User.default do
|
102
|
+
name { "User #{sn}" }
|
103
|
+
end
|
104
|
+
JayZ::User.set(:admin) do
|
105
|
+
name { "Admin #{sn}" }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
it "returns the next number for each hash" do
|
110
|
+
JayZ::User.admin[:name].must_equal "Admin 1"
|
111
|
+
JayZ::User.default[:name].must_equal "User 2"
|
112
|
+
JayZ::User.default[:name].must_equal "User 3"
|
113
|
+
JayZ::User.admin[:name].must_equal "Admin 4"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "#new" do
|
118
|
+
before do
|
119
|
+
JayZ::User.default do
|
120
|
+
name { 'Anders' }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
it "returns the correct object" do
|
124
|
+
JayZ::User.make.new.must_be_instance_of(User)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "when a message is sent to the instance" do
|
129
|
+
before do
|
130
|
+
JayZ::User.default do
|
131
|
+
name { 'Anders' }
|
132
|
+
end
|
133
|
+
@jayz_user = JayZ::User.make
|
134
|
+
end
|
135
|
+
it "delegates that message" do
|
136
|
+
@jayz_user.save.must_equal 1
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "blocks are not executed when defined" do
|
141
|
+
before do
|
142
|
+
JayZ::User.default do
|
143
|
+
name { 'Anders' }
|
144
|
+
end
|
145
|
+
JayZ::Comment.default do
|
146
|
+
user { User.make.save }
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
it "executes the block when called" do
|
151
|
+
User.counter.must_equal nil
|
152
|
+
JayZ::Comment.default
|
153
|
+
User.counter.must_equal 1
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jay_z/ghost'
|
3
|
+
describe JayZ::Ghost do
|
4
|
+
before do
|
5
|
+
def Object.next; 1; end
|
6
|
+
@ghost = JayZ::Ghost.new(Object)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#keys" do
|
10
|
+
it "returns a collection of all methods sent to the object" do
|
11
|
+
@ghost.title { 'block' }
|
12
|
+
@ghost.body { 'block' }
|
13
|
+
@ghost.keys.must_equal [:title, :body]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#sn" do
|
18
|
+
it "returns a serial number" do
|
19
|
+
@ghost.sn.must_equal 1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "a message with a block is sent to the object" do
|
24
|
+
it "creates a method that returns the content of the block" do
|
25
|
+
@ghost.title { 'I am a block' }
|
26
|
+
@ghost.title.must_equal 'I am a block'
|
27
|
+
end
|
28
|
+
|
29
|
+
it "doesn't execute the code inside the block until the method is called" do
|
30
|
+
def Object.counter; @counter ||= 0; @counter +=1; end
|
31
|
+
@ghost.title { Object.counter }
|
32
|
+
@ghost.title.must_equal 1
|
33
|
+
@ghost.title.must_equal 2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "a message is sent with a block containing a string with \#{sn}" do
|
38
|
+
it "interporlates the sn number" do
|
39
|
+
@ghost.town { "I am ghost town number-#{sn}" }
|
40
|
+
@ghost.town.must_equal "I am ghost town number-1"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jay_z/serial_number'
|
3
|
+
describe JayZ::SerialNumber do
|
4
|
+
before do
|
5
|
+
@serial_number = JayZ::SerialNumber.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#next" do
|
9
|
+
describe "when called the first time" do
|
10
|
+
it "returns 1" do
|
11
|
+
@serial_number.next.must_equal 1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "when called the second time" do
|
16
|
+
it "returns the consecutive number" do
|
17
|
+
number = @serial_number.next
|
18
|
+
@serial_number.next.must_equal (number + 1)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/jay_z_spec.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'jay_z'
|
4
|
+
|
5
|
+
module JayZ
|
6
|
+
class Post < Blueprint
|
7
|
+
default do
|
8
|
+
author { Author.make.save }
|
9
|
+
body { "I am a default post body" }
|
10
|
+
end
|
11
|
+
|
12
|
+
set(:video) do
|
13
|
+
author { Author.make(:name => 'Anders defined in Post.video').save }
|
14
|
+
url { 'http://www.youtube.com/watch?v=g5950v0kTJg' }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Author < Blueprint
|
19
|
+
default do
|
20
|
+
name { 'Anders Törnqvist' }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Post
|
26
|
+
extend JayZ
|
27
|
+
attr_accessor :author
|
28
|
+
attr_accessor :body
|
29
|
+
attr_accessor :url
|
30
|
+
def save; 'save in post called'; end
|
31
|
+
def save!; self; end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Author
|
35
|
+
extend JayZ
|
36
|
+
attr_accessor :name
|
37
|
+
def save; self; end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe JayZ do
|
41
|
+
describe "when extending a class with the JayZ module" do
|
42
|
+
it "adds a #make method" do
|
43
|
+
Post.make.must_be_instance_of(JayZ::Post)
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#make" do
|
47
|
+
it "creates a blueprint proxy object" do
|
48
|
+
Post.make.must_be_instance_of(JayZ::Post)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "blueprint proxy object" do
|
53
|
+
it "delegates all messages" do
|
54
|
+
Post.make.save.must_equal 'save in post called'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "before it delegates a message" do
|
59
|
+
it "populates the receiver with the values from the blueprint" do
|
60
|
+
Post.make.save!.body.must_equal 'I am a default post body'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe ".make message with a symbol argument" do
|
65
|
+
before { @video = Post.make(:video).save! }
|
66
|
+
it "populates the receiver with values defined in the video block" do
|
67
|
+
@video.url.must_equal 'http://www.youtube.com/watch?v=g5950v0kTJg'
|
68
|
+
end
|
69
|
+
|
70
|
+
it %q{populates the receiver with values from default block if not
|
71
|
+
defined in video block} do
|
72
|
+
@video.body.must_equal 'I am a default post body'
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "inside a blueprint block" do
|
76
|
+
it "can create other objects" do
|
77
|
+
@video.author.name.must_equal 'Anders defined in Post.video'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jay_z
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Anders Törnqvist
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-23 00:00:00.000000000 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
description: A model factory. Say no to fixtures.
|
16
|
+
email:
|
17
|
+
- anders.tornqvist@gmail.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gemtest
|
23
|
+
- .gitignore
|
24
|
+
- .rvmrc
|
25
|
+
- Gemfile
|
26
|
+
- Rakefile
|
27
|
+
- example/blog.rb
|
28
|
+
- jay_z.gemspec
|
29
|
+
- lib/jay_z.rb
|
30
|
+
- lib/jay_z/blueprint.rb
|
31
|
+
- lib/jay_z/ghost.rb
|
32
|
+
- lib/jay_z/serial_number.rb
|
33
|
+
- lib/jay_z/version.rb
|
34
|
+
- readme.rdoc
|
35
|
+
- spec/jay_z/blueprint_spec.rb
|
36
|
+
- spec/jay_z/ghost_spec.rb
|
37
|
+
- spec/jay_z/serial_number_spec.rb
|
38
|
+
- spec/jay_z_spec.rb
|
39
|
+
has_rdoc: true
|
40
|
+
homepage: https://github.com/unders/jay_z
|
41
|
+
licenses: []
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
requirements: []
|
59
|
+
rubyforge_project: jay_z
|
60
|
+
rubygems_version: 1.6.2
|
61
|
+
signing_key:
|
62
|
+
specification_version: 3
|
63
|
+
summary: A model factory
|
64
|
+
test_files: []
|