fabrication 0.6.2 → 0.6.3
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/README.markdown +10 -0
- data/lib/fabrication/fabricator.rb +7 -0
- data/lib/fabrication/generator/base.rb +16 -8
- data/lib/fabrication/support.rb +2 -2
- data/lib/fabrication/version.rb +1 -1
- data/spec/fabrication_spec.rb +7 -1
- data/spec/fabricators.rb +1 -0
- data/spec/fabricators/cool_object_fabricator.rb +1 -0
- data/spec/generator/base_spec.rb +9 -1
- data/spec/support_spec.rb +1 -11
- metadata +6 -4
data/README.markdown
CHANGED
@@ -34,6 +34,7 @@ Define your fabricators.
|
|
34
34
|
name "Fun Factory"
|
35
35
|
employees(:count => 20) { |company, i| Fabricate(:drone, :company => company, :name => "Drone #{i}") }
|
36
36
|
location! { Fabricate(:location) }
|
37
|
+
after_build { |company| company.name = "Another #{company.name}" }
|
37
38
|
after_create { |company| company.update_attribute(:ceo, Fabricate(:drone, :name => 'Lead Drone') }
|
38
39
|
end
|
39
40
|
|
@@ -42,6 +43,7 @@ Breaking down the above, we are defining a "company" fabricator, which will gene
|
|
42
43
|
* The object has a name field, which is statically filled with "Fun Factory".
|
43
44
|
* It has a has_many association to employees and will generate an array of 20 records as indicated by the :count => 20. The block is passed the company object being fabricated and index of the array being created.
|
44
45
|
* It has a belongs_to association to location and this will be generated immediately with the company object. This is because of the "!" after the association name.
|
46
|
+
* After the object is built but before it is saved, it will update the name to "Another Fun Factory".
|
45
47
|
* After the object is created, it will update the "ceo" association with a new "drone" record.
|
46
48
|
|
47
49
|
Alternatively, you can Fabricate(:company) without first defining the Fabricator. Doing so will create an empty Fabricator called ":company" and prevent you from defining the Fabricator explicitly later.
|
@@ -118,3 +120,11 @@ To run rake successfully:
|
|
118
120
|
3. Install bundler
|
119
121
|
4. Run `bundle install` from the project root
|
120
122
|
5. Run `rake` and the test suite should be all green!
|
123
|
+
|
124
|
+
### Contributors ###
|
125
|
+
|
126
|
+
* Les Hill (leshill)
|
127
|
+
* Jim Remsik (bigtiger)
|
128
|
+
* Dave Ott (daveott)
|
129
|
+
* Matt (winescout)
|
130
|
+
* Lar Van Der Jagt (supaspoida)
|
@@ -46,3 +46,10 @@ class Fabrication::Fabricator
|
|
46
46
|
end
|
47
47
|
|
48
48
|
end
|
49
|
+
|
50
|
+
# Adds support for reload! in the Rails 2.3.x console
|
51
|
+
if defined? ActionController and ActionController::Dispatcher.respond_to? :reload_application
|
52
|
+
ActionController::Dispatcher.to_prepare :fabrication do
|
53
|
+
Fabrication.clear_definitions
|
54
|
+
end
|
55
|
+
end
|
@@ -2,14 +2,23 @@ class Fabrication::Generator::Base
|
|
2
2
|
|
3
3
|
def self.supports?(klass); true end
|
4
4
|
|
5
|
+
def after_build(&block)
|
6
|
+
callbacks[:after_build] = block if block_given?
|
7
|
+
end
|
8
|
+
|
5
9
|
def after_create(&block)
|
6
|
-
|
10
|
+
callbacks[:after_create] = block if block_given?
|
11
|
+
end
|
12
|
+
|
13
|
+
def callbacks
|
14
|
+
@callbacks ||= {}
|
7
15
|
end
|
8
16
|
|
9
17
|
def generate(options={:save => true}, attributes=[])
|
10
18
|
process_attributes(attributes)
|
19
|
+
callbacks[:after_build].call(instance) if callbacks.include?(:after_build)
|
11
20
|
after_generation(options)
|
12
|
-
|
21
|
+
callbacks[:after_create].call(instance) if callbacks.include?(:after_create)
|
13
22
|
instance
|
14
23
|
end
|
15
24
|
|
@@ -23,11 +32,9 @@ class Fabrication::Generator::Base
|
|
23
32
|
|
24
33
|
protected
|
25
34
|
|
26
|
-
|
27
|
-
|
28
|
-
private
|
35
|
+
attr_accessor :instance
|
29
36
|
|
30
|
-
|
37
|
+
def after_generation(options); end
|
31
38
|
|
32
39
|
def assign(method_name, param)
|
33
40
|
value = nil
|
@@ -43,8 +50,9 @@ class Fabrication::Generator::Base
|
|
43
50
|
|
44
51
|
def process_attributes(attributes)
|
45
52
|
attributes.each do |attribute|
|
46
|
-
|
47
|
-
|
53
|
+
case attribute.name
|
54
|
+
when :after_create; after_create(&attribute.value)
|
55
|
+
when :after_build; after_build(&attribute.value)
|
48
56
|
else
|
49
57
|
if Proc === attribute.value
|
50
58
|
method_missing(attribute.name, attribute.params, &attribute.value)
|
data/lib/fabrication/support.rb
CHANGED
@@ -26,10 +26,10 @@ class Fabrication::Support
|
|
26
26
|
['test', 'spec'].map do |folder|
|
27
27
|
path = File.expand_path(File.join(folder, 'fabricators'))
|
28
28
|
|
29
|
-
|
29
|
+
load("#{path}.rb") if File.exists?("#{path}.rb")
|
30
30
|
|
31
31
|
File.directory? path and Dir[File.join(path, '*.rb')].each do |file|
|
32
|
-
|
32
|
+
load file
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
data/lib/fabrication/version.rb
CHANGED
data/spec/fabrication_spec.rb
CHANGED
@@ -102,10 +102,12 @@ describe Fabrication do
|
|
102
102
|
|
103
103
|
Fabricator(:other_company, :from => :company) do
|
104
104
|
divisions(:count => 2) { Fabricate(:division) }
|
105
|
+
after_build { |o| o.name = "Crazysauce" }
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
108
109
|
let(:company) { Fabricate(:company, :name => "Hashrocket") }
|
110
|
+
let(:other_company) { Fabricate(:other_company) }
|
109
111
|
|
110
112
|
it 'generates field blocks immediately' do
|
111
113
|
company.name.should == "Hashrocket"
|
@@ -115,6 +117,10 @@ describe Fabrication do
|
|
115
117
|
Division.find_all_by_company_id(company.id).count.should == 4
|
116
118
|
end
|
117
119
|
|
120
|
+
it 'executes after build blocks' do
|
121
|
+
other_company.name.should == 'Crazysauce'
|
122
|
+
end
|
123
|
+
|
118
124
|
it 'executes after create blocks' do
|
119
125
|
company.city.should == 'Jacksonville Beach'
|
120
126
|
end
|
@@ -124,7 +130,7 @@ describe Fabrication do
|
|
124
130
|
end
|
125
131
|
|
126
132
|
it 'overrides inherited associations' do
|
127
|
-
|
133
|
+
other_company.divisions.count.should == 2
|
128
134
|
Division.count.should == 2
|
129
135
|
end
|
130
136
|
|
data/spec/fabricators.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Fabricator(:awesome_object, :from => :object)
|
@@ -0,0 +1 @@
|
|
1
|
+
Fabricator(:cool_object, :from => :object)
|
data/spec/generator/base_spec.rb
CHANGED
@@ -9,11 +9,19 @@ describe Fabrication::Generator::Base do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
describe "#after_build" do
|
13
|
+
subject { Fabrication::Generator::Base.new(Object) }
|
14
|
+
before { subject.after_build { "something" } }
|
15
|
+
it "stores the after create block" do
|
16
|
+
Proc.should === subject.callbacks[:after_build]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
12
20
|
describe "#after_create" do
|
13
21
|
subject { Fabrication::Generator::Base.new(Object) }
|
14
22
|
before { subject.after_create { "something" } }
|
15
23
|
it "stores the after create block" do
|
16
|
-
Proc.should === subject.
|
24
|
+
Proc.should === subject.callbacks[:after_create]
|
17
25
|
end
|
18
26
|
end
|
19
27
|
|
data/spec/support_spec.rb
CHANGED
@@ -36,17 +36,7 @@ describe Fabrication::Support do
|
|
36
36
|
|
37
37
|
describe ".find_definitions" do
|
38
38
|
|
39
|
-
before(:all)
|
40
|
-
File.open("spec/fabricators.rb", "w") do |f|
|
41
|
-
f.write("Fabricator(:awesome_object, :from => :object)")
|
42
|
-
end
|
43
|
-
File.open("spec/fabricators/cool_object.rb", "w") do |f|
|
44
|
-
f.write("Fabricator(:cool_object, :from => :object)")
|
45
|
-
end
|
46
|
-
Fabrication::Support.find_definitions
|
47
|
-
File.delete("spec/fabricators.rb")
|
48
|
-
File.delete("spec/fabricators/cool_object.rb")
|
49
|
-
end
|
39
|
+
before(:all) { Fabrication::Support.find_definitions }
|
50
40
|
|
51
41
|
it "has an awesome object" do
|
52
42
|
Fabrication::Fabricator.schematics[:awesome_object].should be
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fabrication
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 3
|
10
|
+
version: 0.6.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Paul Elliott
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-18 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -136,6 +136,8 @@ files:
|
|
136
136
|
- lib/fabrication.rb
|
137
137
|
- spec/fabrication_spec.rb
|
138
138
|
- spec/fabricator_spec.rb
|
139
|
+
- spec/fabricators/cool_object_fabricator.rb
|
140
|
+
- spec/fabricators.rb
|
139
141
|
- spec/generator/active_record_spec.rb
|
140
142
|
- spec/generator/base_spec.rb
|
141
143
|
- spec/generator/mongoid_spec.rb
|