Permalink
Browse files

Deprecate `#ignore` in favor of `#transient`

Update documentation to reflect that transient is now preferred
  • Loading branch information...
iwz committed Apr 28, 2014
1 parent 493c9ad commit 9610b389572913da0b01de519f3437cdeb764a59
@@ -237,7 +237,7 @@ There may be times where your code can be DRYed up by passing in transient attri

```ruby
factory :user do
ignore do
transient do
rockstar true
upcased false
end
@@ -254,14 +254,14 @@ create(:user, upcased: true).name
#=> "JOHN DOE - ROCKSTAR"
```

Static and dynamic attributes can be ignored. Ignored attributes will be ignored
within attributes\_for and won't be set on the model, even if the attribute
exists or you attempt to override it.
Static and dynamic attributes can be created as transient attributes. Transient
attributes will be ignored within attributes\_for and won't be set on the model,
even if the attribute exists or you attempt to override it.

Within factory_girl's dynamic attributes, you can access ignored attributes as
Within factory_girl's dynamic attributes, you can access transient attributes as
you would expect. If you need to access the evaluator in a factory_girl callback,
you'll need to declare a second block argument (for the evaluator) and access
ignored attributes from there.
transient attributes from there.

Associations
------------
@@ -340,14 +340,14 @@ FactoryGirl.define do
# user_with_posts will create post data after the user has been created
factory :user_with_posts do
# posts_count is declared as an ignored attribute and available in
# posts_count is declared as a transient attribute and available in
# attributes on the factory, as well as the callback via the evaluator
ignore do
transient do
posts_count 5
end
# the after(:create) yields two values; the user instance itself and the
# evaluator, which stores all values from the factory, including ignored
# evaluator, which stores all values from the factory, including transient
# attributes; `create_list`'s second argument is the number of records
# to create and we make sure the user is associated properly to the post
after(:create) do |user, evaluator|
@@ -914,7 +914,7 @@ by calling `attributes`:

```ruby
factory :user do
ignore do
transient do
comments_count 5
end
@@ -925,7 +925,7 @@ end
```

This will build a hash of all attributes to be passed to `new`. It won't
include ignored attributes, but everything else defined in the factory will be
include transient attributes, but everything else defined in the factory will be
passed (associations, evalued sequences, etc.)

You can define `initialize_with` for all factories by including it in the
@@ -52,6 +52,12 @@ def add_attribute(name, value = nil, &block)
end

def ignore(&block)
ActiveSupport::Deprecation.warn "`#ignore` is deprecated and will be "\
"removed in 5.0. Please use `#transient` instead."
transient &block
end

def transient(&block)
proxy = DefinitionProxy.new(@definition, true)
proxy.instance_eval(&block)
end
@@ -55,7 +55,7 @@
end
end

describe "multiple creates and ignored attributes to dynamically build attribute lists" do
describe "multiple creates and transient attributes to dynamically build attribute lists" do
before do
define_model('User', name: :string) do
has_many :posts
@@ -75,7 +75,7 @@
name "John Doe"

factory :user_with_posts do
ignore do
transient do
posts_count 5
end

@@ -22,7 +22,7 @@ def self.construct(name, age)
its(:age) { should eq 21 }
end

describe "initialize_with with FG attributes that are ignored" do
describe "initialize_with with FG attributes that are transient" do
include FactoryGirl::Syntax::Methods

before do
@@ -34,7 +34,7 @@ def self.construct(name)

FactoryGirl.define do
factory :user do
ignore do
transient do
name { "Handsome Chap" }
end

@@ -64,7 +64,7 @@ def initialize(name, data)
sequence(:random_data) { 5.times.map { Kernel.rand(200) } }

factory :report_generator do
ignore do
transient do
name "My Awesome Report"
end

@@ -94,14 +94,14 @@ def initialize(name)

FactoryGirl.define do
factory :awesome do
ignore do
transient do
name "Great"
end

initialize_with { Awesome.new(name) }

factory :sub_awesome do
ignore do
transient do
name "Sub"
end
end
@@ -134,7 +134,7 @@ def initialize(name)

FactoryGirl.define do
factory :awesome do
ignore do
transient do
name "Great"
end

@@ -195,7 +195,7 @@ def initialize(attributes = {})
sequence(:email) { |n| "person#{n}@example.com" }

factory :user do
ignore do
transient do
ignored "of course!"
end

@@ -8,7 +8,7 @@
sequence(:name) { |n| "John #{n}" }

factory :user do
ignore do
transient do
four { 2 + 2 }
rockstar true
upcased false
@@ -67,6 +67,33 @@
expect(rockstar.name).to eq "John 1 - Rockstar"
end
end

context "using aliased 'ignore' method name" do
around do |example|
cached_silenced = ActiveSupport::Deprecation.silenced
ActiveSupport::Deprecation.silenced = true
example.run
ActiveSupport::Deprecation.silenced = cached_silenced
end

before do
FactoryGirl.define do
factory :user_using_ignore, class: User do
ignore do
honorific "Esteemed"
end

name { "#{honorific} Jane Doe" }
end
end
end

let(:esteemed) { FactoryGirl.create(:user_using_ignore) }

it "uses the default value of the attribute" do
expect(esteemed.name).to eq "Esteemed Jane Doe"
end
end
end

describe "transient sequences" do
@@ -75,7 +102,7 @@

FactoryGirl.define do
factory :user do
ignore do
transient do
sequence(:counter)
end

@@ -106,7 +133,7 @@ def initialize(id, name)

FactoryGirl.define do
factory :user do
ignore do
transient do
foo { Foo.new('id-of-foo', 'name-of-foo')}
end

@@ -44,12 +44,12 @@
end
end

describe FactoryGirl::DefinitionProxy, "#ignore" do
describe FactoryGirl::DefinitionProxy, "#transient" do
subject { FactoryGirl::Definition.new }
let(:proxy) { FactoryGirl::DefinitionProxy.new(subject) }

it "makes all attributes added ignored" do
proxy.ignore do
proxy.transient do
add_attribute(:attribute_name, "attribute value")
end

0 comments on commit 9610b38

Please sign in to comment.