Fix memory leak: do not add trait duplications to @defined_traits

Closes #588
This commit is contained in:
Potapov Sergey 2013-12-11 15:53:05 +02:00 committed by Joshua Clayton
parent ed2309abfe
commit 664c426bd0
3 changed files with 12 additions and 4 deletions

View File

@ -6,7 +6,7 @@ module FactoryGirl
def initialize(name = nil, base_traits = [])
@declarations = DeclarationList.new(name)
@callbacks = []
@defined_traits = []
@defined_traits = Set.new
@to_create = nil
@base_traits = base_traits
@additional_traits = []
@ -77,7 +77,7 @@ module FactoryGirl
end
def define_trait(trait)
@defined_traits << trait
@defined_traits.add(trait)
end
def define_constructor(&block)

View File

@ -32,7 +32,13 @@ describe FactoryGirl::Definition, "defining traits" do
it "maintains a list of traits" do
subject.define_trait(trait_1)
subject.define_trait(trait_2)
expect(subject.defined_traits).to eq [trait_1, trait_2]
expect(subject.defined_traits).to include(trait_1, trait_2)
end
it "adds only unique traits" do
subject.define_trait(trait_1)
subject.define_trait(trait_1)
expect(subject.defined_traits.size).to eq 1
end
end

View File

@ -1,6 +1,8 @@
RSpec::Matchers.define :have_trait do |trait_name|
match do |instance|
instance.defined_traits.include?(FactoryGirl::Trait.new(trait_name, &@block))
instance.defined_traits.any? do |trait|
trait.name == trait_name && trait.send(:block) == @block
end
end
chain :with_block do |block|