factory_bot 4.11.1 → 5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/GETTING_STARTED.md +112 -36
  3. data/LICENSE +1 -1
  4. data/NEWS.md +344 -0
  5. data/README.md +15 -19
  6. data/lib/factory_bot.rb +97 -132
  7. data/lib/factory_bot/aliases.rb +1 -1
  8. data/lib/factory_bot/attribute.rb +4 -39
  9. data/lib/factory_bot/attribute_assigner.rb +21 -6
  10. data/lib/factory_bot/attribute_list.rb +2 -1
  11. data/lib/factory_bot/callback.rb +3 -2
  12. data/lib/factory_bot/configuration.rb +15 -19
  13. data/lib/factory_bot/declaration.rb +4 -4
  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_list.rb +1 -1
  18. data/lib/factory_bot/decorator.rb +5 -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/definition.rb +9 -6
  22. data/lib/factory_bot/definition_proxy.rb +59 -62
  23. data/lib/factory_bot/errors.rb +7 -4
  24. data/lib/factory_bot/evaluation.rb +1 -1
  25. data/lib/factory_bot/evaluator.rb +5 -5
  26. data/lib/factory_bot/factory.rb +8 -8
  27. data/lib/factory_bot/factory_runner.rb +3 -3
  28. data/lib/factory_bot/find_definitions.rb +1 -1
  29. data/lib/factory_bot/internal.rb +102 -0
  30. data/lib/factory_bot/linter.rb +35 -18
  31. data/lib/factory_bot/null_factory.rb +3 -0
  32. data/lib/factory_bot/null_object.rb +2 -2
  33. data/lib/factory_bot/registry.rb +15 -6
  34. data/lib/factory_bot/reload.rb +3 -3
  35. data/lib/factory_bot/sequence.rb +0 -1
  36. data/lib/factory_bot/strategy/null.rb +2 -4
  37. data/lib/factory_bot/strategy/stub.rb +32 -31
  38. data/lib/factory_bot/strategy_calculator.rb +1 -1
  39. data/lib/factory_bot/strategy_syntax_method_registrar.rb +2 -2
  40. data/lib/factory_bot/syntax.rb +2 -2
  41. data/lib/factory_bot/syntax/default.rb +6 -6
  42. data/lib/factory_bot/syntax/methods.rb +32 -9
  43. data/lib/factory_bot/trait.rb +6 -3
  44. data/lib/factory_bot/version.rb +1 -1
  45. metadata +44 -33
  46. data/NEWS +0 -306
  47. data/lib/factory_bot/attribute/static.rb +0 -16
  48. data/lib/factory_bot/declaration/static.rb +0 -26
  49. 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: 14d67d2d0498cdfe3d47717279561f299566ecd20084af6958e3c5143188ccae
4
- data.tar.gz: bb6daffb31d969293032bbb2d655c3628095bdd285708fdc93fe2a60e4cd072e
3
+ metadata.gz: 1d19c695ef0088d163b82c6b32066d4385d4be7fb8c0dc0b29c350d2e2187f2d
4
+ data.tar.gz: 55270eb96b553aa9b0c186bc7eeaf9d084fc79252b7fb8443d6276b1865168cc
5
5
  SHA512:
6
- metadata.gz: 24178c541ce3b726ad7274febd2bbf69ccaff9446a15a79b9bfce5525b0e2f63cc4af50a48950abe5b8b80397151bf86c31263463b0d7309093c870cb925c97d
7
- data.tar.gz: 630e120e664a503de162d11d9dc36f83a7fc5602a8935875cacfb905b28c3cf1c8f0978137281b5aa8d2fed3fa40c236dd567cb7544bca44cb85e1f43fb2ac83
6
+ metadata.gz: d61c40f944ae69e27a32e0992d8c289e9d0d9d5a48efe2998b8c53eca17be8a3591f886762866155032662e0eb32a4d52f342cfc1c88b22e637cab3d6e999f81
7
+ data.tar.gz: 2aa21a35633016a9e9871c9e56782af137a209ad1c155d51d768ba129d5dea016c54f9d1186191d2ed24e616f5d6516b78698488b8ee536fd929e28c7055ff1f
@@ -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 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
- 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:
352
+
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`.
347
375
 
348
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
@@ -998,9 +1066,11 @@ Example Rake task:
998
1066
  namespace :factory_bot do
999
1067
  desc "Verify that all FactoryBot factories are valid"
1000
1068
  task lint: :environment do
1001
- if Rails.env.test?
1002
- DatabaseCleaner.cleaning do
1069
+ if Rails.env.test?
1070
+ conn = ActiveRecord::Base.connection
1071
+ conn.transaction do
1003
1072
  FactoryBot.lint
1073
+ raise ActiveRecord::Rollback
1004
1074
  end
1005
1075
  else
1006
1076
  system("bundle exec rake factory_bot:lint RAILS_ENV='test'")
@@ -1012,8 +1082,7 @@ end
1012
1082
 
1013
1083
  After calling `FactoryBot.lint`, you'll likely want to clear out the
1014
1084
  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.
1085
+ uses an sql transaction and rollback to leave the database clean.
1017
1086
 
1018
1087
  You can lint factories selectively by passing only factories you want linted:
1019
1088
 
@@ -1047,6 +1116,13 @@ You can also specify the strategy used for linting:
1047
1116
  FactoryBot.lint strategy: :build
1048
1117
  ```
1049
1118
 
1119
+ Verbose linting will include full backtraces for each error, which can be
1120
+ helpful for debugging:
1121
+
1122
+ ```ruby
1123
+ FactoryBot.lint verbose: true
1124
+ ```
1125
+
1050
1126
  Custom Construction
1051
1127
  -------------------
1052
1128
 
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,344 @@
1
+ # News
2
+
3
+ ## 5.1.1 (October 2, 2019)
4
+ * Improved: performance of traits
5
+ * Fixed: registering strategies on JRuby
6
+
7
+ ## 5.1.0 (September 21, 2019)
8
+ * Added: "Did you mean?" style error message to help with typos in association declarations
9
+ * Changed: `NoMethodError` for static attributes now offers a "Did you mean?" style message
10
+ * Fixed: avoid undefining inherited evaluator methods
11
+ * Fixed: avoid stubbing id for records without a primary key
12
+ * Fixed: raise a helpful error for self-referencing traits to avoid a `SystemStackError`
13
+ * 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`
14
+
15
+ ## 5.0.2 (February 22, 2019)
16
+ * Bugfix: raise "Trait not registered" error when passing invalid trait arguments
17
+
18
+ ## 5.0.1 (February 15, 2019)
19
+ * Bugfix: Do not raise error when two sequences have the same name
20
+ in two traits that have the same name
21
+
22
+ ## 5.0.0 (February 1, 2019)
23
+ * Added: Verbose option to include full backtraces in the linting output
24
+ * Changed: use_parent_strategy now defaults to true, so by default the
25
+ build strategy will build, rather than create associations
26
+ * Changed: Passing a block when defining associations now raises an error
27
+ * Bugfix: use_parent_strategy is no longer reset by FactoryBot.reload
28
+ * Bugfix: rewind_sequences will now rewind local sequences along with the global ones
29
+ * Bugfix: the build_stubbed strategy now sets timestamps without changing the
30
+ the original behavior of the timestamp methods
31
+ * Bugfix: avoid a stack error when referring to an "attributes" attribute in initialize_with
32
+ * Removed: support for EOL versions of Ruby and Rails
33
+ * Removed: static attributes (use dynamic attributes with a block instead)
34
+ * Removed: looking up factories by class
35
+ * Removed: ignore method (use transient instead)
36
+ * Removed: duplicate_attribute_assignment_from_initialize_with configuration option
37
+ * Deprecated: allow_class_lookup configuration option
38
+
39
+ ## 4.11.1 (September 7, 2018)
40
+ * Documentation: Include .yardopts in the gem to fix broken RubyDoc links
41
+
42
+ ## 4.11.0 (August, 15, 2018)
43
+ * Bugfix: Do not raise error for valid build_stubbed methods: decrement, increment, and toggle
44
+ * Bugfix: Do not add timestamps with build_stubbed for objects that shouldn't have timestamps
45
+ * Deprecate static attributes
46
+
47
+ ## 4.10.0 (May 25, 2018)
48
+ * Allow sequences to be rewound
49
+
50
+ ## 4.9.0 (skipped - FactoryGirl only release)
51
+
52
+ ## 4.8.2 (October 20, 2017)
53
+ * Rename factory_girl to factory_bot
54
+
55
+ ## 4.8.1 (September 28, 2017)
56
+ * Explicitly define `#destroyed?` within the `Stub` strategy to return `nil` instead of raising
57
+ * Update various dependencies
58
+ * Update internal test suite to use RSpec's mocking/stubbing instead of mocha
59
+
60
+ ## 4.8.0 (December 16, 2016)
61
+ * Improve documentation
62
+ * Add `FactoryGirl.generate_list` to be consistent with `build_list`/`create_list` and friends
63
+ * Add `FactoryGirl.use_parent_strategy` configuration to allow associations to leverage parent build strategy
64
+
65
+ ## 4.7.0 (April 1, 2016)
66
+ * Improve documentation
67
+ * Improve instrumentation payload to include traits, overrides, and the factory itself
68
+ * Allow linting of traits
69
+ * Deprecate factory lookup by class name in preparation for 5.0
70
+ * Improve internal performance by using flat_map instead of map and compact
71
+ * Improve handling of dirty attributes after building a stubbed object
72
+ * Reduce warnings from redefining methods
73
+
74
+ ## 4.6.0 (skipped)
75
+
76
+ ## 4.5.0 (October 17, 2014)
77
+ * Improve FactoryGirl.lint by including exception and message in output
78
+ * Allow selective linting
79
+ * Use more explicit #public_send when doing attribute assignment
80
+ * Improve documentation around FactoryGirl.lint and initialize_with
81
+ * Deprecate #ignore in favor of #transient
82
+
83
+ ## 4.4.0 (February 10, 2014)
84
+ * Add FactoryGirl.lint
85
+ * Fix memory leak in duplicate traits
86
+ * Update documentation
87
+
88
+ ## 4.3.0 (November 3, 2013)
89
+ * Start testing against Rails 4.0 and Ruby 2.0.0
90
+ * Stop testing against Rails 3.0 and Ruby 1.9.2
91
+ * Add `*_pair` methods to only build two objects
92
+ * Raise if a method is defined with a FactoryGirl block (factory or trait)
93
+ * Allow use of Symbol#to_proc in callbacks
94
+ * Add global callbacks
95
+ * Improve GETTING_STARTED and README
96
+
97
+ ## 4.2.0 (January 18, 2013)
98
+ * Improve documentation
99
+ * Allow `*_list` syntax methods to accept a block
100
+ * Update gem dependencies
101
+ * Allow setting id for objects created with `build_stubbed`
102
+ * Fix Stub strategy to mimic ActiveRecord regarding `created_at`
103
+ * Evaluate sequences within the context of an Evaluator
104
+ * Fix Mocha deprecation warning
105
+ * Fix some warnings when running RUBYOPT=-w rake
106
+ * Convert test suite to RSpec's "expect" syntax
107
+
108
+ ## 4.1.0 (September 11, 2012)
109
+ * Allow multiple callbacks to bind to the same block
110
+ * Fix documentation surrounding the stub strategy
111
+
112
+ ## 4.0.0 (August 3, 2012)
113
+ * Remove deprecated cucumber_steps
114
+ * Remove deprecated alternate syntaxes
115
+ * Deprecate duplicate_attribute_assignment_from_initialize_with, which is now unused
116
+ as attributes assigned within initialize_with are not subsequently assigned
117
+
118
+ ## 3.6.1 (August 2, 2012)
119
+ Update README to include info about running with JRuby
120
+ * Update dependencies on RSpec and tiny versions of Rails in Appraisal
121
+ * Improve flexibility of using traits with associations and add documentation
122
+ * Stub update_column to raise to mirror ActiveRecord's change from update_attribute
123
+
124
+ ## 3.6.0 (July 27, 2012)
125
+ * Code/spec cleanup
126
+ * Allow factories with traits to be used in associations
127
+ * Refactor Factory to use DefinitionHierarchy to handle managing callbacks,
128
+ custom constructor, and custom to_create
129
+ * Add memoization to speed up factories providing attribute overrides
130
+ * Add initial support of JRuby when running in 1.9 mode
131
+ * Improve docs on what happens when including FactoryGirl::Syntax::Methods
132
+
133
+ ## 3.5.0 (June 22, 2012)
134
+ * Allow created_at to be set when using build_stubbed
135
+ * Deprecate FactoryGirl step definitions
136
+
137
+ ## 3.4.2 (June 19, 2012)
138
+ * Fix bug in traits with callbacks called implicitly in factories whose
139
+ callbacks trigger multiple times
140
+
141
+ ## 3.4.1 (June 18, 2012)
142
+ * Fix traits so they can be nested and referred to from other traits
143
+
144
+ ## 3.4.0 (June 11, 2012)
145
+ * Sequences support Enumerators
146
+ * Optionally disable duplicate assignment of attributes in initialize_with
147
+ * Make hash of public attributes available in initialize_with
148
+ * Support referring to a factory based on class name
149
+
150
+ ## 3.3.0 (May 13, 2012)
151
+ * Allow to_create, skip_create, and initialize_with to be defined globally
152
+ * Allow to_create, skip_create, and initialize_with to be defined within traits
153
+ * Fix deprecation messages for alternate syntaxes (make, generate, etc.)
154
+ * Improve library documentation
155
+ * Deprecate after_build, after_create, before_create, after_stub in favor of new callbacks
156
+ * Introduce new callback syntax: after(:build) {}, after(:custom) {}, or callback(:different) {}
157
+ This allows for declaring any callback, usable with custom strategies
158
+ * Add attributes_for_list and build_stubbed_list with the StrategySyntaxMethodRegistrar
159
+ * Allow use of syntax methods (build, create, generate, etc) implicitly in callbacks
160
+ * Internal refactoring of a handful of components
161
+
162
+ ## 3.2.0 (April 24, 2012)
163
+ * Use AS::Notifications for pub/sub to track running factories
164
+ * Call new within initialize_with implicitly on the build class
165
+ * Skip to_create with skip_create
166
+ * Allow registration of custom strategies
167
+ * Deprecate alternate syntaxes
168
+ * Implicitly call factory_bot's syntax methods from dynamic attributes
169
+
170
+ ## 3.1.0 (April 6, 2012)
171
+ * Sequences support aliases, which reference the same block
172
+ * Update documentation
173
+ * Add before_create callback
174
+ * Support use of #attribute_names method to determine available attributes for steps
175
+ * Use ActiveSupport::Deprecation for all deprecations
176
+
177
+ ## 3.0.0 (March 23, 2012)
178
+ * Deprecate the vintage syntax
179
+ * Remove Rails 2.x support
180
+ * Remove Ruby 1.8 support
181
+ * Remove deprecated features, including default_strategy, factory_name,
182
+ :method for defining default strategy, ignore on individual attributes, and
183
+ interacting with Factory the way you would FactoryGirl
184
+
185
+ ## 2.6.4 (March 16, 2012)
186
+ * Do not ignore names of transient attributes
187
+ * Ensure attributes set on instance are calculated uniquely
188
+
189
+ ## 2.6.3 (March 9, 2012)
190
+ * Fix issue with traits not being present the first time a factory is accessed
191
+ * Update available Cucumber step definitions to not require a trailing colon
192
+ when building a table of attributes to instantiate records with
193
+
194
+ ## 2.6.2 (March 9, 2012)
195
+ * Allow factories to use all their ancestors' traits
196
+ * Ignore bin dir generated by bundler
197
+ * Namespace ::Factory as top-level to fix vintage syntax issue with
198
+ Ruby 1.9.2-p3p18
199
+
200
+ ## 2.6.1 (March 2, 2012)
201
+ * Use FactoryGirl.reload in specs
202
+ * Clean up running named factories with a particular strategy with
203
+ FactoryGirl::FactoryRunner
204
+
205
+ ## 2.6.0 (February 17, 2012)
206
+ * Improve documentation of has_many associations in the GETTING_STARTED
207
+ document
208
+ * Deprecate :method in favor of :strategy when overriding an association's
209
+ build strategy
210
+
211
+ ## 2.5.2 (February 10, 2012)
212
+ * Fix step definitions to use associations defined in parent factories
213
+ * Add inline trait support to (build|create)_list
214
+ * Update ActiveSupport dependency to >= 2.3.9, which introduced
215
+ class_attribute
216
+
217
+ ## 2.5.1 (February 3, 2012)
218
+ * Fix attribute evaluation when the attribute isn't defined in the factory but
219
+ is a private method on Object
220
+ * Update rubygems on Travis before running tests
221
+ * Fix spec name
222
+ * Update GETTING_STARTED with correct usage of build_stubbed
223
+ * Update README with more info on initialize_with
224
+ * Honor :parent on factory over block nesting
225
+
226
+ ## 2.5.0 (January 20, 2012)
227
+ * Revert 'Deprecate build_stubbed and attributes_for'
228
+ * Implement initialize_with to allow overriding object instantiation
229
+ * Ensure FG runs against Rails 3.2.0
230
+
231
+ ## 2.4.2 (January 18, 2012)
232
+ * Fix inline traits' interaction with defaults on the factory
233
+
234
+ ## 2.4.1 (January 17, 2012)
235
+ * Deprecate build_stubbed and attributes_for
236
+ * Fix inline traits
237
+
238
+ ## 2.4.0 (January 13, 2012)
239
+ * Refactor internals of FactoryGirl to use anonymous class on which attributes
240
+ get defined
241
+ * Explicitly require Ruby 1.8.7 or higher in gemspec
242
+ * Fix documentation
243
+ * Add Gemnasium status to documentation
244
+ * Supplying a Class to a factory that overrides to_s no longer results in
245
+ getting the wrong Class constructed
246
+ * Be more agnostic about ORMs when using columns in FactoryGirl step
247
+ definitions
248
+ * Test against Active Record 3.2.0.rc2
249
+ * Update GETTING_STARTED to use Ruby syntax highlighting
250
+
251
+ ## 2.3.2 (November 26, 2011)
252
+ * Move logic of where instance.save! is set to Definition
253
+ * Fix method name from aliases_for? to alias_for?
254
+ * Refactor internal attribute handling to use an anonymous class instead of
255
+ faking Ruby's variable resolution. This allows for more sane usage of
256
+ attributes without having to manage sorting priority because attributes
257
+ can turn themselves into procs, which are used with define_method on a
258
+ class so attributes work correctly all the time.
259
+
260
+ ## 2.3.1 (November 23, 2011)
261
+ * Remove internally-used associate method from all the FactoryGirl::Proxy subclasses
262
+ * Move around requiring of files
263
+ * Consolidate errors into factory_bot.rb
264
+ * Refactor AttributeList to deal with priority only when iterating over
265
+ attributes
266
+ * Refactor internals of some of the Proxy subclasses
267
+ * Ensure callbacks on traits are executed in the correct order
268
+
269
+ ## 2.3.0 (November 18, 2011)
270
+ * Registries are named, resulting in better messages when factories, traits,
271
+ or sequences cannot be found
272
+ * Fix incorrect tests
273
+ * Internals refactoring introducing FactoryGirl::NullFactory,
274
+ FactoryGirl::Definition, and FactoryGirl::DeclarationList
275
+ * Use ActiveSupport for Hash#except and its delegation capabilities
276
+ * Fix usage of callbacks when added via implicit traits
277
+ * Use Bundler tasks and clean up dependencies
278
+ * Fix failing spec for big letters in factory name passed as symbol
279
+ * Add ability for traits to be added dynamically when creating an instance via
280
+ build, create, build_stubbed, or attributes_for
281
+
282
+ ## 2.2.0 (October 14, 2011)
283
+ * Clean up RSpec suite to not use 'should'
284
+ * Use create_list in step definitions
285
+ * Syntax methods that deal with ORM interaction (attributes_for, build, build_stubbed,
286
+ and create) now accept a block that yields the result. This results in a
287
+ more convenient way to interact with the result than using Object.tap.
288
+ * Standardize deprecation warnings
289
+ * Update transient attribute syntax to use blocks instead of calling ignore on
290
+ each attribute declaration
291
+ * Parents can be defined after children because factories are evaluated when
292
+ they're used; this means breaking up factories across multiple files will
293
+ behave as expected
294
+ * Large internal refactoring, including changing access modifiers for a
295
+ handful of methods for a more clearly defined API
296
+
297
+ ## 2.1.2 (September 23, 2011)
298
+ * Bugfix: Vintage syntax fixed after bug introduced in 2.1.1
299
+ * Introduce dependency on activesupport to remove code from Factory class
300
+
301
+ ## 2.1.1 (September 23, 2011) (yanked)
302
+ * Bugfix: Parent object callbacks are run before child object callbacks
303
+ * Declarations: allow overriding/modification of individual traits in child factories
304
+ * Callbacks refactored to not be attributes
305
+ * Updating documentation for formatting and clarity (incl. new specificity for cucumber)
306
+
307
+ ## 2.1.0 (September 02, 2011)
308
+ * Bugfix: created_at now defined for stubbed models
309
+ * Gemspec updated for use with Rails 3.1
310
+ * Factories can now be modified post-definition (useful for overriding defaults from gems/plugins)
311
+ * All factories can now be reloaded with Factory.reload
312
+ * Add :method => build to factory associations to prevent saving of associated objects
313
+ * Factories defined in {Rails.root}/factories are now loaded by default
314
+ * Various documentation updates
315
+
316
+ ## 1.1.4 (November 28, 2008)
317
+ * Factory.build now uses Factory.create for associations of the built object
318
+ * Factory definitions are now detected in subdirectories, such as
319
+ factories/person_factory.rb (thanks to Josh Nichols)
320
+ * Factory definitions are now loaded after the environment in a Rails project
321
+ (fixes some issues with dependencies being loaded too early) (thanks to
322
+ Josh Nichols)
323
+ * Factory names ending in 's' no longer cause problems (thanks to Alex Sharp
324
+ and Josh Owens)
325
+
326
+ ## 1.1.3 (September 12, 2008)
327
+ * Automatically pull in definitions from factories.rb, test/factories.rb, or
328
+ spec/factories.rb
329
+ ## 1.1.2 (July 30, 2008)
330
+ * Improved error handling for invalid and undefined factories/attributes
331
+ * Improved handling of strings vs symbols vs classes
332
+ * Added a prettier syntax for handling associations
333
+ * Updated documentation and fixed compatibility with Rails 2.1
334
+
335
+ ## 1.1.1 (June 23, 2008)
336
+ * The attribute "name" no longer requires using #add_attribute
337
+
338
+ ## 1.1.0 (June 03, 2008)
339
+ * Added support for dependent attributes
340
+ * Fixed the attributes_for build strategy to not build associations
341
+ * Added support for sequences
342
+
343
+ ## 1.0.0 (May 31, 2008)
344
+ * First version