bricks 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.md CHANGED
@@ -1,6 +1,12 @@
1
1
  History
2
2
  =======
3
3
 
4
+ 0.4.1
5
+ -----
6
+
7
+ * You no longer need to place builders for classes used in associations before the builders for objects that declare those associations.
8
+ * Fixed: you can now create builders for *-to-many associations using only the default attributes.
9
+
4
10
  0.4.0
5
11
  -----
6
12
 
data/README.md CHANGED
@@ -155,13 +155,22 @@ There is a slight difference between using `~` and `?`. `~` will permanently cha
155
155
 
156
156
  #### One-to-many, Many-to-many (has many, has and belongs to many)
157
157
 
158
- Bricks do
159
- builder Article do
160
- # ...
158
+ You can create several objects for a *-to-many association by calling the method `#build` on the association:
161
159
 
162
- # readers association will have 3 records
163
- %w(Tom Dick Harry).each { |r| readers.name(r) }
164
- end
160
+ builder Article do
161
+ # readers association will have 3 records
162
+ 3.times { readers.build }
163
+ end
164
+
165
+ Upon generation, this will add 3 records with their attributes set to the defaults defined in the association class' builder.
166
+
167
+ If you want to further customize each builder in the association, you can omit the `#build` method call:
168
+
169
+ builder Article do
170
+ # ...
171
+
172
+ # readers association will have 3 records
173
+ %w(Tom Dick Harry).each { |r| readers.name(r) }
165
174
  end
166
175
 
167
176
  Each call to the *-to-many association name will add a new builder, which you can then further customize:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.1
data/bricks.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bricks}
8
- s.version = "0.4.0"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Leal"]
12
- s.date = %q{2011-06-21}
12
+ s.date = %q{2011-06-23}
13
13
  s.email = %q{david@mojotech.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -24,6 +24,8 @@ module Bricks
24
24
  end
25
25
 
26
26
  def derive(args = {})
27
+ build_attrs
28
+
27
29
  klass = args[:class] || @class
28
30
  save = args.has_key?(:save) ? args[:save] : @save
29
31
  search = args.has_key?(:search) ? args[:search] : @search
@@ -43,10 +45,9 @@ module Bricks
43
45
  @traits = traits ? Module.new { include traits } : Module.new
44
46
  @save = save
45
47
  @search = search
48
+ @block = block
46
49
 
47
50
  extend @traits
48
-
49
- instance_eval &block if block_given?
50
51
  end
51
52
 
52
53
  def generate(opts = {})
@@ -158,5 +159,9 @@ module Bricks
158
159
  "No value or block given and not an association: #{name}."
159
160
  end
160
161
  end
162
+
163
+ def build_attrs
164
+ instance_eval &@block if @block && @attrs.empty?
165
+ end
161
166
  end
162
167
  end
@@ -4,11 +4,11 @@ module Bricks
4
4
  class BuilderSet
5
5
  include Bricks::DSL
6
6
 
7
- def build(klass)
7
+ def build(klass = @class)
8
8
  (@builders << super).last
9
9
  end
10
10
 
11
- def build!(klass)
11
+ def build!(klass = @class)
12
12
  (@builders << super).last
13
13
  end
14
14
 
@@ -16,11 +16,11 @@ module Bricks
16
16
  @builders.clear
17
17
  end
18
18
 
19
- def create(klass)
19
+ def create(klass = @class)
20
20
  (@builders << super).last
21
21
  end
22
22
 
23
- def create!(klass)
23
+ def create!(klass = @class)
24
24
  (@builders << super).last
25
25
  end
26
26
 
data/spec/bricks_spec.rb CHANGED
@@ -11,14 +11,6 @@ describe Bricks do
11
11
  start_date Date.new(1900, 1, 1)
12
12
  end
13
13
 
14
- builder Newspaper do
15
- name "The Daily Planet"
16
-
17
- trait :daily_bugle do
18
- name "The Daily Bugle"
19
- end
20
- end
21
-
22
14
  builder Article do
23
15
  author 'Jack Jupiter'
24
16
  title 'a title'
@@ -53,6 +45,14 @@ describe Bricks do
53
45
  %w(Tom Dick Harry).each { |n| readers.name(n) }
54
46
  end
55
47
  end
48
+
49
+ builder Newspaper do
50
+ name "The Daily Planet"
51
+
52
+ trait :daily_bugle do
53
+ name "The Daily Bugle"
54
+ end
55
+ end
56
56
  end
57
57
  end
58
58
 
@@ -197,6 +197,12 @@ describe Bricks do
197
197
  r.name
198
198
  }.should == %w(Tom Dick Harry)
199
199
  end
200
+
201
+ it "creates records with default attributes" do
202
+ a = create(Article).tap { |b| 2.times { b.readers.build } }.generate
203
+
204
+ a.should have(5).readers
205
+ end
200
206
  end
201
207
 
202
208
  describe "builder inheritance" do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bricks
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.0
5
+ version: 0.4.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - David Leal
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-21 00:00:00 +01:00
13
+ date: 2011-06-23 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -101,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
- hash: -979563633
104
+ hash: -949772447
105
105
  segments:
106
106
  - 0
107
107
  version: "0"