factory_girl 3.3.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/GETTING_STARTED.md CHANGED
@@ -762,6 +762,25 @@ factory :user do
762
762
  end
763
763
  ```
764
764
 
765
+ You can also access all public attributes within the `initialize_with` block
766
+ by calling `attributes`:
767
+
768
+ ```ruby
769
+ factory :user do
770
+ ignore do
771
+ comments_count 5
772
+ end
773
+
774
+ name { Faker::Name.name }
775
+
776
+ initialize_with { new(attributes) }
777
+ end
778
+ ```
779
+
780
+ This will build a hash of all attributes to be passed to `new`. It won't
781
+ include ignored attributes, but everything else defined in the factory will be
782
+ passed (associations, evalued sequences, etc.)
783
+
765
784
  You can define `initialize_with` for all factories by including it in the
766
785
  `FactoryGirl.define` block:
767
786
 
@@ -771,6 +790,15 @@ FactoryGirl.define do
771
790
  end
772
791
  ```
773
792
 
793
+ When using `initialize_with`, attributes accessed from the `initialize_with`
794
+ block are assigned a second time to the instance. Duplicate assignment can be
795
+ disabled by configuring FactoryGirl as such:
796
+
797
+ FactoryGirl.duplicate_attribute_assignment_from_initialize_with = false
798
+
799
+ This would allow for attributes declared as ignored to not be ignored, since
800
+ it won't assign them for a second time.
801
+
774
802
  Custom Strategies
775
803
  -----------------
776
804
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- factory_girl (3.3.0)
4
+ factory_girl (3.4.0)
5
5
  activesupport (>= 3.0.0)
6
6
 
7
7
  GEM
data/NEWS CHANGED
@@ -1,3 +1,9 @@
1
+ 3.4.0 (June 11, 2012)
2
+ Sequences support Enumerators
3
+ Optionally disable duplicate assignment of attributes in initialize_with
4
+ Make hash of public attributes available in initialize_with
5
+ Support referring to a factory based on class name
6
+
1
7
  3.3.0 (May 13, 2012)
2
8
  Allow to_create, skip_create, and initialize_with to be defined globally
3
9
  Allow to_create, skip_create, and initialize_with to be defined within traits
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/joshuaclayton/dev/gems/factory_girl
3
3
  specs:
4
- factory_girl (3.3.0)
4
+ factory_girl (3.4.0)
5
5
  activesupport (>= 3.0.0)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/joshuaclayton/dev/gems/factory_girl
3
3
  specs:
4
- factory_girl (3.3.0)
4
+ factory_girl (3.4.0)
5
5
  activesupport (>= 3.0.0)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/joshuaclayton/dev/gems/factory_girl
3
3
  specs:
4
- factory_girl (3.3.0)
4
+ factory_girl (3.4.0)
5
5
  activesupport (>= 3.0.0)
6
6
 
7
7
  GEM
data/lib/factory_girl.rb CHANGED
@@ -12,7 +12,6 @@ require 'factory_girl/strategy/create'
12
12
  require 'factory_girl/strategy/attributes_for'
13
13
  require 'factory_girl/strategy/stub'
14
14
  require 'factory_girl/strategy/null'
15
- require 'factory_girl/disallows_duplicates_registry'
16
15
  require 'factory_girl/registry'
17
16
  require 'factory_girl/null_factory'
18
17
  require 'factory_girl/null_object'
@@ -37,6 +36,12 @@ require 'factory_girl/syntax'
37
36
  require 'factory_girl/syntax_runner'
38
37
  require 'factory_girl/find_definitions'
39
38
  require 'factory_girl/reload'
39
+ require 'factory_girl/decorator'
40
+ require 'factory_girl/decorator/attribute_hash'
41
+ require 'factory_girl/decorator/class_key_hash'
42
+ require 'factory_girl/decorator/disallows_duplicates_registry'
43
+ require 'factory_girl/decorator/invocation_tracker'
44
+ require 'factory_girl/decorator/invocation_ignorer'
40
45
  require 'factory_girl/version'
41
46
 
42
47
  module FactoryGirl
@@ -50,7 +55,8 @@ module FactoryGirl
50
55
 
51
56
  class << self
52
57
  delegate :factories, :sequences, :traits, :strategies, :callback_names,
53
- :to_create, :skip_create, :initialize_with, :constructor, to: :configuration
58
+ :to_create, :skip_create, :initialize_with, :constructor, :duplicate_attribute_assignment_from_initialize_with,
59
+ :duplicate_attribute_assignment_from_initialize_with=, to: :configuration
54
60
  end
55
61
 
56
62
  def self.register_factory(factory)
@@ -30,8 +30,28 @@ module FactoryGirl
30
30
 
31
31
  private
32
32
 
33
+ def method_tracking_evaluator
34
+ @method_tracking_evaluator ||= Decorator::AttributeHash.new(invocation_decorator.new(@evaluator), attribute_names_to_assign)
35
+ end
36
+
37
+ def invocation_decorator
38
+ if FactoryGirl.duplicate_attribute_assignment_from_initialize_with
39
+ Decorator::InvocationIgnorer
40
+ else
41
+ Decorator::InvocationTracker
42
+ end
43
+ end
44
+
45
+ def methods_invoked_on_evaluator
46
+ method_tracking_evaluator.__invoked_methods__
47
+ end
48
+
33
49
  def build_class_instance
34
- @build_class_instance ||= @evaluator.instance_exec(&@instance_builder)
50
+ @build_class_instance ||= method_tracking_evaluator.instance_exec(&@instance_builder).tap do
51
+ if @instance_builder != FactoryGirl.constructor && FactoryGirl.duplicate_attribute_assignment_from_initialize_with
52
+ ActiveSupport::Deprecation.warn 'Accessing attributes from initialize_with when duplicate assignment is enabled is deprecated; use FactoryGirl.duplicate_attribute_assignment_from_initialize_with = false.', caller
53
+ end
54
+ end
35
55
  end
36
56
 
37
57
  def build_hash
@@ -43,7 +63,7 @@ module FactoryGirl
43
63
  end
44
64
 
45
65
  def attributes_to_set_on_instance
46
- (attribute_names_to_assign - @attribute_names_assigned).uniq
66
+ (attribute_names_to_assign - @attribute_names_assigned - methods_invoked_on_evaluator).uniq
47
67
  end
48
68
 
49
69
  def attributes_to_set_on_hash
@@ -3,14 +3,18 @@ module FactoryGirl
3
3
  class Configuration
4
4
  attr_reader :factories, :sequences, :traits, :strategies, :callback_names
5
5
 
6
+ attr_accessor :duplicate_attribute_assignment_from_initialize_with
7
+
6
8
  def initialize
7
- @factories = DisallowsDuplicatesRegistry.new(Registry.new('Factory'))
8
- @sequences = DisallowsDuplicatesRegistry.new(Registry.new('Sequence'))
9
- @traits = DisallowsDuplicatesRegistry.new(Registry.new('Trait'))
9
+ @factories = Decorator::DisallowsDuplicatesRegistry.new(Registry.new('Factory'))
10
+ @sequences = Decorator::DisallowsDuplicatesRegistry.new(Registry.new('Sequence'))
11
+ @traits = Decorator::DisallowsDuplicatesRegistry.new(Registry.new('Trait'))
10
12
  @strategies = Registry.new('Strategy')
11
13
  @callback_names = Set.new
12
14
  @definition = Definition.new
13
15
 
16
+ @duplicate_attribute_assignment_from_initialize_with = true
17
+
14
18
  to_create {|instance| instance.save! }
15
19
  initialize_with { new }
16
20
  end
@@ -0,0 +1,21 @@
1
+ module FactoryGirl
2
+ class Decorator < BasicObject
3
+ undef_method :==
4
+
5
+ def initialize(component)
6
+ @component = component
7
+ end
8
+
9
+ def method_missing(name, *args, &block)
10
+ @component.send(name, *args, &block)
11
+ end
12
+
13
+ def send(symbol, *args)
14
+ __send__(symbol, *args)
15
+ end
16
+
17
+ def self.const_missing(name)
18
+ ::Object.const_get(name)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module FactoryGirl
2
+ class Decorator
3
+ class AttributeHash < Decorator
4
+ def initialize(component, attributes = [])
5
+ super(component)
6
+ @attributes = attributes
7
+ end
8
+
9
+ def attributes
10
+ @attributes.inject({}) do |result, attribute_name|
11
+ result[attribute_name] = send(attribute_name)
12
+ result
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ module FactoryGirl
2
+ class Decorator
3
+ class ClassKeyHash < Decorator
4
+ def [](key)
5
+ @component[symbolized_key key]
6
+ end
7
+
8
+ def []=(key, value)
9
+ @component[symbolized_key key] = value
10
+ end
11
+
12
+ def key?(key)
13
+ @component.key? symbolized_key(key)
14
+ end
15
+
16
+ private
17
+
18
+ def symbolized_key(key)
19
+ if key.respond_to?(:to_sym)
20
+ key.to_sym
21
+ else
22
+ key.to_s.underscore.to_sym
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ module FactoryGirl
2
+ class Decorator
3
+ class DisallowsDuplicatesRegistry < Decorator
4
+ def register(name, item)
5
+ if registered?(name)
6
+ raise DuplicateDefinitionError, "#{@component.name} already registered: #{name}"
7
+ else
8
+ @component.register(name, item)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module FactoryGirl
2
+ class Decorator
3
+ class InvocationIgnorer < Decorator
4
+ def __invoked_methods__
5
+ []
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module FactoryGirl
2
+ class Decorator
3
+ class InvocationTracker < Decorator
4
+ def initialize(component)
5
+ super
6
+ @invoked_methods = []
7
+ end
8
+
9
+ def method_missing(name, *args, &block)
10
+ @invoked_methods << name
11
+ super
12
+ end
13
+
14
+ def __invoked_methods__
15
+ @invoked_methods.uniq
16
+ end
17
+ end
18
+ end
19
+ end
@@ -35,14 +35,10 @@ module FactoryGirl
35
35
  end
36
36
 
37
37
  def method_missing(method_name, *args, &block)
38
- if @cached_attributes.key?(method_name)
39
- @cached_attributes[method_name]
38
+ if @instance.respond_to?(method_name)
39
+ @instance.send(method_name, *args, &block)
40
40
  else
41
- if @instance.respond_to?(method_name)
42
- @instance.send(method_name, *args, &block)
43
- else
44
- SyntaxRunner.new.send(method_name, *args, &block)
45
- end
41
+ SyntaxRunner.new.send(method_name, *args, &block)
46
42
  end
47
43
  end
48
44
 
@@ -6,7 +6,7 @@ module FactoryGirl
6
6
 
7
7
  def initialize(name)
8
8
  @name = name
9
- @items = {}
9
+ @items = Decorator::ClassKeyHash.new({})
10
10
  end
11
11
 
12
12
  def clear
@@ -19,7 +19,7 @@ module FactoryGirl
19
19
 
20
20
  def find(name)
21
21
  if registered?(name)
22
- @items[name.to_sym]
22
+ @items[name]
23
23
  else
24
24
  raise ArgumentError, "#{@name} not registered: #{name}"
25
25
  end
@@ -28,11 +28,11 @@ module FactoryGirl
28
28
  alias :[] :find
29
29
 
30
30
  def register(name, item)
31
- @items[name.to_sym] = item
31
+ @items[name] = item
32
32
  end
33
33
 
34
34
  def registered?(name)
35
- @items.key?(name.to_sym)
35
+ @items.key?(name)
36
36
  end
37
37
  end
38
38
  end
@@ -13,16 +13,36 @@ module FactoryGirl
13
13
  options = args.extract_options!
14
14
  @value = args.first || 1
15
15
  @aliases = options.fetch(:aliases) { [] }
16
+
17
+ if !@value.respond_to?(:peek)
18
+ @value = EnumeratorAdapter.new(@value)
19
+ end
16
20
  end
17
21
 
18
22
  def next
19
- @proc ? @proc.call(@value) : @value
23
+ @proc ? @proc.call(@value.peek) : @value.peek
20
24
  ensure
21
- @value = @value.next
25
+ @value.next
22
26
  end
23
27
 
24
28
  def names
25
29
  [@name] + @aliases
26
30
  end
31
+
32
+ private
33
+
34
+ class EnumeratorAdapter
35
+ def initialize(value)
36
+ @value = value
37
+ end
38
+
39
+ def peek
40
+ @value
41
+ end
42
+
43
+ def next
44
+ @value = @value.next
45
+ end
46
+ end
27
47
  end
28
48
  end
@@ -1,3 +1,3 @@
1
1
  module FactoryGirl
2
- VERSION = '3.3.0'
2
+ VERSION = '3.4.0'
3
3
  end
@@ -2,6 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe 'global initialize_with' do
4
4
  before do
5
+ ActiveSupport::Deprecation.silenced = true
6
+
5
7
  define_class('User') do
6
8
  attr_accessor:name
7
9
 
@@ -4,6 +4,8 @@ describe "initialize_with with non-FG attributes" do
4
4
  include FactoryGirl::Syntax::Methods
5
5
 
6
6
  before do
7
+ ActiveSupport::Deprecation.silenced = true
8
+
7
9
  define_model("User", name: :string, age: :integer) do
8
10
  def self.construct(name, age)
9
11
  new(name: name, age: age)
@@ -26,6 +28,8 @@ describe "initialize_with with FG attributes that are ignored" do
26
28
  include FactoryGirl::Syntax::Methods
27
29
 
28
30
  before do
31
+ ActiveSupport::Deprecation.silenced = true
32
+
29
33
  define_model("User", name: :string) do
30
34
  def self.construct(name)
31
35
  new(name: "#{name} from .construct")
@@ -51,6 +55,8 @@ describe "initialize_with with FG attributes that are not ignored" do
51
55
  include FactoryGirl::Syntax::Methods
52
56
 
53
57
  before do
58
+ ActiveSupport::Deprecation.silenced = true
59
+
54
60
  define_model("User", name: :string) do
55
61
  def self.construct(name)
56
62
  new(name: "#{name} from .construct")
@@ -75,6 +81,8 @@ describe "initialize_with non-ORM-backed objects" do
75
81
  include FactoryGirl::Syntax::Methods
76
82
 
77
83
  before do
84
+ ActiveSupport::Deprecation.silenced = true
85
+
78
86
  define_class("ReportGenerator") do
79
87
  attr_reader :name, :data
80
88
 
@@ -108,6 +116,8 @@ end
108
116
 
109
117
  describe "initialize_with parent and child factories" do
110
118
  before do
119
+ ActiveSupport::Deprecation.silenced = true
120
+
111
121
  define_class("Awesome") do
112
122
  attr_reader :name
113
123
 
@@ -148,6 +158,8 @@ end
148
158
 
149
159
  describe "initialize_with implicit constructor" do
150
160
  before do
161
+ ActiveSupport::Deprecation.silenced = true
162
+
151
163
  define_class("Awesome") do
152
164
  attr_reader :name
153
165
 
@@ -171,3 +183,79 @@ describe "initialize_with implicit constructor" do
171
183
  FactoryGirl.build(:awesome, name: "Awesome name").name.should == "Awesome name"
172
184
  end
173
185
  end
186
+
187
+ describe "initialize_with doesn't duplicate assignment on attributes accessed from initialize_with" do
188
+ before do
189
+ ActiveSupport::Deprecation.silenced = true
190
+
191
+ define_class("User") do
192
+ attr_reader :name
193
+ attr_accessor :email
194
+
195
+ def initialize(name)
196
+ @name = name
197
+ end
198
+ end
199
+
200
+ FactoryGirl.define do
201
+ sequence(:email) {|n| "person#{n}@example.com" }
202
+
203
+ factory :user do
204
+ email
205
+
206
+ name { email.gsub(/\@.+/, "") }
207
+
208
+ initialize_with { new(name) }
209
+ end
210
+ end
211
+ end
212
+
213
+ it "instantiates the correct object" do
214
+ FactoryGirl.duplicate_attribute_assignment_from_initialize_with = false
215
+
216
+ built_user = FactoryGirl.build(:user)
217
+ built_user.name.should == "person1"
218
+ built_user.email.should == "person1@example.com"
219
+ end
220
+ end
221
+
222
+ describe "initialize_with has access to all attributes for construction" do
223
+ before do
224
+ ActiveSupport::Deprecation.silenced = true
225
+
226
+ define_class("User") do
227
+ attr_reader :name, :email, :ignored
228
+
229
+ def initialize(attributes = {})
230
+ @name = attributes[:name]
231
+ @email = attributes[:email]
232
+ @ignored = attributes[:ignored]
233
+ end
234
+ end
235
+
236
+ FactoryGirl.define do
237
+ sequence(:email) {|n| "person#{n}@example.com" }
238
+
239
+ factory :user do
240
+ ignore do
241
+ ignored "of course!"
242
+ end
243
+
244
+ email
245
+
246
+ name { email.gsub(/\@.+/, "") }
247
+
248
+ initialize_with { new(attributes) }
249
+ end
250
+ end
251
+ end
252
+
253
+ it "assigns attributes correctly" do
254
+ FactoryGirl.duplicate_attribute_assignment_from_initialize_with = false
255
+
256
+ user_with_attributes = FactoryGirl.build(:user)
257
+ user_with_attributes.email.should == "person1@example.com"
258
+ user_with_attributes.name.should == "person1"
259
+ user_with_attributes.ignored.should be_nil
260
+ end
261
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'finding factories keyed by class instead of symbol' do
4
+ before do
5
+ define_model("User") do
6
+ attr_accessor :name, :email
7
+ end
8
+
9
+ FactoryGirl.define do
10
+ factory :user do
11
+ name 'John Doe'
12
+ sequence(:email) {|n| "person#{n}@example.com" }
13
+ end
14
+ end
15
+ end
16
+
17
+ it 'allows interaction based on class name' do
18
+ user = FactoryGirl.create User, email: 'person@example.com'
19
+ user.email.should == 'person@example.com'
20
+ user.name.should == 'John Doe'
21
+ end
22
+ end
@@ -490,6 +490,8 @@ end
490
490
 
491
491
  describe "traits with initialize_with" do
492
492
  before do
493
+ ActiveSupport::Deprecation.silenced = true
494
+
493
495
  define_class("User") do
494
496
  attr_reader :name
495
497
 
@@ -1,35 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
- describe FactoryGirl::DisallowsDuplicatesRegistry do
4
- let(:registry) { stub("registry", name: "Great thing", register: true, find: true, each: true, clear: true, registered?: true, :[] => true) }
3
+ describe FactoryGirl::Decorator::DisallowsDuplicatesRegistry do
4
+ let(:registry) { stub("registry", name: 'Great thing', register: true) }
5
5
 
6
- subject { FactoryGirl::DisallowsDuplicatesRegistry.new(registry) }
7
-
8
- it "delegates #each to the registry" do
9
- block = -> {}
10
- subject.each(block)
11
- registry.should have_received(:each).with(block)
12
- end
13
-
14
- it "delegates #registered? to the registry" do
15
- subject.registered?(:great_name)
16
- registry.should have_received(:registered?).with(:great_name)
17
- end
18
-
19
- it "delegates #clear to the registry" do
20
- subject.clear
21
- registry.should have_received(:clear)
22
- end
23
-
24
- it "delegates #find to the registry" do
25
- subject.find(:awesome)
26
- registry.should have_received(:find).with(:awesome)
27
- end
28
-
29
- it "delegates #[] to the registry" do
30
- subject[:awesome]
31
- registry.should have_received(:[]).with(:awesome)
32
- end
6
+ subject { described_class.new(registry) }
33
7
 
34
8
  it "delegates #register to the registry when not registered" do
35
9
  registry.stubs(registered?: false)
@@ -38,6 +12,7 @@ describe FactoryGirl::DisallowsDuplicatesRegistry do
38
12
  end
39
13
 
40
14
  it "raises when attempting to #register a previously registered strategy" do
15
+ registry.stubs(registered?: true)
41
16
  expect { subject.register(:same_name, {}) }.
42
17
  to raise_error(FactoryGirl::DuplicateDefinitionError, "Great thing already registered: same_name")
43
18
  end
@@ -57,4 +57,12 @@ describe FactoryGirl::Registry do
57
57
  subject.clear
58
58
  subject.count.should be_zero
59
59
  end
60
+
61
+ it "registers classes" do
62
+ define_class("User")
63
+ subject.register(User, registered_object)
64
+ subject.to_a.should == [registered_object]
65
+ subject.find(:user).should == registered_object
66
+ subject.find(User).should == registered_object
67
+ end
60
68
  end
@@ -65,4 +65,14 @@ describe FactoryGirl::Sequence do
65
65
  its(:next) { should == "B" }
66
66
  end
67
67
  end
68
+
69
+ describe "iterating over items in an enumerator" do
70
+ subject { FactoryGirl::Sequence.new(:name, %w[foo bar].to_enum) {|n| "=#{n}" } }
71
+
72
+ it "navigates to the next items until no items remain" do
73
+ subject.next.should == "=foo"
74
+ subject.next.should == "=bar"
75
+ expect { subject.next }.to raise_error(StopIteration)
76
+ end
77
+ end
68
78
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-13 00:00:00.000000000 Z
13
+ date: 2012-06-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -261,10 +261,15 @@ files:
261
261
  - lib/factory_girl/declaration/implicit.rb
262
262
  - lib/factory_girl/declaration/static.rb
263
263
  - lib/factory_girl/declaration_list.rb
264
+ - lib/factory_girl/decorator.rb
265
+ - lib/factory_girl/decorator/attribute_hash.rb
266
+ - lib/factory_girl/decorator/class_key_hash.rb
267
+ - lib/factory_girl/decorator/disallows_duplicates_registry.rb
268
+ - lib/factory_girl/decorator/invocation_ignorer.rb
269
+ - lib/factory_girl/decorator/invocation_tracker.rb
264
270
  - lib/factory_girl/definition.rb
265
271
  - lib/factory_girl/definition_list.rb
266
272
  - lib/factory_girl/definition_proxy.rb
267
- - lib/factory_girl/disallows_duplicates_registry.rb
268
273
  - lib/factory_girl/errors.rb
269
274
  - lib/factory_girl/evaluation.rb
270
275
  - lib/factory_girl/evaluator.rb
@@ -315,6 +320,7 @@ files:
315
320
  - spec/acceptance/global_initialize_with_spec.rb
316
321
  - spec/acceptance/global_to_create_spec.rb
317
322
  - spec/acceptance/initialize_with_spec.rb
323
+ - spec/acceptance/keyed_by_class_spec.rb
318
324
  - spec/acceptance/modify_factories_spec.rb
319
325
  - spec/acceptance/modify_inherited_spec.rb
320
326
  - spec/acceptance/nested_attributes_spec.rb
@@ -423,6 +429,7 @@ test_files:
423
429
  - spec/acceptance/global_initialize_with_spec.rb
424
430
  - spec/acceptance/global_to_create_spec.rb
425
431
  - spec/acceptance/initialize_with_spec.rb
432
+ - spec/acceptance/keyed_by_class_spec.rb
426
433
  - spec/acceptance/modify_factories_spec.rb
427
434
  - spec/acceptance/modify_inherited_spec.rb
428
435
  - spec/acceptance/nested_attributes_spec.rb
@@ -1,17 +0,0 @@
1
- module FactoryGirl
2
- class DisallowsDuplicatesRegistry
3
- def initialize(component)
4
- @component = component
5
- end
6
-
7
- delegate :clear, :each, :find, :[], :registered?, to: :@component
8
-
9
- def register(name, item)
10
- if registered?(name)
11
- raise DuplicateDefinitionError, "#{@component.name} already registered: #{name}"
12
- else
13
- @component.register(name, item)
14
- end
15
- end
16
- end
17
- end