factory_bot 4.11.1 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/GETTING_STARTED.md +121 -37
- data/LICENSE +1 -1
- data/NEWS.md +351 -0
- data/README.md +18 -22
- 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 +72 -32
- data/NEWS +0 -306
- 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/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 attributes 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
|