jay_z 0.0.3 → 0.1.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.
- data/Rakefile +2 -1
- data/jay_z.gemspec +3 -0
- data/lib/generators/jay_z/install/install_generator.rb +23 -0
- data/lib/generators/jay_z/install/templates/blueprint.rb +23 -0
- data/lib/generators/jay_z/model/model_generator.rb +29 -0
- data/lib/jay_z/active_record.rb +5 -0
- data/lib/jay_z/railtie.rb +14 -0
- data/lib/jay_z/version.rb +1 -1
- data/lib/jay_z.rb +25 -0
- data/spec/jay_z/active_record_spec.rb +141 -0
- data/spec/jay_z_spec.rb +13 -13
- metadata +44 -6
data/Rakefile
CHANGED
@@ -3,12 +3,13 @@ require 'bundler/gem_tasks'
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
require 'minitest/spec'
|
5
5
|
|
6
|
-
Rake::TestTask.new do |t|
|
6
|
+
Rake::TestTask.new(:spec) do |t|
|
7
7
|
t.libs.push "lib"
|
8
8
|
t.test_files = FileList['spec/**/*_spec.rb']
|
9
9
|
t.verbose = true
|
10
10
|
end
|
11
11
|
|
12
|
+
task :test => :spec
|
12
13
|
task :default => :test
|
13
14
|
|
14
15
|
desc "open console (require 'jay_z')"
|
data/jay_z.gemspec
CHANGED
@@ -12,6 +12,9 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.description = %q{A model factory. Say no to fixtures.}
|
13
13
|
|
14
14
|
s.rubyforge_project = "jay_z"
|
15
|
+
s.add_development_dependency "activerecord", "~> 3.1.0"
|
16
|
+
s.add_development_dependency "railties", "~> 3.1.0"
|
17
|
+
s.add_development_dependency "sqlite3", "~> 1.3.4"
|
15
18
|
|
16
19
|
example_files = `git ls-files -- example`.split("\n")
|
17
20
|
no_gem_files = example_files + %w[.gitignore .rvmrc]
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module JayZ
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
class_option :test_framework, :type => :string, :aliases => "-t", :desc => "Test framework to use JayZ with"
|
7
|
+
|
8
|
+
def blueprints_file
|
9
|
+
if rspec?
|
10
|
+
copy_file "blueprint.rb", "spec/blueprint.rb"
|
11
|
+
else
|
12
|
+
copy_file "blueprint.rb", "test/blueprint.rb"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def rspec?
|
19
|
+
options[:test_framework].to_sym == :rspec
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# endcoding: utf-8
|
2
|
+
module JayZ
|
3
|
+
# Add your blueprints here.
|
4
|
+
#
|
5
|
+
# e.g.
|
6
|
+
# class User < Blueprint(ActiveRecord)
|
7
|
+
# default do
|
8
|
+
# name { "Anders" }
|
9
|
+
# admin { false }
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# set(:admin) do
|
13
|
+
# admin { true }
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# class Post < Blueprint(ActiveRecord)
|
18
|
+
# default do
|
19
|
+
# title { "Post #{sn}" }
|
20
|
+
# body { "Lorem ipsum...#" }
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module JayZ
|
2
|
+
module Generators
|
3
|
+
class ModelGenerator < Rails::Generators::NamedBase
|
4
|
+
argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
|
5
|
+
|
6
|
+
def create_blueprint
|
7
|
+
file_name = if File.exists?(File.join(Rails.root, 'test', 'blueprint.rb'))
|
8
|
+
"test/blueprint.rb"
|
9
|
+
elsif File.exists?(File.join(Rails.root, 'spec', 'blueprint.rb'))
|
10
|
+
"spec/blueprint.rb"
|
11
|
+
else
|
12
|
+
raise "Cannot find the blueprint file"
|
13
|
+
end
|
14
|
+
gsub_file(file_name, /.end\s*\Z/mx) { |match| "#{code}\n#{match}" }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def code
|
20
|
+
%Q{\n
|
21
|
+
class #{class_name} < Blueprint(ActiveRecord)
|
22
|
+
default do
|
23
|
+
#{attributes.map { |a| "#{a.name} { #{a.default.inspect} }" }.join("\n ")}
|
24
|
+
end
|
25
|
+
end}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module JayZ
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
config.after_initialize do
|
4
|
+
blueprints = [ File.join(Rails.root, 'test', 'blueprint'),
|
5
|
+
File.join(Rails.root, 'spec', 'blueprint')]
|
6
|
+
blueprints.each do |path|
|
7
|
+
if File.exists?("#{path}.rb")
|
8
|
+
load("#{path}.rb")
|
9
|
+
break
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/jay_z/version.rb
CHANGED
data/lib/jay_z.rb
CHANGED
@@ -1,8 +1,33 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "jay_z/version"
|
3
3
|
require 'jay_z/blueprint'
|
4
|
+
|
4
5
|
module JayZ
|
6
|
+
def self.Blueprint(jayz_module)
|
7
|
+
Class.new(Blueprint) do
|
8
|
+
include jayz_module
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
5
12
|
def make(*args)
|
6
13
|
JayZ.const_get(name).make(*args)
|
7
14
|
end
|
15
|
+
|
16
|
+
module ActiveRecord
|
17
|
+
def new
|
18
|
+
if @object.valid?
|
19
|
+
@object
|
20
|
+
else
|
21
|
+
raise ActiveRecord::RecordInvalid.new(@object)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def new!
|
26
|
+
@object
|
27
|
+
end
|
28
|
+
|
29
|
+
def save
|
30
|
+
@object.tap { |record| record.save! }
|
31
|
+
end
|
32
|
+
end
|
8
33
|
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rails/railtie'
|
4
|
+
require 'active_record'
|
5
|
+
require 'jay_z/active_record'
|
6
|
+
require 'minitest/autorun'
|
7
|
+
|
8
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
|
9
|
+
:database => ":memory:")
|
10
|
+
|
11
|
+
ActiveRecord::Schema.define do
|
12
|
+
create_table :posts do |t|
|
13
|
+
t.string :title
|
14
|
+
t.text :body
|
15
|
+
t.integer :author_id
|
16
|
+
end
|
17
|
+
create_table :authors do |t|
|
18
|
+
t.string :name
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Post < ActiveRecord::Base
|
23
|
+
belongs_to :author
|
24
|
+
validates_presence_of :title
|
25
|
+
validates_presence_of :author_id
|
26
|
+
validates_uniqueness_of :title
|
27
|
+
end
|
28
|
+
|
29
|
+
class Author < ActiveRecord::Base
|
30
|
+
validates_presence_of :name
|
31
|
+
end
|
32
|
+
|
33
|
+
# blueprint.rb
|
34
|
+
module JayZ
|
35
|
+
class Author < Blueprint(ActiveRecord)
|
36
|
+
default do
|
37
|
+
name { "Anders" }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Post < Blueprint(ActiveRecord)
|
42
|
+
default do
|
43
|
+
title { "Post #{sn}" }
|
44
|
+
body { "Lorem ipsum..." }
|
45
|
+
author { Author.make.save }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ActiveRecord do
|
51
|
+
describe ".make" do
|
52
|
+
it "returns a proxy object" do
|
53
|
+
Post.make.must_be_instance_of(JayZ::Post)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#new" do
|
58
|
+
describe "a valid object" do
|
59
|
+
before { @post = Post.make.new }
|
60
|
+
it "returns a populated record" do
|
61
|
+
@post.must_be_instance_of(Post)
|
62
|
+
@post.body.must_equal "Lorem ipsum..."
|
63
|
+
end
|
64
|
+
|
65
|
+
it "does not persist the record" do
|
66
|
+
Post.count.must_equal 0
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "an invalid object" do
|
71
|
+
it "raises an exception" do
|
72
|
+
lambda {
|
73
|
+
Post.make(:author => nil).new
|
74
|
+
}.must_raise(ActiveRecord::RecordInvalid)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#new!" do
|
80
|
+
describe "a valid object" do
|
81
|
+
before { @post2 = Post.make.new! }
|
82
|
+
it "returns a populated record" do
|
83
|
+
@post2.must_be_instance_of(Post)
|
84
|
+
@post2.body.must_equal "Lorem ipsum..."
|
85
|
+
end
|
86
|
+
|
87
|
+
it "does not persist the record" do
|
88
|
+
Post.count.must_equal 0
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "an invalid object" do
|
93
|
+
it "returns a populated object" do
|
94
|
+
Post.make(:author => nil).new!.body.must_equal "Lorem ipsum..."
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "#save" do
|
100
|
+
before { @post3 = Post.make.save }
|
101
|
+
|
102
|
+
describe "a valid object" do
|
103
|
+
it "persists and returns a populated record" do
|
104
|
+
@post3.must_be_instance_of(Post)
|
105
|
+
@post3.body.must_equal "Lorem ipsum..."
|
106
|
+
Post.count.must_equal 1
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "an invalid object" do
|
111
|
+
it "raises an exception" do
|
112
|
+
lambda {
|
113
|
+
Post.make(:author => nil).save
|
114
|
+
}.must_raise(ActiveRecord::RecordInvalid)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe 'makes fields uniq with #{sn}' do
|
120
|
+
before do
|
121
|
+
user = Author.make.save
|
122
|
+
@post1 = Post.make(:author => user).save
|
123
|
+
@post2 = Post.make(:author => user).save
|
124
|
+
@post3 = Post.make(:author => user).save
|
125
|
+
@post4 = Post.make(:author => user).save
|
126
|
+
end
|
127
|
+
|
128
|
+
it "creates object that has uniq fields" do
|
129
|
+
@post1.valid?.must_equal true
|
130
|
+
@post2.valid?.must_equal true
|
131
|
+
@post3.valid?.must_equal true
|
132
|
+
@post4.valid?.must_equal true
|
133
|
+
Post.count.must_equal 4
|
134
|
+
end
|
135
|
+
|
136
|
+
after do
|
137
|
+
Post.delete_all
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
data/spec/jay_z_spec.rb
CHANGED
@@ -3,35 +3,35 @@ require 'minitest/autorun'
|
|
3
3
|
require 'jay_z'
|
4
4
|
|
5
5
|
module JayZ
|
6
|
-
class
|
6
|
+
class Blog < Blueprint
|
7
7
|
default do
|
8
|
-
|
8
|
+
writer { Writer.make.save }
|
9
9
|
body { "I am a default post body" }
|
10
10
|
end
|
11
11
|
|
12
12
|
set(:video) do
|
13
|
-
|
13
|
+
writer { Writer.make(:name => 'Anders defined in Blog.video').save }
|
14
14
|
url { 'http://www.youtube.com/watch?v=g5950v0kTJg' }
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
class
|
18
|
+
class Writer < Blueprint
|
19
19
|
default do
|
20
20
|
name { 'Anders Törnqvist' }
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
class
|
25
|
+
class Blog
|
26
26
|
extend JayZ
|
27
|
-
attr_accessor :
|
27
|
+
attr_accessor :writer
|
28
28
|
attr_accessor :body
|
29
29
|
attr_accessor :url
|
30
30
|
def save; 'save in post called'; end
|
31
31
|
def save!; self; end
|
32
32
|
end
|
33
33
|
|
34
|
-
class
|
34
|
+
class Writer
|
35
35
|
extend JayZ
|
36
36
|
attr_accessor :name
|
37
37
|
def save; self; end
|
@@ -40,29 +40,29 @@ end
|
|
40
40
|
describe JayZ do
|
41
41
|
describe "when extending a class with the JayZ module" do
|
42
42
|
it "adds a .make method" do
|
43
|
-
|
43
|
+
Blog.make.must_be_instance_of(JayZ::Blog)
|
44
44
|
end
|
45
45
|
|
46
46
|
describe ".make" do
|
47
47
|
it "creates a blueprint proxy object" do
|
48
|
-
|
48
|
+
Blog.make.must_be_instance_of(JayZ::Blog)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
describe "blueprint proxy object" do
|
53
53
|
it "delegate all messages" do
|
54
|
-
|
54
|
+
Blog.make.save.must_equal 'save in post called'
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
describe "before it delegates a message" do
|
59
59
|
it "populates the receiver with values from the blueprint" do
|
60
|
-
|
60
|
+
Blog.make.save!.body.must_equal 'I am a default post body'
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
describe ".make message with a symbol argument" do
|
65
|
-
before { @video =
|
65
|
+
before { @video = Blog.make(:video).save! }
|
66
66
|
it "populates the receiver with values defined in the video block" do
|
67
67
|
@video.url.must_equal 'http://www.youtube.com/watch?v=g5950v0kTJg'
|
68
68
|
end
|
@@ -74,7 +74,7 @@ describe JayZ do
|
|
74
74
|
|
75
75
|
describe "inside a blueprint block" do
|
76
76
|
it "can create other objects" do
|
77
|
-
@video.
|
77
|
+
@video.writer.name.must_equal 'Anders defined in Blog.video'
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jay_z
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,9 +9,41 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
13
|
-
|
14
|
-
|
12
|
+
date: 2011-10-07 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activerecord
|
16
|
+
requirement: &70165095778160 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.1.0
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70165095778160
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: railties
|
27
|
+
requirement: &70165095777520 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.1.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70165095777520
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sqlite3
|
38
|
+
requirement: &70165095776660 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.3.4
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70165095776660
|
15
47
|
description: A model factory. Say no to fixtures.
|
16
48
|
email:
|
17
49
|
- anders.tornqvist@gmail.com
|
@@ -23,17 +55,22 @@ files:
|
|
23
55
|
- Gemfile
|
24
56
|
- Rakefile
|
25
57
|
- jay_z.gemspec
|
58
|
+
- lib/generators/jay_z/install/install_generator.rb
|
59
|
+
- lib/generators/jay_z/install/templates/blueprint.rb
|
60
|
+
- lib/generators/jay_z/model/model_generator.rb
|
26
61
|
- lib/jay_z.rb
|
62
|
+
- lib/jay_z/active_record.rb
|
27
63
|
- lib/jay_z/blueprint.rb
|
28
64
|
- lib/jay_z/ghost.rb
|
65
|
+
- lib/jay_z/railtie.rb
|
29
66
|
- lib/jay_z/serial_number.rb
|
30
67
|
- lib/jay_z/version.rb
|
31
68
|
- readme.rdoc
|
69
|
+
- spec/jay_z/active_record_spec.rb
|
32
70
|
- spec/jay_z/blueprint_spec.rb
|
33
71
|
- spec/jay_z/ghost_spec.rb
|
34
72
|
- spec/jay_z/serial_number_spec.rb
|
35
73
|
- spec/jay_z_spec.rb
|
36
|
-
has_rdoc: true
|
37
74
|
homepage: https://github.com/unders/jay_z
|
38
75
|
licenses: []
|
39
76
|
post_install_message:
|
@@ -54,11 +91,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
91
|
version: '0'
|
55
92
|
requirements: []
|
56
93
|
rubyforge_project: jay_z
|
57
|
-
rubygems_version: 1.
|
94
|
+
rubygems_version: 1.8.10
|
58
95
|
signing_key:
|
59
96
|
specification_version: 3
|
60
97
|
summary: A model factory
|
61
98
|
test_files:
|
99
|
+
- spec/jay_z/active_record_spec.rb
|
62
100
|
- spec/jay_z/blueprint_spec.rb
|
63
101
|
- spec/jay_z/ghost_spec.rb
|
64
102
|
- spec/jay_z/serial_number_spec.rb
|