fabrication 2.31.0 → 3.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3efaba7356d0a3fcade7fe08a68719f8d0f452bc8cd72a88e087c10434931745
4
- data.tar.gz: 1beb71f4903b74255a06c46ee6ca15e464d3ed6b0400a02ba01cd65cefd205a7
3
+ metadata.gz: 20a02618a5107ba5850de6da2bd58ae428d33d8163ab3c71f9233574780998df
4
+ data.tar.gz: 33bac0b9d796da2d94adf3a8eb8940ff8766c36c9435429a03a1da0dd1efb8ad
5
5
  SHA512:
6
- metadata.gz: 04bd08bc59c91ff463cac12869d0a4211b969f50635748e830842e62198c9f9ec7dad7bebbc1db32d6e65fd46d76559041da27c689d067d65835978ade6fb86d
7
- data.tar.gz: 6a4259285d0c8f8787df5a8a6d9dcfe823de65282a50873e06d0660b94bd3f0051a0bfd5e64f6fe6b809637782404646e55c0889a793fd9f70dd7b19ef43a70c
6
+ metadata.gz: e0d2aa56f7153981b3be287dde1204a1050b964e5bdba14314d7f7cda4d7af7a4960cb2670bd2c58b7615768fdea84c4dbd15da2d1db95b5b4371e86091b336d
7
+ data.tar.gz: a182aecb4c3d38e36cd0e8f282dfd575b7234427a15e7f575cdbc84ca090848f162de9becc0989cef3baaa76c986a946c467b53adb937c5011932af774735b25
data/lib/fabricate.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  class Fabricate
2
2
  def self.times(count, name, overrides = {}, &block)
3
- Array.new(count).map { Fabricate(name, overrides, &block) }
3
+ count.times.map { Fabricate(name, overrides, &block) }
4
4
  end
5
5
 
6
6
  def self.build_times(count, name, overrides = {}, &block)
7
- Array.new(count).map { Fabricate.build(name, overrides, &block) }
7
+ count.times.map { Fabricate.build(name, overrides, &block) }
8
8
  end
9
9
 
10
10
  def self.attributes_for_times(count, name, overrides = {}, &block)
11
- Array.new(count).map { Fabricate.attributes_for(name, overrides, &block) }
11
+ count.times.map { Fabricate.attributes_for(name, overrides, &block) }
12
12
  end
13
13
 
14
14
  def self.attributes_for(name, overrides = {}, &block)
@@ -24,19 +24,13 @@ class Fabricate
24
24
  def self.build(name, overrides = {}, &block)
25
25
  fail_if_initializing(name)
26
26
  schematic(name).build(overrides, &block).tap do |object|
27
- Fabrication::Config.notifiers.each do |notifier|
28
- notifier.call(name, object)
29
- end
27
+ Fabrication::Cucumber::Fabrications[name] = object if Fabrication::Config.register_with_steps?
30
28
  end
31
29
  end
32
30
 
33
31
  def self.create(name, overrides = {}, &block)
34
32
  fail_if_initializing(name)
35
- schematic(name).fabricate(overrides, &block).tap do |object|
36
- Fabrication::Config.notifiers.each do |notifier|
37
- notifier.call(name, object)
38
- end
39
- end
33
+ schematic(name).fabricate(overrides, &block)
40
34
  end
41
35
 
42
36
  def self.sequence(name = Fabrication::Sequencer::DEFAULT, start = nil, &block)
@@ -1,5 +1,3 @@
1
- require 'logger'
2
-
3
1
  module Fabrication
4
2
  module Config
5
3
  extend self
@@ -16,22 +14,14 @@ module Fabrication
16
14
  nil
17
15
  end
18
16
 
19
- attr_writer :logger, :sequence_start
20
-
21
- def logger
22
- @logger ||= Logger.new($stdout).tap do |logger|
23
- logger.level = Logger::WARN
24
- end
25
- end
26
-
27
17
  def fabricator_path
28
18
  @fabricator_path ||= ['test/fabricators', 'spec/fabricators']
29
19
  end
30
20
  alias fabricator_paths fabricator_path
31
21
 
32
22
  def fabricator_dir
33
- Support.log_deprecation('Fabrication::Config.fabricator_dir has been ' \
34
- 'replaced by Fabrication::Config.fabricator_path')
23
+ puts 'DEPRECATION WARNING: Fabrication::Config.fabricator_dir has been ' \
24
+ 'replaced by Fabrication::Config.fabricator_path'
35
25
  fabricator_path
36
26
  end
37
27
 
@@ -40,11 +30,13 @@ module Fabrication
40
30
  end
41
31
 
42
32
  def fabricator_dir=(folders)
43
- Support.log_deprecation('Fabrication::Config.fabricator_dir has been ' \
44
- 'replaced by Fabrication::Config.fabricator_path')
33
+ puts 'DEPRECATION WARNING: Fabrication::Config.fabricator_dir has been ' \
34
+ 'replaced by Fabrication::Config.fabricator_path'
45
35
  self.fabricator_path = folders
46
36
  end
47
37
 
38
+ attr_writer :sequence_start, :register_with_steps
39
+
48
40
  def sequence_start
49
41
  @sequence_start ||= 0
50
42
  end
@@ -58,6 +50,10 @@ module Fabrication
58
50
  end
59
51
  alias path_prefixes path_prefix
60
52
 
53
+ def register_with_steps?
54
+ @register_with_steps ||= nil
55
+ end
56
+
61
57
  def generators
62
58
  @generators ||= []
63
59
  end
@@ -73,26 +69,5 @@ module Fabrication
73
69
  def recursion_limit=(limit)
74
70
  @recursion_limit = limit
75
71
  end
76
-
77
- def register_with_steps=(value)
78
- Support.log_deprecation(
79
- 'Fabrication::Config.register_with_steps has been deprecated. ' \
80
- 'Please regenerate your cucumber steps with `rails g fabrication:cucumber_steps'
81
- )
82
-
83
- return unless value
84
-
85
- register_notifier do |name, object|
86
- Fabrication::Cucumber::Fabrications[name] = object
87
- end
88
- end
89
-
90
- def notifiers
91
- @notifiers ||= []
92
- end
93
-
94
- def register_notifier(&block)
95
- notifiers.push(block)
96
- end
97
72
  end
98
73
  end
@@ -1,5 +1,3 @@
1
- require 'singleton'
2
-
3
1
  module Fabrication
4
2
  module Cucumber
5
3
  class StepFabricator
@@ -22,7 +20,7 @@ module Fabrication
22
20
  end
23
21
 
24
22
  def n(count, attrs = {})
25
- Array.new(count).map { make(attrs) }.tap { |o| remember(o) }
23
+ count.times.map { make(attrs) }.tap { |o| remember(o) }
26
24
  end
27
25
 
28
26
  # rubocop:disable Naming/PredicateName
@@ -87,23 +85,17 @@ module Fabrication
87
85
  end
88
86
  end
89
87
 
90
- class Fabrications
91
- include Singleton
92
-
88
+ module Fabrications
93
89
  def self.fabrications
94
- instance.fabrications
90
+ @fabrications ||= {}
95
91
  end
96
92
 
97
93
  def self.[](fabricator)
98
- instance.fabrications[fabricator.to_sym]
94
+ fabrications[fabricator.to_sym]
99
95
  end
100
96
 
101
97
  def self.[]=(fabricator, fabrication)
102
- instance.fabrications[fabricator.to_sym] = fabrication
103
- end
104
-
105
- def fabrications
106
- @fabrications ||= {}
98
+ fabrications[fabricator.to_sym] = fabrication
107
99
  end
108
100
  end
109
101
  end
@@ -6,15 +6,15 @@ module Fabrication
6
6
  # so we can't assume because we have the ActiveRecord module that we also
7
7
  # have ActiveRecord::Base. Because defined? can return nil we ensure that nil
8
8
  # becomes false.
9
- (defined?(::ActiveRecord) && defined?(::ActiveRecord::Base) &&
10
- klass.ancestors.include?(::ActiveRecord::Base)) || false
9
+ defined?(::ActiveRecord) && defined?(::ActiveRecord::Base) &&
10
+ klass.ancestors.include?(::ActiveRecord::Base) || false
11
11
  end
12
12
 
13
13
  def build_instance
14
- self._instance = if resolved_class.respond_to?(:protected_attributes)
15
- resolved_class.new(_attributes, without_protection: true)
14
+ self._instance = if _klass.respond_to?(:protected_attributes)
15
+ _klass.new(_attributes, without_protection: true)
16
16
  else
17
- resolved_class.new(_attributes)
17
+ _klass.new(_attributes)
18
18
  end
19
19
  end
20
20
  end
@@ -1,7 +1,7 @@
1
1
  module Fabrication
2
2
  module Generator
3
3
  class Base
4
- def self.supports?(_resolved_class)
4
+ def self.supports?(_klass)
5
5
  true
6
6
  end
7
7
 
@@ -11,9 +11,6 @@ module Fabrication
11
11
  if callbacks[:initialize_with]
12
12
  build_instance_with_constructor_override(callbacks[:initialize_with])
13
13
  elsif callbacks[:on_init]
14
- Fabrication::Support.log_deprecation(
15
- 'The on_init callback has been replaced by initialize_with. Please see the documentation for usage'
16
- )
17
14
  build_instance_with_init_callback(callbacks[:on_init])
18
15
  else
19
16
  build_instance
@@ -22,29 +19,18 @@ module Fabrication
22
19
  _instance
23
20
  end
24
21
 
25
- def create(attributes = [], callbacks = {})
22
+ def create(attributes = [], callbacks = [])
26
23
  build(attributes, callbacks)
27
- execute_deprecated_callbacks(callbacks, :before_validation, :before_create)
28
- execute_deprecated_callbacks(callbacks, :after_validation, :before_create)
29
- execute_deprecated_callbacks(callbacks, :before_save, :before_create)
24
+ execute_callbacks(callbacks[:before_validation])
25
+ execute_callbacks(callbacks[:after_validation])
26
+ execute_callbacks(callbacks[:before_save])
30
27
  execute_callbacks(callbacks[:before_create])
31
28
  persist
32
29
  execute_callbacks(callbacks[:after_create])
33
- execute_deprecated_callbacks(callbacks, :after_save, :after_create)
30
+ execute_callbacks(callbacks[:after_save])
34
31
  _instance
35
32
  end
36
33
 
37
- def execute_deprecated_callbacks(callbacks, callback_type, replacement_callback)
38
- if callbacks[callback_type]
39
- Fabrication::Support.log_deprecation(
40
- "Using #{callback_type} is deprecated but you can replace it " \
41
- "with #{replacement_callback} with the same result."
42
- )
43
- end
44
-
45
- execute_callbacks(callbacks[callback_type])
46
- end
47
-
48
34
  def execute_callbacks(callbacks)
49
35
  callbacks&.each { |callback| _instance.instance_exec(_instance, _transient_attributes, &callback) }
50
36
  end
@@ -68,17 +54,17 @@ module Fabrication
68
54
  end
69
55
 
70
56
  def build_instance_with_constructor_override(callback)
71
- self._instance = instance_exec(_transient_attributes, &callback)
57
+ self._instance = instance_eval(&callback)
72
58
  set_attributes
73
59
  end
74
60
 
75
61
  def build_instance_with_init_callback(callback)
76
- self._instance = resolved_class.new(*callback.call(_transient_attributes))
62
+ self._instance = _klass.new(*callback.call)
77
63
  set_attributes
78
64
  end
79
65
 
80
66
  def build_instance
81
- self._instance = resolved_class.new
67
+ self._instance = _klass.new
82
68
  set_attributes
83
69
  end
84
70
 
@@ -88,8 +74,8 @@ module Fabrication
88
74
  end
89
75
  end
90
76
 
91
- def initialize(resolved_class)
92
- self.resolved_class = resolved_class
77
+ def initialize(klass)
78
+ self._klass = klass
93
79
  end
94
80
 
95
81
  def respond_to_missing?(method_name, _include_private = false)
@@ -100,36 +86,25 @@ module Fabrication
100
86
  _attributes.fetch(method_name) { super }
101
87
  end
102
88
 
103
- def _klass
104
- Fabrication::Support.log_deprecation(
105
- 'The `_klass` method in fabricator definitions has been replaced by `resolved_class`'
106
- )
107
-
108
- resolved_class
109
- end
110
-
111
89
  protected
112
90
 
113
- attr_accessor :resolved_class, :_instance
91
+ attr_accessor :_klass, :_instance, :_transient_attributes
114
92
 
115
93
  def _attributes
116
94
  @_attributes ||= {}
117
95
  end
118
96
 
119
- def _transient_attributes
120
- @_transient_attributes ||= {}
121
- end
122
-
123
97
  def persist
124
98
  _instance.save! if _instance.respond_to?(:save!)
125
99
  end
126
100
 
127
101
  def process_attributes(attributes)
102
+ self._transient_attributes = ({})
128
103
  attributes.each do |attribute|
129
104
  _attributes[attribute.name] = attribute.processed_value(_attributes)
130
105
  _transient_attributes[attribute.name] = _attributes[attribute.name] if attribute.transient?
131
106
  end
132
- _attributes.reject! { |k| _transient_attributes.key?(k) }
107
+ _attributes.reject! { |k| _transient_attributes.keys.include?(k) }
133
108
  end
134
109
  end
135
110
  end
@@ -6,10 +6,10 @@ module Fabrication
6
6
  end
7
7
 
8
8
  def build_instance
9
- self._instance = if resolved_class.respond_to?(:protected_attributes)
10
- resolved_class.new(_attributes, without_protection: true)
9
+ self._instance = if _klass.respond_to?(:protected_attributes)
10
+ _klass.new(_attributes, without_protection: true)
11
11
  else
12
- resolved_class.new(_attributes)
12
+ _klass.new(_attributes)
13
13
  end
14
14
  end
15
15
  end
@@ -7,15 +7,18 @@ module Fabrication
7
7
  end
8
8
 
9
9
  def self.supports?(klass)
10
- defined?(::Sequel) && defined?(::Sequel::Model) && klass.ancestors.include?(::Sequel::Model)
10
+ defined?(::Sequel) && klass.ancestors.include?(::Sequel::Model)
11
11
  end
12
12
 
13
13
  def set_attributes
14
- _attributes.each do |field_name, value|
15
- if value.is_a?(Array) && (association = association_for(field_name))
16
- set_association(association, field_name, value)
14
+ _attributes.each do |key, value|
15
+ if (reflection = _klass.association_reflections[key]) && value.is_a?(Array)
16
+ _instance.associations[key] = value
17
+ _instance.after_save_hook do
18
+ value.each { |o| _instance.send(reflection.add_method, o) }
19
+ end
17
20
  else
18
- set_attribute(field_name, value)
21
+ _instance.send("#{key}=", value)
19
22
  end
20
23
  end
21
24
  end
@@ -26,23 +29,8 @@ module Fabrication
26
29
 
27
30
  private
28
31
 
29
- def association_for(field_name)
30
- resolved_class.association_reflections[field_name]
31
- end
32
-
33
- def set_attribute(field_name, value)
34
- _instance.send("#{field_name}=", value)
35
- end
36
-
37
- def set_association(association, field_name, value)
38
- _instance.associations[field_name] = value
39
- _instance.after_save_hook do
40
- value.each { |o| _instance.send(association.add_method, o) }
41
- end
42
- end
43
-
44
32
  def load_instance_hooks
45
- klass = resolved_class.respond_to?(:cti_base_model) ? resolved_class.cti_models.first : resolved_class
33
+ klass = _klass.respond_to?(:cti_base_model) ? _klass.cti_models.first : _klass
46
34
  klass.plugin :instance_hooks unless klass.new.respond_to? :after_save_hook
47
35
  end
48
36
  end
@@ -43,8 +43,8 @@ module Fabrication
43
43
 
44
44
  private
45
45
 
46
- def execute(...)
47
- Fabrication::Schematic::Runner.new(klass).instance_exec(...)
46
+ def execute(*args, &block)
47
+ Fabrication::Schematic::Runner.new(klass).instance_exec(*args, &block)
48
48
  end
49
49
 
50
50
  def process_count
@@ -3,7 +3,6 @@ module Fabrication
3
3
  class Definition
4
4
  GENERATORS = [
5
5
  Fabrication::Generator::ActiveRecord,
6
- Fabrication::Generator::DataMapper,
7
6
  Fabrication::Generator::Sequel,
8
7
  Fabrication::Generator::Mongoid,
9
8
  Fabrication::Generator::Base
@@ -18,7 +17,7 @@ module Fabrication
18
17
  end
19
18
 
20
19
  def process_block(&block)
21
- Fabrication::Schematic::Evaluator.new.process(self, &block) if block
20
+ Fabrication::Schematic::Evaluator.new.process(self, &block) if block_given?
22
21
  end
23
22
 
24
23
  def attribute(name)
@@ -55,16 +55,14 @@ module Fabrication
55
55
  def load_definitions
56
56
  preinitialize
57
57
  Fabrication::Config.path_prefixes.each do |prefix|
58
- Fabrication::Config.fabricator_paths.each do |path|
59
- if File.file?(path)
60
- load path
61
- else
62
- Dir.glob(File.join(prefix.to_s, path, '**', '*.rb')).each do |file|
63
- load file
64
- end
58
+ Fabrication::Config.fabricator_paths.each do |folder|
59
+ Dir.glob(File.join(prefix.to_s, folder, '**', '*.rb')).sort.each do |file|
60
+ load file
65
61
  end
66
62
  end
67
63
  end
64
+ rescue StandardError => e
65
+ raise e
68
66
  ensure
69
67
  freeze
70
68
  end
@@ -1,40 +1,27 @@
1
- require 'singleton'
2
-
3
1
  module Fabrication
4
2
  class Sequencer
5
- include Singleton
6
-
7
3
  DEFAULT = :_default
8
4
 
9
5
  def self.sequence(name = DEFAULT, start = nil, &block)
10
- instance.sequence(name, start, &block)
11
- end
12
-
13
- def self.clear
14
- instance.sequences.clear
15
- instance.sequence_blocks.clear
16
- end
17
-
18
- def sequence(name = DEFAULT, start = nil, &block)
19
6
  idx = sequences[name] ||= start || Fabrication::Config.sequence_start
20
- if block
7
+ if block_given?
21
8
  sequence_blocks[name] = block.to_proc
22
9
  else
23
10
  sequence_blocks[name] ||= ->(i) { i }
24
11
  end.call(idx).tap do
25
- sequences[name] = idx.succ
12
+ sequences[name] += 1
26
13
  end
27
14
  end
28
15
 
29
- def sequences
16
+ def self.sequences
30
17
  @sequences ||= {}
31
18
  end
32
19
 
33
- def sequence_blocks
20
+ def self.sequence_blocks
34
21
  @sequence_blocks ||= {}
35
22
  end
36
23
 
37
- def reset
24
+ def self.reset
38
25
  Fabrication::Config.sequence_start = nil
39
26
  @sequences = nil
40
27
  @sequence_blocks = nil
@@ -1,68 +1,73 @@
1
1
  module Fabrication
2
- module Support
3
- extend self
4
-
5
- def fabricatable?(name)
6
- Fabrication.manager[name] || class_for(name)
7
- end
2
+ class Support
3
+ class << self
4
+ def fabricatable?(name)
5
+ Fabrication.manager[name] || class_for(name)
6
+ end
8
7
 
9
- def log_deprecation(message)
10
- Config.logger.warn("[DEPRECATION][fabrication] #{message}")
11
- end
8
+ def class_for(class_or_to_s)
9
+ class_name = variable_name_to_class_name(class_or_to_s)
10
+ constantize(class_name)
11
+ rescue NameError => e
12
+ raise Fabrication::UnfabricatableError.new(class_or_to_s, e)
13
+ end
12
14
 
13
- def class_for(class_or_to_s)
14
- constantize(variable_name_to_class_name(class_or_to_s))
15
- rescue NameError => e
16
- raise Fabrication::UnfabricatableError.new(class_or_to_s, e)
17
- end
15
+ def constantize(camel_cased_word)
16
+ names = camel_cased_word.split('::')
17
+ Object.const_get(camel_cased_word) if names.empty?
18
+ names.shift if names.size > 1 && names.first.empty?
19
+ names.inject(Object) do |constant, name|
20
+ if constant == Object
21
+ constant.const_get(name)
22
+ else
23
+ candidate = constant.const_get(name)
24
+ next candidate if constant.const_defined?(name, false)
25
+ next candidate unless Object.const_defined?(name)
18
26
 
19
- def constantize(camel_cased_word)
20
- return camel_cased_word if camel_cased_word.is_a?(Class)
27
+ constant = constant.ancestors.inject do |const, ancestor|
28
+ break const if ancestor == Object
29
+ break ancestor if ancestor.const_defined?(name, false)
21
30
 
22
- camel_cased_word.to_s.split('::').reduce(Object) do |resolved_class, class_part|
23
- resolved_class.const_get(class_part)
31
+ const
32
+ end
33
+ constant.const_get(name, false)
34
+ end
35
+ end
24
36
  end
25
- end
26
-
27
- def extract_options!(args)
28
- args.last.is_a?(::Hash) ? args.pop : {}
29
- end
30
-
31
- def variable_name_to_class_name(name)
32
- name_string = name.to_s
33
37
 
34
- if name_string.respond_to?(:camelize)
35
- name_string.camelize
36
- else
37
- name_string
38
- .gsub(%r{/(.?)}) { "::#{Regexp.last_match(1).upcase}" }
39
- .gsub(/(?:^|_)(.)/) { Regexp.last_match(1).upcase }
38
+ def extract_options!(args)
39
+ args.last.is_a?(::Hash) ? args.pop : {}
40
40
  end
41
- end
42
41
 
43
- def find_definitions
44
- log_deprecation('Fabrication::Support.find_definitions has been replaced by ' \
45
- 'Fabrication.manager.load_definitions and will be removed in 3.0.0.')
42
+ def variable_name_to_class_name(name)
43
+ name.to_s.gsub(%r{/(.?)}) do
44
+ "::#{Regexp.last_match(1).upcase}"
45
+ end.gsub(/(?:^|_)(.)/) { Regexp.last_match(1).upcase }
46
+ end
46
47
 
47
- Fabrication.manager.load_definitions
48
- end
48
+ def find_definitions
49
+ puts 'DEPRECATION WARNING: Fabrication::Support.find_definitions has been replaced ' \
50
+ 'by Fabrication.manager.load_definitions and will be removed in 3.0.0.'
51
+ Fabrication.manager.load_definitions
52
+ end
49
53
 
50
- def hash_class
51
- @hash_class ||= defined?(HashWithIndifferentAccess) ? HashWithIndifferentAccess : Hash
52
- end
54
+ def hash_class
55
+ @hash_class ||= defined?(HashWithIndifferentAccess) ? HashWithIndifferentAccess : Hash
56
+ end
53
57
 
54
- def singularize(string)
55
- string.singularize
56
- rescue StandardError
57
- string.end_with?('s') ? string[0..-2] : string
58
- end
58
+ def singularize(string)
59
+ string.singularize
60
+ rescue StandardError
61
+ string.end_with?('s') ? string[0..-2] : string
62
+ end
59
63
 
60
- def underscore(string)
61
- string.gsub(/::/, '/')
62
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
63
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
64
- .tr('-', '_')
65
- .downcase
64
+ def underscore(string)
65
+ string.gsub(/::/, '/')
66
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
67
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
68
+ .tr('-', '_')
69
+ .downcase
70
+ end
66
71
  end
67
72
  end
68
73
  end
@@ -1,39 +1,37 @@
1
- require 'singleton'
2
-
3
1
  module Fabrication
4
2
  class Transform
5
- include Singleton
6
-
7
3
  class << self
8
4
  def apply_to(schematic, attributes_hash)
9
5
  Fabrication.manager.load_definitions if Fabrication.manager.empty?
10
- attributes_hash.inject({}) { |h, (k, v)| h.update(k => instance.apply_transform(schematic, k, v)) }
6
+ attributes_hash.inject({}) { |h, (k, v)| h.update(k => apply_transform(schematic, k, v)) }
11
7
  end
12
8
 
13
9
  def clear_all
14
- instance.transforms.clear
15
- instance.overrides.clear
10
+ @transforms = nil
11
+ @overrides = nil
16
12
  end
17
13
 
18
14
  def define(attribute, transform)
19
- instance.transforms[attribute] = transform
15
+ transforms[attribute] = transform
20
16
  end
21
17
 
22
18
  def only_for(schematic, attribute, transform)
23
- instance.overrides[schematic] = (instance.overrides[schematic] || {}).merge!(attribute => transform)
19
+ overrides[schematic] = (overrides[schematic] || {}).merge!(attribute => transform)
24
20
  end
25
- end
26
21
 
27
- def overrides
28
- @overrides ||= {}
29
- end
22
+ private
30
23
 
31
- def apply_transform(schematic, attribute, value)
32
- overrides.fetch(schematic, transforms)[attribute].call(value)
33
- end
24
+ def overrides
25
+ @overrides ||= {}
26
+ end
27
+
28
+ def apply_transform(schematic, attribute, value)
29
+ overrides.fetch(schematic, transforms)[attribute].call(value)
30
+ end
34
31
 
35
- def transforms
36
- @transforms ||= Hash.new(->(value) { value })
32
+ def transforms
33
+ @transforms ||= Hash.new(->(value) { value })
34
+ end
37
35
  end
38
36
  end
39
37
  end
@@ -1,3 +1,3 @@
1
1
  module Fabrication
2
- VERSION = '2.31.0'.freeze
2
+ VERSION = '3.0.0.beta.1'.freeze
3
3
  end
data/lib/fabrication.rb CHANGED
@@ -31,7 +31,7 @@ module Fabrication
31
31
 
32
32
  module Generator
33
33
  autoload :ActiveRecord, 'fabrication/generator/active_record'
34
- autoload :DataMapper, 'fabrication/generator/data_mapper'
34
+ autoload :ActiveRecord4, 'fabrication/generator/active_record_4'
35
35
  autoload :Mongoid, 'fabrication/generator/mongoid'
36
36
  autoload :Sequel, 'fabrication/generator/sequel'
37
37
  autoload :Base, 'fabrication/generator/base'
@@ -39,7 +39,7 @@ module Fabrication
39
39
 
40
40
  def self.clear_definitions
41
41
  manager.clear
42
- Sequencer.clear
42
+ Sequencer.sequences.clear
43
43
  end
44
44
 
45
45
  def self.configure(&block)
@@ -47,12 +47,12 @@ module Fabrication
47
47
  end
48
48
 
49
49
  def self.manager
50
- Fabrication::Schematic::Manager.instance
50
+ @manager ||= Fabrication::Schematic::Manager.instance
51
51
  end
52
52
 
53
53
  def self.schematics
54
- Support.log_deprecation('Fabrication.schematics has been replaced by ' \
55
- 'Fabrication.manager and will be removed in 3.0.0.')
54
+ puts 'DEPRECATION WARNING: Fabrication.schematics has been replaced by '\
55
+ 'Fabrication.manager and will be removed in 3.0.0.'
56
56
  manager
57
57
  end
58
58
  end
@@ -63,7 +63,9 @@ def Fabricator(name, options = {}, &block)
63
63
  end
64
64
 
65
65
  def Fabricate(name, overrides = {}, &block)
66
- Fabricate.create(name, overrides, &block)
66
+ Fabricate.create(name, overrides, &block).tap do |object|
67
+ Fabrication::Cucumber::Fabrications[name] = object if Fabrication::Config.register_with_steps?
68
+ end
67
69
  end
68
70
  # rubocop:enable Naming/MethodName
69
71
 
@@ -8,7 +8,7 @@ module Fabrication
8
8
  end
9
9
 
10
10
  def self.source_root
11
- File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
11
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
12
12
  end
13
13
  end
14
14
  end
@@ -1,8 +1,6 @@
1
1
  World(FabricationMethods)
2
2
 
3
- Fabrication::Config.register_notifier do |name, object|
4
- Fabrication::Cucumber::Fabrications[name] = object
5
- end
3
+ Fabrication::Config.register_with_steps = true
6
4
 
7
5
  def with_ivars(fabricator)
8
6
  @they = yield fabricator
@@ -19,7 +19,7 @@ module Fabrication
19
19
  end
20
20
 
21
21
  def self.source_root
22
- File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
22
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
23
23
  end
24
24
 
25
25
  private
@@ -33,8 +33,6 @@ module Fabrication
33
33
  end
34
34
  rescue StandardError
35
35
  # no table? no problem!
36
- rescue LoadError
37
- # cannot find model file. This means it was already destroyed, so just continue.
38
36
  end
39
37
  end
40
38
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fabrication
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.31.0
4
+ version: 3.0.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Elliott
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-27 00:00:00.000000000 Z
11
+ date: 2021-04-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Fabrication is an object generation framework for ActiveRecord, Mongoid,
14
- DataMapper, Sequel, or any other Ruby object.
14
+ Sequel, or any other Ruby object.
15
15
  email:
16
16
  - paul@codingfrontier.com
17
17
  executables: []
@@ -32,7 +32,6 @@ files:
32
32
  - lib/fabrication/errors/unknown_fabricator_error.rb
33
33
  - lib/fabrication/generator/active_record.rb
34
34
  - lib/fabrication/generator/base.rb
35
- - lib/fabrication/generator/data_mapper.rb
36
35
  - lib/fabrication/generator/mongoid.rb
37
36
  - lib/fabrication/generator/sequel.rb
38
37
  - lib/fabrication/railtie.rb
@@ -54,14 +53,7 @@ files:
54
53
  homepage: http://fabricationgem.org
55
54
  licenses:
56
55
  - MIT
57
- metadata:
58
- bug_tracker_uri: https://gitlab.com/fabrication-gem/fabrication/-/issues
59
- changelog_uri: https://gitlab.com/fabrication-gem/fabrication/-/blob/master/Changelog.markdown
60
- documentation_uri: https://fabricationgem.org
61
- homepage_uri: https://fabricationgem.org
62
- mailing_list_uri: https://groups.google.com/g/fabricationgem
63
- rubygems_mfa_required: 'true'
64
- source_code_uri: https://gitlab.com/fabrication-gem/fabrication
56
+ metadata: {}
65
57
  post_install_message:
66
58
  rdoc_options: []
67
59
  require_paths:
@@ -70,15 +62,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
62
  requirements:
71
63
  - - ">="
72
64
  - !ruby/object:Gem::Version
73
- version: 3.0.0
65
+ version: 2.5.0
74
66
  required_rubygems_version: !ruby/object:Gem::Requirement
75
67
  requirements:
76
- - - ">="
68
+ - - ">"
77
69
  - !ruby/object:Gem::Version
78
- version: '0'
70
+ version: 1.3.1
79
71
  requirements: []
80
- rubygems_version: 3.4.10
72
+ rubygems_version: 3.1.4
81
73
  signing_key:
82
74
  specification_version: 4
83
- summary: Generates object instances for test suites, seed files, etc.
75
+ summary: Implementing the factory pattern in Ruby so you don't have to.
84
76
  test_files: []
@@ -1,19 +0,0 @@
1
- module Fabrication
2
- module Generator
3
- class DataMapper < Fabrication::Generator::Base
4
- def self.supports?(klass)
5
- defined?(::DataMapper) && klass.ancestors.include?(::DataMapper::Hook)
6
- end
7
-
8
- def build_instance
9
- self._instance = resolved_class.new(_attributes)
10
- end
11
-
12
- protected
13
-
14
- def persist
15
- _instance.save
16
- end
17
- end
18
- end
19
- end