factory_girl_kibiz0r 2.0.0.beta2 → 2.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,7 +12,6 @@ require 'factory_girl/attribute/association'
12
12
  require 'factory_girl/attribute/callback'
13
13
  require 'factory_girl/attribute/sequence'
14
14
  require 'factory_girl/attribute/implicit'
15
- require 'factory_girl/attribute/list'
16
15
  require 'factory_girl/sequence'
17
16
  require 'factory_girl/aliases'
18
17
  require 'factory_girl/definition_proxy'
@@ -12,8 +12,7 @@ module FactoryGirl
12
12
  if FactoryGirl::Sequence === value
13
13
  raise SequenceAbuseError
14
14
  end
15
- method = !ignored? ? :set : :ignore
16
- proxy.send(method, name, value)
15
+ proxy.set(name, value)
17
16
  end
18
17
  end
19
18
 
@@ -9,8 +9,7 @@ module FactoryGirl
9
9
  end
10
10
 
11
11
  def add_to(proxy)
12
- method = !ignored? ? :set : :ignore
13
- proxy.send(method, name, @value)
12
+ proxy.set(name, @value)
14
13
  end
15
14
  end
16
15
 
@@ -36,7 +36,7 @@ module FactoryGirl
36
36
  assert_valid_options(options)
37
37
  @name = factory_name_for(name)
38
38
  @options = options
39
- @attributes = Attribute::List.new
39
+ @attributes = []
40
40
  end
41
41
 
42
42
  def inherit_from(parent) #:nodoc:
@@ -62,17 +62,21 @@ module FactoryGirl
62
62
  raise AssociationDefinitionError, "Self-referencing association '#{name}' in factory '#{self.name}'"
63
63
  end
64
64
  @attributes << attribute
65
+ attribute
65
66
  end
66
67
 
67
68
  def add_callback(name, &block)
68
69
  unless [:after_build, :after_create, :after_stub].include?(name.to_sym)
69
70
  raise InvalidCallbackNameError, "#{name} is not a valid callback name. Valid callback names are :after_build, :after_create, and :after_stub"
70
71
  end
71
- @attributes << Attribute::Callback.new(name.to_sym, block)
72
+ attribute = Attribute::Callback.new(name.to_sym, block)
73
+ @attributes << attribute
74
+ attribute
72
75
  end
73
76
 
74
77
  def run(proxy_class, overrides) #:nodoc:
75
78
  proxy = proxy_class.new(build_class)
79
+ proxy.ignored_attributes = ignored_attributes
76
80
  overrides = symbolize_keys(overrides)
77
81
  overrides.each {|attr, val| proxy.set(attr, val) }
78
82
  passed_keys = overrides.keys.collect {|k| FactoryGirl.aliases_for(k) }.flatten
@@ -127,6 +131,14 @@ module FactoryGirl
127
131
 
128
132
  private
129
133
 
134
+ def ignored_attributes
135
+ Hash[@attributes.select do |attribute|
136
+ attribute.ignored?
137
+ end.map do |attribute|
138
+ [attribute.name, nil]
139
+ end]
140
+ end
141
+
130
142
  def class_for (class_or_to_s)
131
143
  if class_or_to_s.respond_to?(:to_sym)
132
144
  class_name = variable_name_to_class_name(class_or_to_s)
@@ -2,20 +2,31 @@ module FactoryGirl
2
2
  class Proxy #:nodoc:
3
3
 
4
4
  attr_reader :callbacks
5
+ attr_writer :ignored_attributes
5
6
 
6
7
  def initialize(klass)
7
8
  end
8
9
 
9
10
  def get(attribute)
10
- @ignored && @ignored[attribute]
11
+ if ignored? attribute
12
+ ignored_attributes[attribute]
13
+ else
14
+ get_attr attribute
15
+ end
16
+ end
17
+
18
+ def get_attr(attribute)
11
19
  end
12
20
 
13
21
  def set(attribute, value)
22
+ if ignored? attribute
23
+ ignored_attributes[attribute] = value
24
+ else
25
+ set_attr attribute, value
26
+ end
14
27
  end
15
28
 
16
- def ignore(attribute, value)
17
- @ignored = {}
18
- @ignored[attribute] = value
29
+ def set_attr(attribute, value)
19
30
  end
20
31
 
21
32
  def associate(name, factory, attributes)
@@ -83,5 +94,15 @@ module FactoryGirl
83
94
  def result(to_create)
84
95
  raise NotImplementedError, "Strategies must return a result"
85
96
  end
97
+
98
+ private
99
+
100
+ def ignored?(attribute)
101
+ ignored_attributes.has_key? attribute
102
+ end
103
+
104
+ def ignored_attributes
105
+ @ignored_attributes ||= {}
106
+ end
86
107
  end
87
108
  end
@@ -5,11 +5,11 @@ module FactoryGirl
5
5
  @hash = {}
6
6
  end
7
7
 
8
- def get(attribute)
8
+ def get_attr(attribute)
9
9
  @hash[attribute]
10
10
  end
11
11
 
12
- def set(attribute, value)
12
+ def set_attr(attribute, value)
13
13
  @hash[attribute] = value
14
14
  end
15
15
 
@@ -5,15 +5,11 @@ module FactoryGirl
5
5
  @instance = klass.new
6
6
  end
7
7
 
8
- def get(attribute)
9
- if @instance.respond_to?(attribute)
10
- @instance.send(attribute)
11
- else
12
- super
13
- end
8
+ def get_attr(attribute)
9
+ @instance.send(attribute)
14
10
  end
15
11
 
16
- def set(attribute, value)
12
+ def set_attr(attribute, value)
17
13
  @instance.send(:"#{attribute}=", value)
18
14
  end
19
15
 
@@ -1,4 +1,4 @@
1
1
  module FactoryGirl
2
- VERSION = "2.0.0.beta2"
2
+ VERSION = "2.0.0.beta3"
3
3
  end
4
4
 
@@ -23,11 +23,12 @@ describe "a generated attributes hash" do
23
23
  body { "default body" }
24
24
  summary { title }
25
25
  user
26
+ uploaded_image(nil).ignore
26
27
  end
27
28
  end
28
29
  end
29
30
 
30
- subject { attributes_for(:post, :title => 'overridden title') }
31
+ subject { attributes_for(:post, :title => 'overridden title', :uploaded_image => "foo") }
31
32
 
32
33
  it "assigns an overridden value" do
33
34
  subject[:title].should == "overridden title"
@@ -44,5 +45,9 @@ describe "a generated attributes hash" do
44
45
  it "doesn't assign associations" do
45
46
  subject[:user_id].should be_nil
46
47
  end
48
+
49
+ it "doesn't assign ignored attributes" do
50
+ subject[:uploaded_image].should be_nil
51
+ end
47
52
  end
48
53
 
@@ -17,7 +17,7 @@ describe "callbacks" do
17
17
  end
18
18
 
19
19
  factory :user_with_proxied_callbacks, :parent => :user_with_callbacks do |u|
20
- u.proxified?(true).ignore
20
+ u.proxified?(false).ignore
21
21
  after_create { |user, proxy| user.last_name << ', Proxified' if proxy.proxified? }
22
22
  end
23
23
  end
@@ -46,7 +46,7 @@ describe "callbacks" do
46
46
  end
47
47
 
48
48
  it "provides the proxy to callbacks that want it" do
49
- user = FactoryGirl.create(:user_with_proxied_callbacks)
49
+ user = FactoryGirl.create(:user_with_proxied_callbacks, :proxified? => true)
50
50
  user.first_name.should == 'Buildy'
51
51
  user.last_name.should == 'Createy, Proxified'
52
52
  end
@@ -53,6 +53,7 @@ describe FactoryGirl::Factory do
53
53
  stub(@attribute).add_to
54
54
  stub(@proxy).set
55
55
  stub(@proxy).result { 'result' }
56
+ stub(@proxy).ignored_attributes = anything
56
57
  stub(FactoryGirl::Attribute::Static).new { @attribute }
57
58
  stub(FactoryGirl::Proxy::Build).new { @proxy }
58
59
 
@@ -69,6 +70,12 @@ describe FactoryGirl::Factory do
69
70
  @factory.run(FactoryGirl::Proxy::Build, {})
70
71
  end
71
72
 
73
+ it "should add the ignored attributes to the proxy by name when running" do
74
+ stub(@attribute).ignored? { true }
75
+ mock(@proxy).ignored_attributes = { :name => nil }
76
+ @factory.run(FactoryGirl::Proxy::Build, {})
77
+ end
78
+
72
79
  it "should return the result from the proxy when running" do
73
80
  mock(@proxy).result(nil) { 'result' }
74
81
  @factory.run(FactoryGirl::Proxy::Build, {}).should == 'result'
@@ -79,6 +86,7 @@ describe FactoryGirl::Factory do
79
86
  proxy = 'proxy'
80
87
  stub(FactoryGirl::Proxy::Build).new { proxy }
81
88
  stub(proxy).result {}
89
+ stub(proxy).ignored_attributes = anything
82
90
  block = lambda {}
83
91
  factory = FactoryGirl::Factory.new(:object)
84
92
  factory.to_create(&block)
@@ -10,7 +10,7 @@ describe FactoryGirl::Proxy do
10
10
  end
11
11
 
12
12
  it "should return nil when asked for an attribute" do
13
- @proxy.get(:name).should be_nil
13
+ @proxy.get_attr(:name).should be_nil
14
14
  end
15
15
 
16
16
  it "should call get for a missing method" do
@@ -18,13 +18,31 @@ describe FactoryGirl::Proxy do
18
18
  @proxy.name.should == "it's a name"
19
19
  end
20
20
 
21
- it "should store ignored attributes" do
22
- @proxy.ignore(:name, "it's a name").should == "it's a name"
23
- end
21
+ describe "with ignored attributes" do
22
+ before do
23
+ @proxy.ignored_attributes = {
24
+ :foo => "bar",
25
+ :baz => 8,
26
+ :nil_attr => nil
27
+ }
28
+ dont_allow(@proxy).get_attr
29
+ dont_allow(@proxy).set_attr
30
+ end
31
+
32
+ it "#set stores the value rather than calling #set_attr" do
33
+ @proxy.set(:baz, 5)
34
+ @proxy.get(:baz).should == 5
35
+ end
36
+
37
+ it "#get returns the stored value of the ignored attribute without calling #get_attr" do
38
+ @proxy.get(:foo).should == "bar"
39
+ end
24
40
 
25
- it "should get an ignored attribute" do
26
- @proxy.ignore(:name, "it's a name")
27
- @proxy.get(:name).should == "it's a name"
41
+ it "recognizes nil as a valid value for an ignored attribute" do
42
+ @proxy.get(:nil_attr).should be_nil
43
+ @proxy.set(:baz, nil)
44
+ @proxy.get(:baz).should be_nil
45
+ end
28
46
  end
29
47
 
30
48
  it "should do nothing when asked to associate with another factory" do
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl_kibiz0r
3
3
  version: !ruby/object:Gem::Version
4
- hash: -1848230038
5
- prerelease: true
4
+ hash: 62196453
5
+ prerelease: 6
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
9
  - 0
10
- - beta2
11
- version: 2.0.0.beta2
10
+ - beta
11
+ - 3
12
+ version: 2.0.0.beta3
12
13
  platform: ruby
13
14
  authors:
14
15
  - Joe Ferris
@@ -16,8 +17,7 @@ autorequire:
16
17
  bindir: bin
17
18
  cert_chain: []
18
19
 
19
- date: 2011-05-25 00:00:00 -04:00
20
- default_executable:
20
+ date: 2011-05-26 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rcov
@@ -85,12 +85,13 @@ dependencies:
85
85
  requirements:
86
86
  - - ~>
87
87
  - !ruby/object:Gem::Version
88
- hash: -1848230021
88
+ hash: 62196421
89
89
  segments:
90
90
  - 3
91
91
  - 0
92
92
  - 0
93
- - beta3
93
+ - beta
94
+ - 3
94
95
  version: 3.0.0.beta3
95
96
  type: :development
96
97
  version_requirements: *id005
@@ -148,7 +149,6 @@ files:
148
149
  - lib/factory_girl/attribute/callback.rb
149
150
  - lib/factory_girl/attribute/dynamic.rb
150
151
  - lib/factory_girl/attribute/implicit.rb
151
- - lib/factory_girl/attribute/list.rb
152
152
  - lib/factory_girl/attribute/sequence.rb
153
153
  - lib/factory_girl/attribute/static.rb
154
154
  - lib/factory_girl/attribute.rb
@@ -216,7 +216,6 @@ files:
216
216
  - features/step_definitions/database_steps.rb
217
217
  - features/support/env.rb
218
218
  - features/support/factories.rb
219
- has_rdoc: true
220
219
  homepage: http://thoughtbot.com/projects/factory_girl
221
220
  licenses: []
222
221
 
@@ -248,10 +247,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
247
  requirements: []
249
248
 
250
249
  rubyforge_project:
251
- rubygems_version: 1.3.7
250
+ rubygems_version: 1.8.4
252
251
  signing_key:
253
252
  specification_version: 3
254
- summary: factory_girl provides a framework and DSL for defining and using model instance factories. (Includes ignorable attributes.)
253
+ summary: factory_girl provides a framework and DSL for defining and using model instance factories.
255
254
  test_files:
256
255
  - spec/acceptance/attribute_aliases_spec.rb
257
256
  - spec/acceptance/attributes_for_spec.rb
@@ -1,19 +0,0 @@
1
- module FactoryGirl
2
-
3
- class Attribute
4
-
5
- class List < Array
6
-
7
- def method_missing(method, *args, &block)
8
- if empty?
9
- super
10
- else
11
- last.send(method, *args, &block)
12
- end
13
- end
14
-
15
- end
16
-
17
- end
18
-
19
- end