blueprints 0.4.2 → 0.5.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/VERSION +1 -1
- data/blueprints.gemspec +7 -7
- data/lib/blueprints/context.rb +4 -0
- data/lib/blueprints/database_backends/active_record.rb +3 -5
- data/lib/blueprints/helper.rb +5 -4
- data/lib/blueprints/plan.rb +6 -0
- data/lib/blueprints/root_namespace.rb +14 -4
- data/spec/active_record/blueprint.rb +6 -1
- data/spec/active_record/blueprints_spec.rb +42 -3
- metadata +7 -7
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/blueprints.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{blueprints}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andrius Chamentauskas"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-02-17}
|
13
13
|
s.description = %q{Another replacement for factories and fixtures. The library that lazy typists will love}
|
14
14
|
s.email = %q{sinsiliux@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -63,15 +63,15 @@ Gem::Specification.new do |s|
|
|
63
63
|
s.summary = %q{Another replacement for factories and fixtures}
|
64
64
|
s.test_files = [
|
65
65
|
"spec/no_db/fixtures/fruit.rb",
|
66
|
-
"spec/no_db/blueprint.rb",
|
67
|
-
"spec/no_db/blueprints_spec.rb",
|
68
66
|
"spec/no_db/spec_helper.rb",
|
69
|
-
"spec/
|
67
|
+
"spec/no_db/blueprints_spec.rb",
|
68
|
+
"spec/no_db/blueprint.rb",
|
70
69
|
"spec/active_record/fixtures/fruit.rb",
|
70
|
+
"spec/active_record/fixtures/tree.rb",
|
71
71
|
"spec/active_record/fixtures/schema.rb",
|
72
|
-
"spec/active_record/blueprint.rb",
|
73
|
-
"spec/active_record/blueprints_spec.rb",
|
74
72
|
"spec/active_record/spec_helper.rb",
|
73
|
+
"spec/active_record/blueprints_spec.rb",
|
74
|
+
"spec/active_record/blueprint.rb",
|
75
75
|
"test/test_helper.rb",
|
76
76
|
"test/blueprints_test.rb"
|
77
77
|
]
|
data/lib/blueprints/context.rb
CHANGED
@@ -69,12 +69,10 @@ module Blueprints
|
|
69
69
|
end
|
70
70
|
|
71
71
|
module Instance
|
72
|
-
# Updates attributes of object and calls save!. Bypasses attr_protected
|
72
|
+
# Updates attributes of object and calls save!. Bypasses attr_protected anduep attr_accessible.
|
73
73
|
def blueprint(attributes)
|
74
|
-
attributes.each
|
75
|
-
|
76
|
-
send("#{attr}=", value)
|
77
|
-
end
|
74
|
+
attributes.each {|attr, value| attributes[attr] = Blueprints::Namespace.root.context.instance_variable_get(value) if value.is_a? Symbol and value.to_s =~ /^@.+$/ }
|
75
|
+
send(:attributes=, attributes, false)
|
78
76
|
save!
|
79
77
|
end
|
80
78
|
end
|
data/lib/blueprints/helper.rb
CHANGED
@@ -7,11 +7,12 @@ module Blueprints
|
|
7
7
|
# build :apple, :orange
|
8
8
|
#
|
9
9
|
# # build :apple scenario with additional options
|
10
|
-
# build :apple
|
10
|
+
# build :apple => {:color => 'red'}
|
11
|
+
#
|
12
|
+
# # options can also be passed for several blueprints
|
13
|
+
# build :pear, :apple => {:color => 'red'}, :orange => {:color => 'orange'}
|
11
14
|
def build_plan(*names)
|
12
|
-
|
13
|
-
Namespace.root.copy_ivars(self)
|
14
|
-
result
|
15
|
+
returning(Namespace.root.build(*names)) { Namespace.root.copy_ivars(self) }
|
15
16
|
end
|
16
17
|
|
17
18
|
alias :build :build_plan
|
data/lib/blueprints/plan.rb
CHANGED
@@ -19,6 +19,12 @@ module Blueprints
|
|
19
19
|
@result
|
20
20
|
end
|
21
21
|
|
22
|
+
# Changes blueprint block to build another blueprint by passing additional options to it. Usually used to dry up
|
23
|
+
# blueprints that are often built with some options.
|
24
|
+
def extends(parent, options)
|
25
|
+
@block = Proc.new { build parent => options }
|
26
|
+
end
|
27
|
+
|
22
28
|
private
|
23
29
|
|
24
30
|
def surface_errors
|
@@ -9,6 +9,7 @@ module Blueprints
|
|
9
9
|
def initialize
|
10
10
|
@executed_plans = Set.new
|
11
11
|
@global_executed_plans = Set.new
|
12
|
+
@auto_iv_list = Set.new
|
12
13
|
|
13
14
|
super ''
|
14
15
|
end
|
@@ -38,14 +39,23 @@ module Blueprints
|
|
38
39
|
|
39
40
|
# Builds blueprints that are passed against current context.
|
40
41
|
def build(*names)
|
41
|
-
|
42
|
-
|
42
|
+
names.inject(nil) do |result, member|
|
43
|
+
if member.is_a?(Hash)
|
44
|
+
member.map {|name, options| self[name].build(options) }.last
|
45
|
+
else
|
46
|
+
self[member].build
|
47
|
+
end
|
48
|
+
end
|
43
49
|
end
|
44
50
|
|
45
|
-
# Sets instance variable in current context to passed value.
|
51
|
+
# Sets instance variable in current context to passed value. If instance variable with same name already exists, it
|
52
|
+
# is set only if it was set using this same method
|
46
53
|
def add_variable(name, value)
|
47
54
|
name = "@#{name}" unless name.to_s[0, 1] == "@"
|
48
|
-
|
55
|
+
if !@context.instance_variable_get(name) or @auto_iv_list.include?(name)
|
56
|
+
@auto_iv_list << name
|
57
|
+
@context.instance_variable_set(name, value)
|
58
|
+
end
|
49
59
|
end
|
50
60
|
|
51
61
|
@@root = RootNamespace.new
|
@@ -35,12 +35,17 @@ end
|
|
35
35
|
blueprint :parent_not_existing => :not_existing
|
36
36
|
|
37
37
|
Tree.blueprint :oak, :name => 'Oak', :size => 'large'
|
38
|
+
blueprint(:huge_oak).extends(:oak, :size => 'huge')
|
38
39
|
|
39
40
|
blueprint :pine do
|
40
41
|
@the_pine = Tree.blueprint :name => 'Pine', :size => 'medium'
|
41
42
|
end
|
42
43
|
|
43
44
|
Fruit.blueprint(:acorn, :species => 'Acorn', :tree => :@oak).depends_on(:oak)
|
45
|
+
blueprint :small_acorn do
|
46
|
+
build :acorn => {:average_diameter => 1}
|
47
|
+
end
|
48
|
+
blueprint(:huge_acorn => :huge_oak).extends(:acorn, :average_diameter => 100)
|
44
49
|
|
45
50
|
namespace :pitted => :pine do
|
46
51
|
Tree.blueprint :peach_tree, :name => 'pitted peach tree'
|
@@ -53,5 +58,5 @@ namespace :pitted => :pine do
|
|
53
58
|
end
|
54
59
|
|
55
60
|
blueprint :apple_with_params do
|
56
|
-
Fruit.create! options.
|
61
|
+
Fruit.create! options.reverse_merge(:species => 'apple')
|
57
62
|
end
|
@@ -254,7 +254,7 @@ describe Blueprints do
|
|
254
254
|
end
|
255
255
|
|
256
256
|
it "should automatically merge passed options" do
|
257
|
-
build :oak
|
257
|
+
build :oak => {:size => 'optional'}
|
258
258
|
@oak.name.should == 'Oak'
|
259
259
|
@oak.size.should == 'optional'
|
260
260
|
end
|
@@ -309,7 +309,7 @@ describe Blueprints do
|
|
309
309
|
|
310
310
|
describe 'extra parameters' do
|
311
311
|
it "should allow passing extra parameters when building" do
|
312
|
-
build :apple_with_params
|
312
|
+
build :apple_with_params => {:average_diameter => 14}
|
313
313
|
@apple_with_params.average_diameter.should == 14
|
314
314
|
@apple_with_params.species.should == 'apple'
|
315
315
|
end
|
@@ -321,9 +321,48 @@ describe Blueprints do
|
|
321
321
|
end
|
322
322
|
|
323
323
|
it "should use extra params only on blueprints specified" do
|
324
|
-
build :acorn
|
324
|
+
build :acorn => {:average_diameter => 5}
|
325
325
|
@acorn.average_diameter.should == 5
|
326
326
|
end
|
327
|
+
|
328
|
+
it "should allow passing extra params for each blueprint individually" do
|
329
|
+
build :acorn => {:average_diameter => 3}, :apple_with_params => {:average_diameter => 2}
|
330
|
+
@acorn.average_diameter.should == 3
|
331
|
+
@apple_with_params.average_diameter.should == 2
|
332
|
+
end
|
333
|
+
|
334
|
+
it "should allow passing options for some blueprints only" do
|
335
|
+
build(:acorn, :apple_with_params => {:average_diameter => 2}).should == @apple_with_params
|
336
|
+
@acorn.average_diameter.should == nil
|
337
|
+
@apple_with_params.average_diameter.should == 2
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
it "should overwrite auto created instance variable with another auto created one" do
|
342
|
+
build :acorn => {:average_diameter => 3}
|
343
|
+
demolish :fruits, :undo => :acorn
|
344
|
+
@acorn.average_diameter.should == 3
|
345
|
+
|
346
|
+
build :acorn => {:average_diameter => 5}
|
347
|
+
@acorn.average_diameter.should == 5
|
348
|
+
end
|
349
|
+
|
350
|
+
describe "extending blueprints" do
|
351
|
+
it "should allow to call build method inside blueprint body" do
|
352
|
+
build :small_acorn
|
353
|
+
@small_acorn.average_diameter.should == 1
|
354
|
+
@small_acorn.should == @acorn
|
355
|
+
end
|
356
|
+
|
357
|
+
it "should allow to use shortcut to extend blueprint" do
|
358
|
+
build :huge_acorn
|
359
|
+
@huge_acorn.average_diameter.should == 100
|
360
|
+
end
|
361
|
+
|
362
|
+
it "should allow extended blueprint be dependency and associated object" do
|
363
|
+
build :huge_acorn
|
364
|
+
@huge_acorn.tree.size.should == 'huge'
|
365
|
+
end
|
327
366
|
end
|
328
367
|
end
|
329
368
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blueprints
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrius Chamentauskas
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-17 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -91,14 +91,14 @@ specification_version: 3
|
|
91
91
|
summary: Another replacement for factories and fixtures
|
92
92
|
test_files:
|
93
93
|
- spec/no_db/fixtures/fruit.rb
|
94
|
-
- spec/no_db/blueprint.rb
|
95
|
-
- spec/no_db/blueprints_spec.rb
|
96
94
|
- spec/no_db/spec_helper.rb
|
97
|
-
- spec/
|
95
|
+
- spec/no_db/blueprints_spec.rb
|
96
|
+
- spec/no_db/blueprint.rb
|
98
97
|
- spec/active_record/fixtures/fruit.rb
|
98
|
+
- spec/active_record/fixtures/tree.rb
|
99
99
|
- spec/active_record/fixtures/schema.rb
|
100
|
-
- spec/active_record/blueprint.rb
|
101
|
-
- spec/active_record/blueprints_spec.rb
|
102
100
|
- spec/active_record/spec_helper.rb
|
101
|
+
- spec/active_record/blueprints_spec.rb
|
102
|
+
- spec/active_record/blueprint.rb
|
103
103
|
- test/test_helper.rb
|
104
104
|
- test/blueprints_test.rb
|