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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +6 -0
  3. data/GETTING_STARTED.md +121 -37
  4. data/LICENSE +1 -1
  5. data/NEWS.md +351 -0
  6. data/README.md +21 -25
  7. data/lib/factory_bot/aliases.rb +1 -1
  8. data/lib/factory_bot/attribute/dynamic.rb +1 -0
  9. data/lib/factory_bot/attribute.rb +4 -39
  10. data/lib/factory_bot/attribute_assigner.rb +21 -6
  11. data/lib/factory_bot/attribute_list.rb +2 -1
  12. data/lib/factory_bot/callback.rb +3 -2
  13. data/lib/factory_bot/configuration.rb +16 -20
  14. data/lib/factory_bot/declaration/association.rb +14 -1
  15. data/lib/factory_bot/declaration/dynamic.rb +3 -1
  16. data/lib/factory_bot/declaration/implicit.rb +7 -2
  17. data/lib/factory_bot/declaration.rb +4 -4
  18. data/lib/factory_bot/declaration_list.rb +1 -1
  19. data/lib/factory_bot/decorator/attribute_hash.rb +1 -1
  20. data/lib/factory_bot/decorator/invocation_tracker.rb +1 -1
  21. data/lib/factory_bot/decorator.rb +5 -1
  22. data/lib/factory_bot/definition.rb +10 -7
  23. data/lib/factory_bot/definition_hierarchy.rb +1 -11
  24. data/lib/factory_bot/definition_proxy.rb +59 -62
  25. data/lib/factory_bot/errors.rb +7 -4
  26. data/lib/factory_bot/evaluation.rb +1 -1
  27. data/lib/factory_bot/evaluator.rb +5 -5
  28. data/lib/factory_bot/factory.rb +8 -8
  29. data/lib/factory_bot/factory_runner.rb +3 -3
  30. data/lib/factory_bot/find_definitions.rb +1 -1
  31. data/lib/factory_bot/internal.rb +104 -0
  32. data/lib/factory_bot/linter.rb +36 -19
  33. data/lib/factory_bot/null_factory.rb +4 -1
  34. data/lib/factory_bot/null_object.rb +2 -2
  35. data/lib/factory_bot/registry.rb +15 -6
  36. data/lib/factory_bot/reload.rb +3 -3
  37. data/lib/factory_bot/sequence.rb +0 -1
  38. data/lib/factory_bot/strategy/null.rb +2 -4
  39. data/lib/factory_bot/strategy/stub.rb +32 -31
  40. data/lib/factory_bot/strategy_calculator.rb +1 -1
  41. data/lib/factory_bot/strategy_syntax_method_registrar.rb +13 -2
  42. data/lib/factory_bot/syntax/default.rb +12 -24
  43. data/lib/factory_bot/syntax/methods.rb +32 -9
  44. data/lib/factory_bot/syntax.rb +2 -2
  45. data/lib/factory_bot/trait.rb +6 -3
  46. data/lib/factory_bot/version.rb +1 -1
  47. data/lib/factory_bot.rb +103 -138
  48. metadata +73 -32
  49. data/NEWS +0 -303
  50. data/lib/factory_bot/attribute/static.rb +0 -16
  51. data/lib/factory_bot/declaration/static.rb +0 -26
  52. 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: 89e05780d4f57018d6825a36765bae4eafd20a5ea7ef0dd087f056a467d7c04a
4
- data.tar.gz: 57af145df0452c560e27c979f3f76a1ee680e6e0e7f10dbb6af253a02943f942
3
+ metadata.gz: 802da48aa95dce3321f20d0173c5dcf041c5393fb0c270fb8ae2029ce12b6ed9
4
+ data.tar.gz: 0aa227896ef66ccf100f88b1aa4e9aa26c5bc657fee76739a73e15072bc80572
5
5
  SHA512:
6
- metadata.gz: 7bcda07de6b55b94f5ab976c058520adf4340cd6ca4518b06ceda03dc2a76ec190a0ef7519d3273440868b2f2f772f0b56f9c9aa71a990db6c32986b1a4f97c4
7
- data.tar.gz: 57506e51449c9b2516862498a3078e79c4426ff441e96ee46577b83dbafc97bb91b610b176d1d7b9167b722515954cafa2816c98b866ac8b8586cdbe73273e54
6
+ metadata.gz: 63554d6765398f0c524cb8cd45b1a0da83da1d8aba9f359d0e4c44e42cdbd0d93edb8e38c668e0310ad709905c5cd6a3c35e640ad8c45a06a8b7d4090b4e6161
7
+ data.tar.gz: fe3be69bdd601384da0a7f2ec7e1fcf00ae7d4984c65423e31e94c1b7f3d7bb04345371daaea19d794365972b59f69f9f3403b0ef8b8ef7d7349d89404284ac2
data/.yardopts ADDED
@@ -0,0 +1,6 @@
1
+ lib/**/*.rb
2
+ -
3
+ GETTING_STARTED.md
4
+ CONTRIBUTING.md
5
+ NAME.md
6
+ LICENSE
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, you'll need to change the required version of `factory_bot_rails`:
7
+ If you're using Rails:
8
8
 
9
9
  ```ruby
10
- gem "factory_bot_rails", "~> 4.0"
10
+ gem "factory_bot_rails"
11
11
  ```
12
12
 
13
- If you're *not* using Rails, you'll just have to change the required version of `factory_bot`:
13
+ If you're *not* using Rails:
14
14
 
15
15
  ```ruby
16
- gem "factory_bot", "~> 4.0"
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, but it's possible to explicitly specify it:
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, without a block, are deprecated and will be removed in
184
- factory\_bot 5.
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
- Static and dynamic attributes can be created as transient attributes. Transient
265
- attributes will be ignored within attributes\_for and won't be set on the model,
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
- The behavior of the association method varies depending on the build strategy used for the parent object.
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
- DatabaseCleaner.cleaning do
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 the database_cleaner gem to clear out the database; be sure to add the
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-2017 Joe Ferris and thoughtbot, inc.
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