factory_bot 5.1.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +52 -13
- data/GETTING_STARTED.md +426 -68
- data/NEWS.md +21 -1
- data/README.md +4 -4
- data/lib/factory_bot.rb +21 -55
- data/lib/factory_bot/aliases.rb +3 -3
- data/lib/factory_bot/attribute/association.rb +2 -2
- data/lib/factory_bot/attribute/dynamic.rb +2 -1
- data/lib/factory_bot/attribute_assigner.rb +9 -10
- data/lib/factory_bot/attribute_list.rb +1 -1
- data/lib/factory_bot/callback.rb +2 -10
- data/lib/factory_bot/configuration.rb +6 -6
- data/lib/factory_bot/declaration.rb +1 -1
- data/lib/factory_bot/declaration_list.rb +2 -2
- data/lib/factory_bot/decorator.rb +1 -1
- data/lib/factory_bot/decorator/invocation_tracker.rb +1 -1
- data/lib/factory_bot/definition.rb +47 -16
- data/lib/factory_bot/definition_hierarchy.rb +1 -11
- data/lib/factory_bot/definition_proxy.rb +64 -6
- data/lib/factory_bot/enum.rb +27 -0
- data/lib/factory_bot/evaluator.rb +5 -7
- data/lib/factory_bot/evaluator_class_definer.rb +1 -1
- data/lib/factory_bot/factory.rb +12 -12
- data/lib/factory_bot/factory_runner.rb +3 -3
- data/lib/factory_bot/find_definitions.rb +1 -1
- data/lib/factory_bot/internal.rb +18 -29
- data/lib/factory_bot/linter.rb +9 -13
- data/lib/factory_bot/null_factory.rb +10 -4
- data/lib/factory_bot/null_object.rb +2 -6
- data/lib/factory_bot/registry.rb +4 -4
- data/lib/factory_bot/reload.rb +0 -1
- data/lib/factory_bot/sequence.rb +5 -5
- data/lib/factory_bot/strategy/null.rb +4 -2
- data/lib/factory_bot/strategy/stub.rb +6 -2
- data/lib/factory_bot/strategy_syntax_method_registrar.rb +12 -1
- data/lib/factory_bot/syntax/default.rb +7 -19
- data/lib/factory_bot/trait.rb +1 -1
- data/lib/factory_bot/version.rb +1 -1
- metadata +12 -11
data/NEWS.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# News
|
|
2
2
|
|
|
3
|
+
## 6.0.2 (June 19, 2020)
|
|
4
|
+
* Fixed: bug causing traits to consume more memory each time they were used
|
|
5
|
+
|
|
6
|
+
## 6.0.1 (June 19, 2020)
|
|
7
|
+
* Fixed: bug with constant resolution causing unexpected uninitialized constant errors
|
|
8
|
+
|
|
9
|
+
## 6.0.0 (June 18, 2020)
|
|
10
|
+
* Added: automatic definition of traits for Active Record enum attributes, enabled by default
|
|
11
|
+
* Added: `traits_for_enum` method to define traits for non-Active Record enums
|
|
12
|
+
* Added: `build_stubbed_starting_id=` option to define the starting id for `build_stubbed`
|
|
13
|
+
* Removed: deprecated methods on the top-level `FactoryBot` module meant only for internal use
|
|
14
|
+
* Removed: support for EOL versions of Ruby (2.3, 2.4) and Rails (4.2)
|
|
15
|
+
|
|
16
|
+
## 5.2.0 (April 24, 2020)
|
|
17
|
+
* Added: Pass index to block for `*_list` methods
|
|
18
|
+
* Deprecated: methods on the top-level `FactoryBot` module meant only for internal use: `callbacks`, `configuration`, `constructor`, `initialize_with`, `register_sequence`, `resent_configuration`, `skip_create`, `to_create`
|
|
19
|
+
|
|
20
|
+
## 5.1.2 (March 25, 2020)
|
|
21
|
+
* Fixed: Ruby 2.7 keyword deprecation warning in FactoryBot.lint
|
|
22
|
+
|
|
3
23
|
## 5.1.1 (October 2, 2019)
|
|
4
24
|
* Improved: performance of traits
|
|
5
25
|
* Fixed: registering strategies on JRuby
|
|
@@ -10,7 +30,7 @@
|
|
|
10
30
|
* Fixed: avoid undefining inherited evaluator methods
|
|
11
31
|
* Fixed: avoid stubbing id for records without a primary key
|
|
12
32
|
* Fixed: raise a helpful error for self-referencing traits to avoid a `SystemStackError`
|
|
13
|
-
* Deprecated: top-level
|
|
33
|
+
* Deprecated: methods on the top-level `FactoryBot` module 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
34
|
|
|
15
35
|
## 5.0.2 (February 22, 2019)
|
|
16
36
|
* Bugfix: raise "Trait not registered" error when passing invalid trait arguments
|
data/README.md
CHANGED
|
@@ -72,14 +72,14 @@ Contributing
|
|
|
72
72
|
|
|
73
73
|
Please see [CONTRIBUTING.md](https://github.com/thoughtbot/factory_bot/blob/master/CONTRIBUTING.md).
|
|
74
74
|
|
|
75
|
-
factory_bot was originally written by Joe Ferris and is
|
|
76
|
-
|
|
75
|
+
factory_bot was originally written by Joe Ferris and is maintained by thoughtbot.
|
|
76
|
+
Many improvements and bugfixes were contributed by the [open source
|
|
77
77
|
community](https://github.com/thoughtbot/factory_bot/graphs/contributors).
|
|
78
78
|
|
|
79
79
|
License
|
|
80
80
|
-------
|
|
81
81
|
|
|
82
|
-
factory_bot is Copyright © 2008-
|
|
82
|
+
factory_bot is Copyright © 2008-2020 Joe Ferris and thoughtbot. It is free
|
|
83
83
|
software, and may be redistributed under the terms specified in the
|
|
84
84
|
[LICENSE] file.
|
|
85
85
|
|
|
@@ -89,7 +89,7 @@ software, and may be redistributed under the terms specified in the
|
|
|
89
89
|
About thoughtbot
|
|
90
90
|
----------------
|
|
91
91
|
|
|
92
|
-

|
|
93
93
|
|
|
94
94
|
factory_bot is maintained and funded by thoughtbot, inc.
|
|
95
95
|
The names and logos for thoughtbot are trademarks of thoughtbot, inc.
|
data/lib/factory_bot.rb
CHANGED
|
@@ -4,6 +4,7 @@ require "active_support/core_ext/module/attribute_accessors"
|
|
|
4
4
|
require "active_support/deprecation"
|
|
5
5
|
require "active_support/notifications"
|
|
6
6
|
|
|
7
|
+
require "factory_bot/internal"
|
|
7
8
|
require "factory_bot/definition_hierarchy"
|
|
8
9
|
require "factory_bot/configuration"
|
|
9
10
|
require "factory_bot/errors"
|
|
@@ -31,6 +32,7 @@ require "factory_bot/declaration"
|
|
|
31
32
|
require "factory_bot/sequence"
|
|
32
33
|
require "factory_bot/attribute_list"
|
|
33
34
|
require "factory_bot/trait"
|
|
35
|
+
require "factory_bot/enum"
|
|
34
36
|
require "factory_bot/aliases"
|
|
35
37
|
require "factory_bot/definition"
|
|
36
38
|
require "factory_bot/definition_proxy"
|
|
@@ -45,22 +47,16 @@ require "factory_bot/decorator/invocation_tracker"
|
|
|
45
47
|
require "factory_bot/decorator/new_constructor"
|
|
46
48
|
require "factory_bot/linter"
|
|
47
49
|
require "factory_bot/version"
|
|
48
|
-
require "factory_bot/internal"
|
|
49
50
|
|
|
50
51
|
module FactoryBot
|
|
51
|
-
Deprecation = ActiveSupport::Deprecation.new("
|
|
52
|
-
|
|
53
|
-
def self.configuration
|
|
54
|
-
Internal.configuration
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def self.reset_configuration
|
|
58
|
-
Internal.reset_configuration
|
|
59
|
-
end
|
|
52
|
+
Deprecation = ActiveSupport::Deprecation.new("7.0", "factory_bot")
|
|
60
53
|
|
|
61
54
|
mattr_accessor :use_parent_strategy, instance_accessor: false
|
|
62
55
|
self.use_parent_strategy = true
|
|
63
56
|
|
|
57
|
+
mattr_accessor :automatically_define_enum_traits, instance_accessor: false
|
|
58
|
+
self.automatically_define_enum_traits = true
|
|
59
|
+
|
|
64
60
|
# Look for errors in factories and (optionally) their traits.
|
|
65
61
|
# Parameters:
|
|
66
62
|
# factories - which factories to lint; omit for all factories
|
|
@@ -71,55 +67,25 @@ module FactoryBot
|
|
|
71
67
|
def self.lint(*args)
|
|
72
68
|
options = args.extract_options!
|
|
73
69
|
factories_to_lint = args[0] || FactoryBot.factories
|
|
74
|
-
Linter.new(factories_to_lint, options).lint!
|
|
70
|
+
Linter.new(factories_to_lint, **options).lint!
|
|
75
71
|
end
|
|
76
72
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
:strategies,
|
|
86
|
-
:to_create,
|
|
87
|
-
:traits,
|
|
88
|
-
to: :configuration
|
|
89
|
-
|
|
90
|
-
delegate :factory_by_name,
|
|
91
|
-
:register_callback,
|
|
92
|
-
:register_default_callbacks,
|
|
93
|
-
:register_default_strategies,
|
|
94
|
-
:register_factory,
|
|
95
|
-
:register_sequence,
|
|
96
|
-
:register_strategy,
|
|
97
|
-
:register_trait,
|
|
98
|
-
:rewind_sequences,
|
|
99
|
-
:sequence_by_name,
|
|
100
|
-
:strategy_by_name,
|
|
101
|
-
:trait_by_name,
|
|
102
|
-
to: Internal
|
|
103
|
-
|
|
104
|
-
attr_accessor :allow_class_lookup
|
|
73
|
+
# Set the starting value for ids when using the build_stubbed strategy
|
|
74
|
+
#
|
|
75
|
+
# Arguments:
|
|
76
|
+
# * starting_id +Integer+
|
|
77
|
+
# The new starting id value.
|
|
78
|
+
def self.build_stubbed_starting_id=(starting_id)
|
|
79
|
+
Strategy::Stub.next_id = starting_id - 1
|
|
80
|
+
end
|
|
105
81
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
:register_default_strategies,
|
|
113
|
-
:register_factory,
|
|
114
|
-
:register_trait,
|
|
115
|
-
:sequence_by_name,
|
|
116
|
-
:sequences,
|
|
117
|
-
:strategies,
|
|
118
|
-
:trait_by_name,
|
|
119
|
-
:traits,
|
|
120
|
-
deprecator: Deprecation
|
|
82
|
+
class << self
|
|
83
|
+
delegate :factories,
|
|
84
|
+
:register_strategy,
|
|
85
|
+
:rewind_sequences,
|
|
86
|
+
:strategy_by_name,
|
|
87
|
+
to: Internal
|
|
121
88
|
end
|
|
122
89
|
end
|
|
123
90
|
|
|
124
91
|
FactoryBot::Internal.register_default_strategies
|
|
125
|
-
FactoryBot::Internal.register_default_callbacks
|
data/lib/factory_bot/aliases.rb
CHANGED
|
@@ -5,14 +5,14 @@ module FactoryBot
|
|
|
5
5
|
|
|
6
6
|
self.aliases = [
|
|
7
7
|
[/(.+)_id/, '\1'],
|
|
8
|
-
[/(.*)/, '\1_id']
|
|
8
|
+
[/(.*)/, '\1_id']
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
def self.aliases_for(attribute)
|
|
12
|
-
aliases.map
|
|
12
|
+
aliases.map { |(pattern, replace)|
|
|
13
13
|
if pattern.match(attribute.to_s)
|
|
14
14
|
attribute.to_s.sub(pattern, replace).to_sym
|
|
15
15
|
end
|
|
16
|
-
|
|
16
|
+
}.compact << attribute
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -6,12 +6,12 @@ module FactoryBot
|
|
|
6
6
|
|
|
7
7
|
def initialize(name, factory, overrides)
|
|
8
8
|
super(name, false)
|
|
9
|
-
@factory
|
|
9
|
+
@factory = factory
|
|
10
10
|
@overrides = overrides
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def to_proc
|
|
14
|
-
factory
|
|
14
|
+
factory = @factory
|
|
15
15
|
overrides = @overrides
|
|
16
16
|
traits_and_overrides = [factory, overrides].flatten
|
|
17
17
|
factory_name = traits_and_overrides.shift
|
|
@@ -2,10 +2,10 @@ module FactoryBot
|
|
|
2
2
|
# @api private
|
|
3
3
|
class AttributeAssigner
|
|
4
4
|
def initialize(evaluator, build_class, &instance_builder)
|
|
5
|
-
@build_class
|
|
6
|
-
@instance_builder
|
|
7
|
-
@evaluator
|
|
8
|
-
@attribute_list
|
|
5
|
+
@build_class = build_class
|
|
6
|
+
@instance_builder = instance_builder
|
|
7
|
+
@evaluator = evaluator
|
|
8
|
+
@attribute_list = evaluator.class.attribute_list
|
|
9
9
|
@attribute_names_assigned = []
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -22,9 +22,8 @@ module FactoryBot
|
|
|
22
22
|
def hash
|
|
23
23
|
@evaluator.instance = build_hash
|
|
24
24
|
|
|
25
|
-
attributes_to_set_on_hash.
|
|
25
|
+
attributes_to_set_on_hash.each_with_object({}) do |attribute, result|
|
|
26
26
|
result[attribute] = get(attribute)
|
|
27
|
-
result
|
|
28
27
|
end
|
|
29
28
|
end
|
|
30
29
|
|
|
@@ -33,13 +32,13 @@ module FactoryBot
|
|
|
33
32
|
def method_tracking_evaluator
|
|
34
33
|
@method_tracking_evaluator ||= Decorator::AttributeHash.new(
|
|
35
34
|
decorated_evaluator,
|
|
36
|
-
attribute_names_to_assign
|
|
35
|
+
attribute_names_to_assign
|
|
37
36
|
)
|
|
38
37
|
end
|
|
39
38
|
|
|
40
39
|
def decorated_evaluator
|
|
41
40
|
Decorator::InvocationTracker.new(
|
|
42
|
-
Decorator::NewConstructor.new(@evaluator, @build_class)
|
|
41
|
+
Decorator::NewConstructor.new(@evaluator, @build_class)
|
|
43
42
|
)
|
|
44
43
|
end
|
|
45
44
|
|
|
@@ -96,11 +95,11 @@ module FactoryBot
|
|
|
96
95
|
end
|
|
97
96
|
|
|
98
97
|
def alias_names_to_ignore
|
|
99
|
-
@attribute_list.non_ignored.flat_map
|
|
98
|
+
@attribute_list.non_ignored.flat_map { |attribute|
|
|
100
99
|
override_names.map do |override|
|
|
101
100
|
attribute.name if ignorable_alias?(attribute, override)
|
|
102
101
|
end
|
|
103
|
-
|
|
102
|
+
}.compact
|
|
104
103
|
end
|
|
105
104
|
|
|
106
105
|
def ignorable_alias?(attribute, override)
|
data/lib/factory_bot/callback.rb
CHANGED
|
@@ -3,16 +3,15 @@ module FactoryBot
|
|
|
3
3
|
attr_reader :name
|
|
4
4
|
|
|
5
5
|
def initialize(name, block)
|
|
6
|
-
@name
|
|
6
|
+
@name = name.to_sym
|
|
7
7
|
@block = block
|
|
8
|
-
ensure_valid_callback_name!
|
|
9
8
|
end
|
|
10
9
|
|
|
11
10
|
def run(instance, evaluator)
|
|
12
11
|
case block.arity
|
|
13
12
|
when 1, -1 then syntax_runner.instance_exec(instance, &block)
|
|
14
13
|
when 2 then syntax_runner.instance_exec(instance, evaluator, &block)
|
|
15
|
-
else
|
|
14
|
+
else syntax_runner.instance_exec(&block)
|
|
16
15
|
end
|
|
17
16
|
end
|
|
18
17
|
|
|
@@ -27,13 +26,6 @@ module FactoryBot
|
|
|
27
26
|
|
|
28
27
|
private
|
|
29
28
|
|
|
30
|
-
def ensure_valid_callback_name!
|
|
31
|
-
unless FactoryBot::Internal.callback_names.include?(name)
|
|
32
|
-
raise InvalidCallbackNameError, "#{name} is not a valid callback name. " +
|
|
33
|
-
"Valid callback names are #{FactoryBot::Internal.callback_names.inspect}"
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
29
|
def syntax_runner
|
|
38
30
|
@syntax_runner ||= SyntaxRunner.new
|
|
39
31
|
end
|
|
@@ -7,16 +7,16 @@ module FactoryBot
|
|
|
7
7
|
:inline_sequences,
|
|
8
8
|
:sequences,
|
|
9
9
|
:strategies,
|
|
10
|
-
:traits
|
|
10
|
+
:traits
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
def initialize
|
|
14
|
-
@factories
|
|
15
|
-
@sequences
|
|
16
|
-
@traits
|
|
17
|
-
@strategies
|
|
14
|
+
@factories = Decorator::DisallowsDuplicatesRegistry.new(Registry.new("Factory"))
|
|
15
|
+
@sequences = Decorator::DisallowsDuplicatesRegistry.new(Registry.new("Sequence"))
|
|
16
|
+
@traits = Decorator::DisallowsDuplicatesRegistry.new(Registry.new("Trait"))
|
|
17
|
+
@strategies = Registry.new("Strategy")
|
|
18
18
|
@callback_names = Set.new
|
|
19
|
-
@definition
|
|
19
|
+
@definition = Definition.new(:configuration)
|
|
20
20
|
@inline_sequences = []
|
|
21
21
|
|
|
22
22
|
to_create(&:save!)
|
|
@@ -6,7 +6,7 @@ module FactoryBot
|
|
|
6
6
|
@component = component
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def method_missing(name, *args, &block) # rubocop:disable Style/
|
|
9
|
+
def method_missing(name, *args, &block) # rubocop:disable Style/MethodMissingSuper
|
|
10
10
|
@component.send(name, *args, &block)
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
module FactoryBot
|
|
2
2
|
# @api private
|
|
3
3
|
class Definition
|
|
4
|
-
attr_reader :defined_traits, :declarations, :name
|
|
4
|
+
attr_reader :defined_traits, :declarations, :name, :registered_enums
|
|
5
5
|
|
|
6
6
|
def initialize(name, base_traits = [])
|
|
7
|
-
@name
|
|
8
|
-
@declarations
|
|
9
|
-
@callbacks
|
|
10
|
-
@defined_traits
|
|
11
|
-
@
|
|
12
|
-
@
|
|
7
|
+
@name = name
|
|
8
|
+
@declarations = DeclarationList.new(name)
|
|
9
|
+
@callbacks = []
|
|
10
|
+
@defined_traits = Set.new
|
|
11
|
+
@registered_enums = []
|
|
12
|
+
@to_create = nil
|
|
13
|
+
@base_traits = base_traits
|
|
13
14
|
@additional_traits = []
|
|
14
|
-
@constructor
|
|
15
|
-
@attributes
|
|
16
|
-
@compiled
|
|
15
|
+
@constructor = nil
|
|
16
|
+
@attributes = nil
|
|
17
|
+
@compiled = false
|
|
18
|
+
@expanded_enum_traits = false
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
delegate :declare_attribute, to: :declarations
|
|
@@ -43,13 +45,15 @@ module FactoryBot
|
|
|
43
45
|
aggregate_from_traits_and_self(:callbacks) { @callbacks }
|
|
44
46
|
end
|
|
45
47
|
|
|
46
|
-
def compile
|
|
48
|
+
def compile(klass = nil)
|
|
47
49
|
unless @compiled
|
|
50
|
+
expand_enum_traits(klass) unless klass.nil?
|
|
51
|
+
|
|
48
52
|
declarations.attributes
|
|
49
53
|
|
|
50
54
|
defined_traits.each do |defined_trait|
|
|
51
|
-
base_traits.each
|
|
52
|
-
additional_traits.each { |
|
|
55
|
+
base_traits.each { |bt| bt.define_trait defined_trait }
|
|
56
|
+
additional_traits.each { |at| at.define_trait defined_trait }
|
|
53
57
|
end
|
|
54
58
|
|
|
55
59
|
@compiled = true
|
|
@@ -81,6 +85,10 @@ module FactoryBot
|
|
|
81
85
|
@defined_traits.add(trait)
|
|
82
86
|
end
|
|
83
87
|
|
|
88
|
+
def register_enum(enum)
|
|
89
|
+
@registered_enums << enum
|
|
90
|
+
end
|
|
91
|
+
|
|
84
92
|
def define_constructor(&block)
|
|
85
93
|
@constructor = block
|
|
86
94
|
end
|
|
@@ -95,7 +103,6 @@ module FactoryBot
|
|
|
95
103
|
|
|
96
104
|
def callback(*names, &block)
|
|
97
105
|
names.each do |name|
|
|
98
|
-
FactoryBot::Internal.register_callback(name)
|
|
99
106
|
add_callback(Callback.new(name, block))
|
|
100
107
|
end
|
|
101
108
|
end
|
|
@@ -122,7 +129,7 @@ module FactoryBot
|
|
|
122
129
|
def initialize_copy(source)
|
|
123
130
|
super
|
|
124
131
|
@attributes = nil
|
|
125
|
-
@compiled
|
|
132
|
+
@compiled = false
|
|
126
133
|
@defined_traits_by_name = nil
|
|
127
134
|
end
|
|
128
135
|
|
|
@@ -132,8 +139,32 @@ module FactoryBot
|
|
|
132
139
|
[
|
|
133
140
|
base_traits.map(&method_name),
|
|
134
141
|
instance_exec(&block),
|
|
135
|
-
additional_traits.map(&method_name)
|
|
142
|
+
additional_traits.map(&method_name)
|
|
136
143
|
].flatten.compact
|
|
137
144
|
end
|
|
145
|
+
|
|
146
|
+
def expand_enum_traits(klass)
|
|
147
|
+
return if @expanded_enum_traits
|
|
148
|
+
|
|
149
|
+
if automatically_register_defined_enums?(klass)
|
|
150
|
+
automatically_register_defined_enums(klass)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
registered_enums.each do |enum|
|
|
154
|
+
traits = enum.build_traits(klass)
|
|
155
|
+
traits.each { |trait| define_trait(trait) }
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
@expanded_enum_traits = true
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def automatically_register_defined_enums(klass)
|
|
162
|
+
klass.defined_enums.each_key { |name| register_enum(Enum.new(name)) }
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def automatically_register_defined_enums?(klass)
|
|
166
|
+
FactoryBot.automatically_define_enum_traits &&
|
|
167
|
+
klass.respond_to?(:defined_enums)
|
|
168
|
+
end
|
|
138
169
|
end
|
|
139
170
|
end
|