factory_bot 4.11.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +6 -0
- data/GETTING_STARTED.md +121 -37
- data/LICENSE +1 -1
- data/NEWS.md +351 -0
- data/README.md +21 -25
- data/lib/factory_bot/aliases.rb +1 -1
- data/lib/factory_bot/attribute/dynamic.rb +1 -0
- data/lib/factory_bot/attribute.rb +4 -39
- data/lib/factory_bot/attribute_assigner.rb +21 -6
- data/lib/factory_bot/attribute_list.rb +2 -1
- data/lib/factory_bot/callback.rb +3 -2
- data/lib/factory_bot/configuration.rb +16 -20
- data/lib/factory_bot/declaration/association.rb +14 -1
- data/lib/factory_bot/declaration/dynamic.rb +3 -1
- data/lib/factory_bot/declaration/implicit.rb +7 -2
- data/lib/factory_bot/declaration.rb +4 -4
- data/lib/factory_bot/declaration_list.rb +1 -1
- data/lib/factory_bot/decorator/attribute_hash.rb +1 -1
- data/lib/factory_bot/decorator/invocation_tracker.rb +1 -1
- data/lib/factory_bot/decorator.rb +5 -1
- data/lib/factory_bot/definition.rb +10 -7
- data/lib/factory_bot/definition_hierarchy.rb +1 -11
- data/lib/factory_bot/definition_proxy.rb +59 -62
- data/lib/factory_bot/errors.rb +7 -4
- data/lib/factory_bot/evaluation.rb +1 -1
- data/lib/factory_bot/evaluator.rb +5 -5
- data/lib/factory_bot/factory.rb +8 -8
- data/lib/factory_bot/factory_runner.rb +3 -3
- data/lib/factory_bot/find_definitions.rb +1 -1
- data/lib/factory_bot/internal.rb +104 -0
- data/lib/factory_bot/linter.rb +36 -19
- data/lib/factory_bot/null_factory.rb +4 -1
- data/lib/factory_bot/null_object.rb +2 -2
- data/lib/factory_bot/registry.rb +15 -6
- data/lib/factory_bot/reload.rb +3 -3
- data/lib/factory_bot/sequence.rb +0 -1
- data/lib/factory_bot/strategy/null.rb +2 -4
- data/lib/factory_bot/strategy/stub.rb +32 -31
- data/lib/factory_bot/strategy_calculator.rb +1 -1
- data/lib/factory_bot/strategy_syntax_method_registrar.rb +13 -2
- data/lib/factory_bot/syntax/default.rb +12 -24
- data/lib/factory_bot/syntax/methods.rb +32 -9
- data/lib/factory_bot/syntax.rb +2 -2
- data/lib/factory_bot/trait.rb +6 -3
- data/lib/factory_bot/version.rb +1 -1
- data/lib/factory_bot.rb +103 -138
- metadata +73 -32
- data/NEWS +0 -303
- data/lib/factory_bot/attribute/static.rb +0 -16
- data/lib/factory_bot/declaration/static.rb +0 -26
- data/lib/factory_bot/decorator/class_key_hash.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 802da48aa95dce3321f20d0173c5dcf041c5393fb0c270fb8ae2029ce12b6ed9
|
4
|
+
data.tar.gz: 0aa227896ef66ccf100f88b1aa4e9aa26c5bc657fee76739a73e15072bc80572
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63554d6765398f0c524cb8cd45b1a0da83da1d8aba9f359d0e4c44e42cdbd0d93edb8e38c668e0310ad709905c5cd6a3c35e640ad8c45a06a8b7d4090b4e6161
|
7
|
+
data.tar.gz: fe3be69bdd601384da0a7f2ec7e1fcf00ae7d4984c65423e31e94c1b7f3d7bb04345371daaea19d794365972b59f69f9f3403b0ef8b8ef7d7349d89404284ac2
|
data/.yardopts
ADDED
data/GETTING_STARTED.md
CHANGED
@@ -4,16 +4,16 @@ Getting Started
|
|
4
4
|
Update Your Gemfile
|
5
5
|
-------------------
|
6
6
|
|
7
|
-
If you're using Rails
|
7
|
+
If you're using Rails:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem "factory_bot_rails"
|
10
|
+
gem "factory_bot_rails"
|
11
11
|
```
|
12
12
|
|
13
|
-
If you're *not* using Rails
|
13
|
+
If you're *not* using Rails:
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
gem "factory_bot"
|
16
|
+
gem "factory_bot"
|
17
17
|
```
|
18
18
|
|
19
19
|
JRuby users: factory_bot works with JRuby starting with 1.6.7.2 (latest stable, as per July 2012).
|
@@ -30,7 +30,7 @@ Configure your test suite
|
|
30
30
|
|
31
31
|
### RSpec
|
32
32
|
|
33
|
-
If you're using Rails
|
33
|
+
If you're using Rails, add the following configuration to `spec/support/factory_bot.rb` and be sure to require that file in `rails_helper.rb`:
|
34
34
|
|
35
35
|
```ruby
|
36
36
|
RSpec.configure do |config|
|
@@ -102,7 +102,7 @@ If you do not include `FactoryBot::Syntax::Methods` in your test suite, then all
|
|
102
102
|
Defining factories
|
103
103
|
------------------
|
104
104
|
|
105
|
-
Each factory has a name and a set of attributes. The name is used to guess the class of the object by default
|
105
|
+
Each factory has a name and a set of attributes. The name is used to guess the class of the object by default:
|
106
106
|
|
107
107
|
```ruby
|
108
108
|
# This will guess the User class
|
@@ -112,16 +112,26 @@ FactoryBot.define do
|
|
112
112
|
last_name { "Doe" }
|
113
113
|
admin { false }
|
114
114
|
end
|
115
|
-
|
116
|
-
# This will use the User class (Admin would have been guessed)
|
117
|
-
factory :admin, class: User do
|
118
|
-
first_name { "Admin" }
|
119
|
-
last_name { "User" }
|
120
|
-
admin { true }
|
121
|
-
end
|
122
115
|
end
|
123
116
|
```
|
124
117
|
|
118
|
+
It is also possible to explicitly specify the class:
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
# This will use the User class (otherwise Admin would have been guessed)
|
122
|
+
factory :admin, class: User
|
123
|
+
```
|
124
|
+
|
125
|
+
If the constant is not available
|
126
|
+
(if you are using a Rails engine that waits to load models, for example),
|
127
|
+
you can also pass a symbol or string,
|
128
|
+
which factory_bot will constantize later, once you start building objects:
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
# It's OK if Doorkeeper::AccessToken isn't loaded yet
|
132
|
+
factory :access_token, class: "Doorkeeper::AccessToken"
|
133
|
+
```
|
134
|
+
|
125
135
|
Because of the block syntax in Ruby, defining attributes as `Hash`es (for
|
126
136
|
serialized/JSON columns, for example) requires two sets of curly brackets:
|
127
137
|
|
@@ -177,21 +187,15 @@ user.first_name
|
|
177
187
|
# => "Joe"
|
178
188
|
```
|
179
189
|
|
190
|
+
Note that objects created with `build_stubbed` cannot be serialized with
|
191
|
+
`Marshal.dump`, since factory_bot defines singleton methods on these objects.
|
192
|
+
|
180
193
|
Static Attributes
|
181
194
|
------------------
|
182
195
|
|
183
|
-
Static attributes
|
184
|
-
|
185
|
-
|
186
|
-
```ruby
|
187
|
-
factory :user do
|
188
|
-
# Do not use deprecated static attributes
|
189
|
-
admin true
|
190
|
-
|
191
|
-
# Use dynamic attribues instead
|
192
|
-
admin { true }
|
193
|
-
end
|
194
|
-
```
|
196
|
+
Static attributes (without a block) are no longer available in factory\_bot 5.
|
197
|
+
You can read more about the decision to remove them in
|
198
|
+
[this blog post](https://robots.thoughtbot.com/deprecating-static-attributes-in-factory_bot-4-11).
|
195
199
|
|
196
200
|
Aliases
|
197
201
|
-------
|
@@ -261,8 +265,8 @@ create(:user, upcased: true).name
|
|
261
265
|
#=> "JOHN DOE - ROCKSTAR"
|
262
266
|
```
|
263
267
|
|
264
|
-
|
265
|
-
|
268
|
+
Transient attributes will be ignored within attributes\_for and won't be
|
269
|
+
set on the model,
|
266
270
|
even if the attribute exists or you attempt to override it.
|
267
271
|
|
268
272
|
Within factory_bot's dynamic attributes, you can access transient attributes as
|
@@ -273,7 +277,7 @@ transient attributes from there.
|
|
273
277
|
Method Name / Reserved Word Attributes
|
274
278
|
-------------------------------
|
275
279
|
|
276
|
-
If your attributes conflict with existing methods or reserved words you can define them with `add_attribute`.
|
280
|
+
If your attributes conflict with existing methods or reserved words (all methods in the [DefinitionProxy](https://github.com/thoughtbot/factory_bot/blob/master/lib/factory_bot/definition_proxy.rb) class) you can define them with `add_attribute`.
|
277
281
|
|
278
282
|
```ruby
|
279
283
|
factory :dna do
|
@@ -343,9 +347,35 @@ factory :post do
|
|
343
347
|
end
|
344
348
|
```
|
345
349
|
|
346
|
-
|
350
|
+
In factory\_bot 5, associations default to using the same build strategy as
|
351
|
+
their parent object:
|
347
352
|
|
348
353
|
```ruby
|
354
|
+
FactoryBot.define do
|
355
|
+
factory :author
|
356
|
+
|
357
|
+
factory :post do
|
358
|
+
author
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
post = build(:post)
|
363
|
+
post.new_record? # => true
|
364
|
+
post.author.new_record? # => true
|
365
|
+
|
366
|
+
post = create(:post)
|
367
|
+
post.new_record? # => false
|
368
|
+
post.author.new_record? # => false
|
369
|
+
```
|
370
|
+
|
371
|
+
This is different than the default behavior for previous versions of
|
372
|
+
factory\_bot, where the association strategy would not always match the strategy
|
373
|
+
of the parent object. If you want to continue using the old behavior, you can
|
374
|
+
set the `use_parent_strategy` configuration option to `false`.
|
375
|
+
|
376
|
+
```ruby
|
377
|
+
FactoryBot.use_parent_strategy = false
|
378
|
+
|
349
379
|
# Builds and saves a User and a Post
|
350
380
|
post = create(:post)
|
351
381
|
post.new_record? # => false
|
@@ -357,9 +387,11 @@ post.new_record? # => true
|
|
357
387
|
post.author.new_record? # => false
|
358
388
|
```
|
359
389
|
|
360
|
-
To not save the associated object, specify strategy: :build in the factory:
|
390
|
+
To not save the associated object, specify `strategy: :build` in the factory:
|
361
391
|
|
362
392
|
```ruby
|
393
|
+
FactoryBot.use_parent_strategy = false
|
394
|
+
|
363
395
|
factory :post do
|
364
396
|
# ...
|
365
397
|
association :author, factory: :user, strategy: :build
|
@@ -476,6 +508,36 @@ create(:profile_with_languages).languages.length # 5
|
|
476
508
|
create(:profile_with_languages, languages_count: 15).languages.length # 15
|
477
509
|
```
|
478
510
|
|
511
|
+
Polymorphic associations can be handled with traits:
|
512
|
+
|
513
|
+
```ruby
|
514
|
+
FactoryBot.define do
|
515
|
+
factory :video
|
516
|
+
factory :photo
|
517
|
+
|
518
|
+
factory :comment do
|
519
|
+
for_photo # default to the :for_photo trait if none is specified
|
520
|
+
|
521
|
+
trait :for_video do
|
522
|
+
association :commentable, factory: :video
|
523
|
+
end
|
524
|
+
|
525
|
+
trait :for_photo do
|
526
|
+
association :commentable, factory: :photo
|
527
|
+
end
|
528
|
+
end
|
529
|
+
end
|
530
|
+
```
|
531
|
+
|
532
|
+
This allows us to do:
|
533
|
+
|
534
|
+
```ruby
|
535
|
+
create(:comment)
|
536
|
+
create(:comment, :for_video)
|
537
|
+
create(:comment, :for_photo)
|
538
|
+
```
|
539
|
+
|
540
|
+
|
479
541
|
Sequences
|
480
542
|
---------
|
481
543
|
|
@@ -515,6 +577,9 @@ factory :user do
|
|
515
577
|
end
|
516
578
|
```
|
517
579
|
|
580
|
+
Note that defining sequences as implicit attributes will not work if you have a
|
581
|
+
factory with the same name as the sequence.
|
582
|
+
|
518
583
|
And it's also possible to define an in-line sequence that is only used in
|
519
584
|
a particular factory:
|
520
585
|
|
@@ -623,7 +688,7 @@ factory :story do
|
|
623
688
|
end
|
624
689
|
```
|
625
690
|
|
626
|
-
Traits can be used as attributes:
|
691
|
+
Traits can be used as implicit attributes:
|
627
692
|
|
628
693
|
```ruby
|
629
694
|
factory :week_long_published_story_with_title, parent: :story do
|
@@ -633,6 +698,9 @@ factory :week_long_published_story_with_title, parent: :story do
|
|
633
698
|
end
|
634
699
|
```
|
635
700
|
|
701
|
+
Note that defining traits as implicit attributes will not work if you have a
|
702
|
+
factory or sequence with the same name as the trait.
|
703
|
+
|
636
704
|
Traits that define the same attributes won't raise AttributeDefinitionErrors;
|
637
705
|
the trait that defines the attribute latest gets precedence.
|
638
706
|
|
@@ -893,7 +961,7 @@ If a gem were to give you a User factory:
|
|
893
961
|
```ruby
|
894
962
|
FactoryBot.define do
|
895
963
|
factory :user do
|
896
|
-
full_name "John Doe"
|
964
|
+
full_name { "John Doe" }
|
897
965
|
sequence(:username) { |n| "user#{n}" }
|
898
966
|
password { "password" }
|
899
967
|
end
|
@@ -950,6 +1018,14 @@ To set the attributes for each of the factories, you can pass in a hash as you n
|
|
950
1018
|
twenty_year_olds = build_list(:user, 25, date_of_birth: 20.years.ago)
|
951
1019
|
```
|
952
1020
|
|
1021
|
+
In order to set different attributes for each factory, these methods may be passed a block, with the factory and the index as parameters:
|
1022
|
+
|
1023
|
+
```ruby
|
1024
|
+
twenty_somethings = build_list(:user, 10) do |user, i|
|
1025
|
+
user.date_of_birth = (20 + i).years.ago
|
1026
|
+
end
|
1027
|
+
```
|
1028
|
+
|
953
1029
|
`build_stubbed_list` will give you fully stubbed out instances:
|
954
1030
|
|
955
1031
|
```ruby
|
@@ -999,8 +1075,10 @@ namespace :factory_bot do
|
|
999
1075
|
desc "Verify that all FactoryBot factories are valid"
|
1000
1076
|
task lint: :environment do
|
1001
1077
|
if Rails.env.test?
|
1002
|
-
|
1078
|
+
conn = ActiveRecord::Base.connection
|
1079
|
+
conn.transaction do
|
1003
1080
|
FactoryBot.lint
|
1081
|
+
raise ActiveRecord::Rollback
|
1004
1082
|
end
|
1005
1083
|
else
|
1006
1084
|
system("bundle exec rake factory_bot:lint RAILS_ENV='test'")
|
@@ -1012,8 +1090,7 @@ end
|
|
1012
1090
|
|
1013
1091
|
After calling `FactoryBot.lint`, you'll likely want to clear out the
|
1014
1092
|
database, as records will most likely be created. The provided example above
|
1015
|
-
uses
|
1016
|
-
gem to your Gemfile under the appropriate groups.
|
1093
|
+
uses an sql transaction and rollback to leave the database clean.
|
1017
1094
|
|
1018
1095
|
You can lint factories selectively by passing only factories you want linted:
|
1019
1096
|
|
@@ -1047,6 +1124,13 @@ You can also specify the strategy used for linting:
|
|
1047
1124
|
FactoryBot.lint strategy: :build
|
1048
1125
|
```
|
1049
1126
|
|
1127
|
+
Verbose linting will include full backtraces for each error, which can be
|
1128
|
+
helpful for debugging:
|
1129
|
+
|
1130
|
+
```ruby
|
1131
|
+
FactoryBot.lint verbose: true
|
1132
|
+
```
|
1133
|
+
|
1050
1134
|
Custom Construction
|
1051
1135
|
-------------------
|
1052
1136
|
|
@@ -1337,12 +1421,12 @@ with associations, as below:
|
|
1337
1421
|
|
1338
1422
|
```ruby
|
1339
1423
|
FactoryBot.define do
|
1340
|
-
factory :united_states, class: Location do
|
1424
|
+
factory :united_states, class: "Location" do
|
1341
1425
|
name { 'United States' }
|
1342
1426
|
association :location_group, factory: :north_america
|
1343
1427
|
end
|
1344
1428
|
|
1345
|
-
factory :north_america, class: LocationGroup do
|
1429
|
+
factory :north_america, class: "LocationGroup" do
|
1346
1430
|
name { 'North America' }
|
1347
1431
|
end
|
1348
1432
|
end
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2008-
|
1
|
+
Copyright (c) 2008-2019 Joe Ferris and thoughtbot, inc.
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
4
|
of this software and associated documentation files (the "Software"), to deal
|
data/NEWS.md
ADDED
@@ -0,0 +1,351 @@
|
|
1
|
+
# News
|
2
|
+
|
3
|
+
## 5.2.0 (April 24, 2020)
|
4
|
+
* Added: Pass index to block for `*_list` methods
|
5
|
+
* Deprecated: top-level methods meant only for internal use: `callbacks`, `configuration`, `constructor`, `initialize_with`, `register_sequence`, `resent_configuration`, `skip_create`, `to_create`
|
6
|
+
|
7
|
+
## 5.1.2 (March 25, 2020)
|
8
|
+
* Fixed: Ruby 2.7 keyword deprecation warning in FactoryBot.lint
|
9
|
+
|
10
|
+
## 5.1.1 (October 2, 2019)
|
11
|
+
* Improved: performance of traits
|
12
|
+
* Fixed: registering strategies on JRuby
|
13
|
+
|
14
|
+
## 5.1.0 (September 21, 2019)
|
15
|
+
* Added: "Did you mean?" style error message to help with typos in association declarations
|
16
|
+
* Changed: `NoMethodError` for static attributes now offers a "Did you mean?" style message
|
17
|
+
* Fixed: avoid undefining inherited evaluator methods
|
18
|
+
* Fixed: avoid stubbing id for records without a primary key
|
19
|
+
* Fixed: raise a helpful error for self-referencing traits to avoid a `SystemStackError`
|
20
|
+
* Deprecated: top-level methods meant only for internal use: `allow_class_lookup`, `allow_class_lookup`=, `register_trait`, `trait_by_name`, `traits`, `sequence_by_name`, `sequences`, `factory_by_name`, `register_factory`, `callback_names`, `register_callback`, `register_default_callbacks`, `register_default_strategies`, `strategies`
|
21
|
+
|
22
|
+
## 5.0.2 (February 22, 2019)
|
23
|
+
* Bugfix: raise "Trait not registered" error when passing invalid trait arguments
|
24
|
+
|
25
|
+
## 5.0.1 (February 15, 2019)
|
26
|
+
* Bugfix: Do not raise error when two sequences have the same name
|
27
|
+
in two traits that have the same name
|
28
|
+
|
29
|
+
## 5.0.0 (February 1, 2019)
|
30
|
+
* Added: Verbose option to include full backtraces in the linting output
|
31
|
+
* Changed: use_parent_strategy now defaults to true, so by default the
|
32
|
+
build strategy will build, rather than create associations
|
33
|
+
* Changed: Passing a block when defining associations now raises an error
|
34
|
+
* Bugfix: use_parent_strategy is no longer reset by FactoryBot.reload
|
35
|
+
* Bugfix: rewind_sequences will now rewind local sequences along with the global ones
|
36
|
+
* Bugfix: the build_stubbed strategy now sets timestamps without changing the
|
37
|
+
the original behavior of the timestamp methods
|
38
|
+
* Bugfix: avoid a stack error when referring to an "attributes" attribute in initialize_with
|
39
|
+
* Removed: support for EOL versions of Ruby and Rails
|
40
|
+
* Removed: static attributes (use dynamic attributes with a block instead)
|
41
|
+
* Removed: looking up factories by class
|
42
|
+
* Removed: ignore method (use transient instead)
|
43
|
+
* Removed: duplicate_attribute_assignment_from_initialize_with configuration option
|
44
|
+
* Deprecated: allow_class_lookup configuration option
|
45
|
+
|
46
|
+
## 4.11.1 (September 7, 2018)
|
47
|
+
* Documentation: Include .yardopts in the gem to fix broken RubyDoc links
|
48
|
+
|
49
|
+
## 4.11.0 (August, 15, 2018)
|
50
|
+
* Bugfix: Do not raise error for valid build_stubbed methods: decrement, increment, and toggle
|
51
|
+
* Bugfix: Do not add timestamps with build_stubbed for objects that shouldn't have timestamps
|
52
|
+
* Deprecate static attributes
|
53
|
+
|
54
|
+
## 4.10.0 (May 25, 2018)
|
55
|
+
* Allow sequences to be rewound
|
56
|
+
|
57
|
+
## 4.9.0 (skipped - FactoryGirl only release)
|
58
|
+
|
59
|
+
## 4.8.2 (October 20, 2017)
|
60
|
+
* Rename factory_girl to factory_bot
|
61
|
+
|
62
|
+
## 4.8.1 (September 28, 2017)
|
63
|
+
* Explicitly define `#destroyed?` within the `Stub` strategy to return `nil` instead of raising
|
64
|
+
* Update various dependencies
|
65
|
+
* Update internal test suite to use RSpec's mocking/stubbing instead of mocha
|
66
|
+
|
67
|
+
## 4.8.0 (December 16, 2016)
|
68
|
+
* Improve documentation
|
69
|
+
* Add `FactoryGirl.generate_list` to be consistent with `build_list`/`create_list` and friends
|
70
|
+
* Add `FactoryGirl.use_parent_strategy` configuration to allow associations to leverage parent build strategy
|
71
|
+
|
72
|
+
## 4.7.0 (April 1, 2016)
|
73
|
+
* Improve documentation
|
74
|
+
* Improve instrumentation payload to include traits, overrides, and the factory itself
|
75
|
+
* Allow linting of traits
|
76
|
+
* Deprecate factory lookup by class name in preparation for 5.0
|
77
|
+
* Improve internal performance by using flat_map instead of map and compact
|
78
|
+
* Improve handling of dirty attributes after building a stubbed object
|
79
|
+
* Reduce warnings from redefining methods
|
80
|
+
|
81
|
+
## 4.6.0 (skipped)
|
82
|
+
|
83
|
+
## 4.5.0 (October 17, 2014)
|
84
|
+
* Improve FactoryGirl.lint by including exception and message in output
|
85
|
+
* Allow selective linting
|
86
|
+
* Use more explicit #public_send when doing attribute assignment
|
87
|
+
* Improve documentation around FactoryGirl.lint and initialize_with
|
88
|
+
* Deprecate #ignore in favor of #transient
|
89
|
+
|
90
|
+
## 4.4.0 (February 10, 2014)
|
91
|
+
* Add FactoryGirl.lint
|
92
|
+
* Fix memory leak in duplicate traits
|
93
|
+
* Update documentation
|
94
|
+
|
95
|
+
## 4.3.0 (November 3, 2013)
|
96
|
+
* Start testing against Rails 4.0 and Ruby 2.0.0
|
97
|
+
* Stop testing against Rails 3.0 and Ruby 1.9.2
|
98
|
+
* Add `*_pair` methods to only build two objects
|
99
|
+
* Raise if a method is defined with a FactoryGirl block (factory or trait)
|
100
|
+
* Allow use of Symbol#to_proc in callbacks
|
101
|
+
* Add global callbacks
|
102
|
+
* Improve GETTING_STARTED and README
|
103
|
+
|
104
|
+
## 4.2.0 (January 18, 2013)
|
105
|
+
* Improve documentation
|
106
|
+
* Allow `*_list` syntax methods to accept a block
|
107
|
+
* Update gem dependencies
|
108
|
+
* Allow setting id for objects created with `build_stubbed`
|
109
|
+
* Fix Stub strategy to mimic ActiveRecord regarding `created_at`
|
110
|
+
* Evaluate sequences within the context of an Evaluator
|
111
|
+
* Fix Mocha deprecation warning
|
112
|
+
* Fix some warnings when running RUBYOPT=-w rake
|
113
|
+
* Convert test suite to RSpec's "expect" syntax
|
114
|
+
|
115
|
+
## 4.1.0 (September 11, 2012)
|
116
|
+
* Allow multiple callbacks to bind to the same block
|
117
|
+
* Fix documentation surrounding the stub strategy
|
118
|
+
|
119
|
+
## 4.0.0 (August 3, 2012)
|
120
|
+
* Remove deprecated cucumber_steps
|
121
|
+
* Remove deprecated alternate syntaxes
|
122
|
+
* Deprecate duplicate_attribute_assignment_from_initialize_with, which is now unused
|
123
|
+
as attributes assigned within initialize_with are not subsequently assigned
|
124
|
+
|
125
|
+
## 3.6.1 (August 2, 2012)
|
126
|
+
Update README to include info about running with JRuby
|
127
|
+
* Update dependencies on RSpec and tiny versions of Rails in Appraisal
|
128
|
+
* Improve flexibility of using traits with associations and add documentation
|
129
|
+
* Stub update_column to raise to mirror ActiveRecord's change from update_attribute
|
130
|
+
|
131
|
+
## 3.6.0 (July 27, 2012)
|
132
|
+
* Code/spec cleanup
|
133
|
+
* Allow factories with traits to be used in associations
|
134
|
+
* Refactor Factory to use DefinitionHierarchy to handle managing callbacks,
|
135
|
+
custom constructor, and custom to_create
|
136
|
+
* Add memoization to speed up factories providing attribute overrides
|
137
|
+
* Add initial support of JRuby when running in 1.9 mode
|
138
|
+
* Improve docs on what happens when including FactoryGirl::Syntax::Methods
|
139
|
+
|
140
|
+
## 3.5.0 (June 22, 2012)
|
141
|
+
* Allow created_at to be set when using build_stubbed
|
142
|
+
* Deprecate FactoryGirl step definitions
|
143
|
+
|
144
|
+
## 3.4.2 (June 19, 2012)
|
145
|
+
* Fix bug in traits with callbacks called implicitly in factories whose
|
146
|
+
callbacks trigger multiple times
|
147
|
+
|
148
|
+
## 3.4.1 (June 18, 2012)
|
149
|
+
* Fix traits so they can be nested and referred to from other traits
|
150
|
+
|
151
|
+
## 3.4.0 (June 11, 2012)
|
152
|
+
* Sequences support Enumerators
|
153
|
+
* Optionally disable duplicate assignment of attributes in initialize_with
|
154
|
+
* Make hash of public attributes available in initialize_with
|
155
|
+
* Support referring to a factory based on class name
|
156
|
+
|
157
|
+
## 3.3.0 (May 13, 2012)
|
158
|
+
* Allow to_create, skip_create, and initialize_with to be defined globally
|
159
|
+
* Allow to_create, skip_create, and initialize_with to be defined within traits
|
160
|
+
* Fix deprecation messages for alternate syntaxes (make, generate, etc.)
|
161
|
+
* Improve library documentation
|
162
|
+
* Deprecate after_build, after_create, before_create, after_stub in favor of new callbacks
|
163
|
+
* Introduce new callback syntax: after(:build) {}, after(:custom) {}, or callback(:different) {}
|
164
|
+
This allows for declaring any callback, usable with custom strategies
|
165
|
+
* Add attributes_for_list and build_stubbed_list with the StrategySyntaxMethodRegistrar
|
166
|
+
* Allow use of syntax methods (build, create, generate, etc) implicitly in callbacks
|
167
|
+
* Internal refactoring of a handful of components
|
168
|
+
|
169
|
+
## 3.2.0 (April 24, 2012)
|
170
|
+
* Use AS::Notifications for pub/sub to track running factories
|
171
|
+
* Call new within initialize_with implicitly on the build class
|
172
|
+
* Skip to_create with skip_create
|
173
|
+
* Allow registration of custom strategies
|
174
|
+
* Deprecate alternate syntaxes
|
175
|
+
* Implicitly call factory_bot's syntax methods from dynamic attributes
|
176
|
+
|
177
|
+
## 3.1.0 (April 6, 2012)
|
178
|
+
* Sequences support aliases, which reference the same block
|
179
|
+
* Update documentation
|
180
|
+
* Add before_create callback
|
181
|
+
* Support use of #attribute_names method to determine available attributes for steps
|
182
|
+
* Use ActiveSupport::Deprecation for all deprecations
|
183
|
+
|
184
|
+
## 3.0.0 (March 23, 2012)
|
185
|
+
* Deprecate the vintage syntax
|
186
|
+
* Remove Rails 2.x support
|
187
|
+
* Remove Ruby 1.8 support
|
188
|
+
* Remove deprecated features, including default_strategy, factory_name,
|
189
|
+
:method for defining default strategy, ignore on individual attributes, and
|
190
|
+
interacting with Factory the way you would FactoryGirl
|
191
|
+
|
192
|
+
## 2.6.4 (March 16, 2012)
|
193
|
+
* Do not ignore names of transient attributes
|
194
|
+
* Ensure attributes set on instance are calculated uniquely
|
195
|
+
|
196
|
+
## 2.6.3 (March 9, 2012)
|
197
|
+
* Fix issue with traits not being present the first time a factory is accessed
|
198
|
+
* Update available Cucumber step definitions to not require a trailing colon
|
199
|
+
when building a table of attributes to instantiate records with
|
200
|
+
|
201
|
+
## 2.6.2 (March 9, 2012)
|
202
|
+
* Allow factories to use all their ancestors' traits
|
203
|
+
* Ignore bin dir generated by bundler
|
204
|
+
* Namespace ::Factory as top-level to fix vintage syntax issue with
|
205
|
+
Ruby 1.9.2-p3p18
|
206
|
+
|
207
|
+
## 2.6.1 (March 2, 2012)
|
208
|
+
* Use FactoryGirl.reload in specs
|
209
|
+
* Clean up running named factories with a particular strategy with
|
210
|
+
FactoryGirl::FactoryRunner
|
211
|
+
|
212
|
+
## 2.6.0 (February 17, 2012)
|
213
|
+
* Improve documentation of has_many associations in the GETTING_STARTED
|
214
|
+
document
|
215
|
+
* Deprecate :method in favor of :strategy when overriding an association's
|
216
|
+
build strategy
|
217
|
+
|
218
|
+
## 2.5.2 (February 10, 2012)
|
219
|
+
* Fix step definitions to use associations defined in parent factories
|
220
|
+
* Add inline trait support to (build|create)_list
|
221
|
+
* Update ActiveSupport dependency to >= 2.3.9, which introduced
|
222
|
+
class_attribute
|
223
|
+
|
224
|
+
## 2.5.1 (February 3, 2012)
|
225
|
+
* Fix attribute evaluation when the attribute isn't defined in the factory but
|
226
|
+
is a private method on Object
|
227
|
+
* Update rubygems on Travis before running tests
|
228
|
+
* Fix spec name
|
229
|
+
* Update GETTING_STARTED with correct usage of build_stubbed
|
230
|
+
* Update README with more info on initialize_with
|
231
|
+
* Honor :parent on factory over block nesting
|
232
|
+
|
233
|
+
## 2.5.0 (January 20, 2012)
|
234
|
+
* Revert 'Deprecate build_stubbed and attributes_for'
|
235
|
+
* Implement initialize_with to allow overriding object instantiation
|
236
|
+
* Ensure FG runs against Rails 3.2.0
|
237
|
+
|
238
|
+
## 2.4.2 (January 18, 2012)
|
239
|
+
* Fix inline traits' interaction with defaults on the factory
|
240
|
+
|
241
|
+
## 2.4.1 (January 17, 2012)
|
242
|
+
* Deprecate build_stubbed and attributes_for
|
243
|
+
* Fix inline traits
|
244
|
+
|
245
|
+
## 2.4.0 (January 13, 2012)
|
246
|
+
* Refactor internals of FactoryGirl to use anonymous class on which attributes
|
247
|
+
get defined
|
248
|
+
* Explicitly require Ruby 1.8.7 or higher in gemspec
|
249
|
+
* Fix documentation
|
250
|
+
* Add Gemnasium status to documentation
|
251
|
+
* Supplying a Class to a factory that overrides to_s no longer results in
|
252
|
+
getting the wrong Class constructed
|
253
|
+
* Be more agnostic about ORMs when using columns in FactoryGirl step
|
254
|
+
definitions
|
255
|
+
* Test against Active Record 3.2.0.rc2
|
256
|
+
* Update GETTING_STARTED to use Ruby syntax highlighting
|
257
|
+
|
258
|
+
## 2.3.2 (November 26, 2011)
|
259
|
+
* Move logic of where instance.save! is set to Definition
|
260
|
+
* Fix method name from aliases_for? to alias_for?
|
261
|
+
* Refactor internal attribute handling to use an anonymous class instead of
|
262
|
+
faking Ruby's variable resolution. This allows for more sane usage of
|
263
|
+
attributes without having to manage sorting priority because attributes
|
264
|
+
can turn themselves into procs, which are used with define_method on a
|
265
|
+
class so attributes work correctly all the time.
|
266
|
+
|
267
|
+
## 2.3.1 (November 23, 2011)
|
268
|
+
* Remove internally-used associate method from all the FactoryGirl::Proxy subclasses
|
269
|
+
* Move around requiring of files
|
270
|
+
* Consolidate errors into factory_bot.rb
|
271
|
+
* Refactor AttributeList to deal with priority only when iterating over
|
272
|
+
attributes
|
273
|
+
* Refactor internals of some of the Proxy subclasses
|
274
|
+
* Ensure callbacks on traits are executed in the correct order
|
275
|
+
|
276
|
+
## 2.3.0 (November 18, 2011)
|
277
|
+
* Registries are named, resulting in better messages when factories, traits,
|
278
|
+
or sequences cannot be found
|
279
|
+
* Fix incorrect tests
|
280
|
+
* Internals refactoring introducing FactoryGirl::NullFactory,
|
281
|
+
FactoryGirl::Definition, and FactoryGirl::DeclarationList
|
282
|
+
* Use ActiveSupport for Hash#except and its delegation capabilities
|
283
|
+
* Fix usage of callbacks when added via implicit traits
|
284
|
+
* Use Bundler tasks and clean up dependencies
|
285
|
+
* Fix failing spec for big letters in factory name passed as symbol
|
286
|
+
* Add ability for traits to be added dynamically when creating an instance via
|
287
|
+
build, create, build_stubbed, or attributes_for
|
288
|
+
|
289
|
+
## 2.2.0 (October 14, 2011)
|
290
|
+
* Clean up RSpec suite to not use 'should'
|
291
|
+
* Use create_list in step definitions
|
292
|
+
* Syntax methods that deal with ORM interaction (attributes_for, build, build_stubbed,
|
293
|
+
and create) now accept a block that yields the result. This results in a
|
294
|
+
more convenient way to interact with the result than using Object.tap.
|
295
|
+
* Standardize deprecation warnings
|
296
|
+
* Update transient attribute syntax to use blocks instead of calling ignore on
|
297
|
+
each attribute declaration
|
298
|
+
* Parents can be defined after children because factories are evaluated when
|
299
|
+
they're used; this means breaking up factories across multiple files will
|
300
|
+
behave as expected
|
301
|
+
* Large internal refactoring, including changing access modifiers for a
|
302
|
+
handful of methods for a more clearly defined API
|
303
|
+
|
304
|
+
## 2.1.2 (September 23, 2011)
|
305
|
+
* Bugfix: Vintage syntax fixed after bug introduced in 2.1.1
|
306
|
+
* Introduce dependency on activesupport to remove code from Factory class
|
307
|
+
|
308
|
+
## 2.1.1 (September 23, 2011) (yanked)
|
309
|
+
* Bugfix: Parent object callbacks are run before child object callbacks
|
310
|
+
* Declarations: allow overriding/modification of individual traits in child factories
|
311
|
+
* Callbacks refactored to not be attributes
|
312
|
+
* Updating documentation for formatting and clarity (incl. new specificity for cucumber)
|
313
|
+
|
314
|
+
## 2.1.0 (September 02, 2011)
|
315
|
+
* Bugfix: created_at now defined for stubbed models
|
316
|
+
* Gemspec updated for use with Rails 3.1
|
317
|
+
* Factories can now be modified post-definition (useful for overriding defaults from gems/plugins)
|
318
|
+
* All factories can now be reloaded with Factory.reload
|
319
|
+
* Add :method => build to factory associations to prevent saving of associated objects
|
320
|
+
* Factories defined in {Rails.root}/factories are now loaded by default
|
321
|
+
* Various documentation updates
|
322
|
+
|
323
|
+
## 1.1.4 (November 28, 2008)
|
324
|
+
* Factory.build now uses Factory.create for associations of the built object
|
325
|
+
* Factory definitions are now detected in subdirectories, such as
|
326
|
+
factories/person_factory.rb (thanks to Josh Nichols)
|
327
|
+
* Factory definitions are now loaded after the environment in a Rails project
|
328
|
+
(fixes some issues with dependencies being loaded too early) (thanks to
|
329
|
+
Josh Nichols)
|
330
|
+
* Factory names ending in 's' no longer cause problems (thanks to Alex Sharp
|
331
|
+
and Josh Owens)
|
332
|
+
|
333
|
+
## 1.1.3 (September 12, 2008)
|
334
|
+
* Automatically pull in definitions from factories.rb, test/factories.rb, or
|
335
|
+
spec/factories.rb
|
336
|
+
## 1.1.2 (July 30, 2008)
|
337
|
+
* Improved error handling for invalid and undefined factories/attributes
|
338
|
+
* Improved handling of strings vs symbols vs classes
|
339
|
+
* Added a prettier syntax for handling associations
|
340
|
+
* Updated documentation and fixed compatibility with Rails 2.1
|
341
|
+
|
342
|
+
## 1.1.1 (June 23, 2008)
|
343
|
+
* The attribute "name" no longer requires using #add_attribute
|
344
|
+
|
345
|
+
## 1.1.0 (June 03, 2008)
|
346
|
+
* Added support for dependent attributes
|
347
|
+
* Fixed the attributes_for build strategy to not build associations
|
348
|
+
* Added support for sequences
|
349
|
+
|
350
|
+
## 1.0.0 (May 31, 2008)
|
351
|
+
* First version
|