Permalink
Browse files

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

Update documentation to reflect that transient is now preferred
  • Loading branch information...
1 parent 493c9ad commit 9610b389572913da0b01de519f3437cdeb764a59 @iwz iwz committed Apr 28, 2014
View
@@ -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.