fabrication 1.4.1 → 2.0.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.
data/lib/fabrication.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  module Fabrication
2
-
3
2
  autoload :DuplicateFabricatorError, 'fabrication/errors/duplicate_fabricator_error'
4
3
  autoload :UnfabricatableError, 'fabrication/errors/unfabricatable_error'
5
4
  autoload :UnknownFabricatorError, 'fabrication/errors/unknown_fabricator_error'
@@ -17,9 +16,7 @@ module Fabrication
17
16
  autoload :Support, 'fabrication/support'
18
17
  autoload :Transform, 'fabrication/transform'
19
18
 
20
- module Cucumber
21
- autoload :StepFabricator, 'fabrication/cucumber/step_fabricator'
22
- end
19
+ autoload :Cucumber, 'fabrication/cucumber/step_fabricator'
23
20
 
24
21
  module Generator
25
22
  autoload :ActiveRecord, 'fabrication/generator/active_record'
@@ -38,18 +35,9 @@ module Fabrication
38
35
  Fabrication::Config.configure(&block)
39
36
  end
40
37
 
41
- def self.initializing=(value)
42
- @initializing = value
43
- end
44
-
45
- def self.initializing?
46
- @initializing
47
- end
48
-
49
38
  def self.schematics
50
39
  @schematics ||= Fabrication::Schematic::Manager.new
51
40
  end
52
-
53
41
  end
54
42
 
55
43
  def Fabricator(name, options={}, &block)
@@ -57,30 +45,26 @@ def Fabricator(name, options={}, &block)
57
45
  end
58
46
 
59
47
  def Fabricate(name, overrides={}, &block)
60
- raise Fabrication::MisplacedFabricateError.new(name) if Fabrication.initializing?
61
- Fabrication::Fabricator.generate(name, {
62
- :save => true
63
- }, overrides, &block)
48
+ raise Fabrication::MisplacedFabricateError.new(name) if Fabrication.schematics.initializing?
49
+ Fabrication::Fabricator.fabricate(name, overrides, &block).tap do |object|
50
+ Fabrication::Cucumber::Fabrications[name] = object if Fabrication::Config.register_with_steps?
51
+ end
64
52
  end
65
53
 
66
54
  class Fabricate
67
-
68
- def self.attributes_for(name, options={}, &block)
69
- Fabrication::Fabricator.generate(name, {
70
- :save => false, :attributes => true
71
- }, options, &block)
55
+ def self.attributes_for(name, overrides={}, &block)
56
+ Fabrication::Fabricator.to_attributes(name, overrides, &block)
72
57
  end
73
58
 
74
- def self.build(name, options={}, &block)
75
- Fabrication::Fabricator.generate(name, {
76
- :save => false
77
- }, options, &block)
59
+ def self.build(name, overrides={}, &block)
60
+ Fabrication::Fabricator.build(name, overrides, &block).tap do |object|
61
+ Fabrication::Cucumber::Fabrications[name] = object if Fabrication::Config.register_with_steps?
62
+ end
78
63
  end
79
64
 
80
65
  def self.sequence(name=Fabrication::Sequencer::DEFAULT, start=0, &block)
81
66
  Fabrication::Sequencer.sequence(name, start, &block)
82
67
  end
83
-
84
68
  end
85
69
 
86
70
  module FabricationMethods
@@ -6,23 +6,38 @@ module Fabrication
6
6
  yield self
7
7
  end
8
8
 
9
- def fabricator_dir
10
- OPTIONS[:fabricator_dir]
9
+ def fabricator_path
10
+ OPTIONS[:fabricator_path]
11
11
  end
12
+ alias fabricator_dir fabricator_path
12
13
 
13
- def fabricator_dir=(folders)
14
- OPTIONS[:fabricator_dir] = (Array.new << folders).flatten
14
+ def fabricator_path=(folders)
15
+ OPTIONS[:fabricator_path] = (Array.new << folders).flatten
15
16
  end
17
+ alias fabricator_dir= fabricator_path=
16
18
 
17
19
  def reset_defaults
18
20
  OPTIONS.clear
19
21
  OPTIONS.merge!(DEFAULTS)
20
22
  end
21
23
 
24
+ def active_support?
25
+ @active_support ||= defined?(ActiveSupport)
26
+ end
27
+
28
+ def register_with_steps?
29
+ OPTIONS[:register_with_steps]
30
+ end
31
+
32
+ def register_with_steps=(register)
33
+ OPTIONS[:register_with_steps] = register
34
+ end
35
+
22
36
  private
23
37
 
24
38
  DEFAULTS = {
25
- :fabricator_dir => ['test/fabricators', 'spec/fabricators']
39
+ fabricator_path: ['test/fabricators', 'spec/fabricators'],
40
+ register_with_steps: false
26
41
  }
27
42
  OPTIONS = {}.merge!(DEFAULTS)
28
43
  end
@@ -54,7 +54,9 @@ module Fabrication
54
54
  end
55
55
 
56
56
  def schematic
57
- Fabrication.schematics[@fabricator]
57
+ Fabrication.schematics[@fabricator].tap do |schematic|
58
+ raise Fabrication::UnknownFabricatorError, "No Fabricator defined for '#{@model}'" unless schematic
59
+ end
58
60
  end
59
61
 
60
62
  def dehumanize(string)
@@ -1,10 +1,24 @@
1
1
  class Fabrication::Fabricator
2
2
 
3
- def self.generate(name, options={}, overrides={}, &block)
3
+ def self.build(name, overrides={}, &block)
4
+ schematic(name).build(overrides, &block)
5
+ end
6
+
7
+ def self.fabricate(name, overrides={}, &block)
8
+ schematic(name).fabricate(overrides, &block)
9
+ end
10
+
11
+ def self.to_attributes(name, overrides={}, &block)
12
+ schematic(name).to_attributes(overrides, &block)
13
+ end
14
+
15
+ private
16
+
17
+ def self.schematic(name)
4
18
  Fabrication::Support.find_definitions if Fabrication.schematics.empty?
5
- schematic = Fabrication.schematics[name]
6
- raise Fabrication::UnknownFabricatorError, "No Fabricator defined for '#{name}'" unless schematic
7
- schematic.generate(options, overrides, &block)
19
+ Fabrication.schematics[name].tap do |schematic|
20
+ raise Fabrication::UnknownFabricatorError, "No Fabricator defined for '#{name}'" unless schematic
21
+ end
8
22
  end
9
23
 
10
24
  end
@@ -4,12 +4,8 @@ class Fabrication::Generator::ActiveRecord < Fabrication::Generator::Base
4
4
  defined?(ActiveRecord) && klass.ancestors.include?(ActiveRecord::Base)
5
5
  end
6
6
 
7
- def associations
8
- @associations ||= __klass.reflections.keys
9
- end
10
-
11
- def association?(method_name)
12
- associations.include?(method_name.to_sym)
7
+ def build_instance
8
+ self.__instance = __klass.new(__attributes)
13
9
  end
14
10
 
15
11
  end
@@ -2,59 +2,61 @@ class Fabrication::Generator::Base
2
2
 
3
3
  def self.supports?(__klass); true end
4
4
 
5
- def generate(options={:save => true}, attributes=[], callbacks={})
5
+ def build(attributes=[], callbacks={})
6
+ process_attributes(attributes)
7
+
6
8
  if callbacks[:on_init]
7
- self.__instance = __klass.new(*callbacks[:on_init].call)
9
+ build_instance_with_init_callback(callbacks[:on_init])
8
10
  else
9
- self.__instance = __klass.new
11
+ build_instance
10
12
  end
11
13
 
12
- process_attributes(attributes)
13
-
14
14
  callbacks[:after_build].each { |callback| callback.call(__instance) } if callbacks[:after_build]
15
- after_generation(options)
16
- callbacks[:after_create].each { |callback| callback.call(__instance) } if callbacks[:after_create] && options[:save]
17
15
 
18
16
  __instance
19
17
  end
20
18
 
19
+ def create(attributes=[], callbacks=[])
20
+ build(attributes, callbacks)
21
+ persist
22
+ callbacks[:after_create].each { |callback| callback.call(__instance) } if callbacks[:after_create]
23
+ __instance
24
+ end
25
+
26
+ def to_hash(attributes=[], callbacks=[])
27
+ process_attributes(attributes)
28
+ (Fabrication::Config.active_support? ? HashWithIndifferentAccess.new : {}).tap do |hash|
29
+ __attributes.map do |name, value|
30
+ if value && value.respond_to?(:id)
31
+ hash["#{name}_id"] = value.id
32
+ else
33
+ hash[name] = value
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def build_instance_with_init_callback(callback)
40
+ self.__instance = __klass.new(*callback.call)
41
+ __attributes.each do |k,v|
42
+ __instance.send("#{k}=", v)
43
+ end
44
+ end
45
+
46
+ def build_instance
47
+ self.__instance = __klass.new
48
+ __attributes.each do |k,v|
49
+ __instance.send("#{k}=", v)
50
+ end
51
+ end
52
+
21
53
  def initialize(klass)
22
54
  self.__klass = klass
23
55
  end
24
56
 
25
- def association?(method_name); false end
26
-
27
57
  def method_missing(method_name, *args, &block)
28
58
  if block_given?
29
- options = args.first || {}
30
- if !options[:force] && association?(method_name)
31
- method_name = method_name.to_s
32
- count = options[:count] || 0
33
-
34
- # copy the original getter
35
- __instance.instance_variable_set("@__#{method_name}_original", __instance.method(method_name))
36
-
37
- # store the block for lazy generation
38
- __instance.instance_variable_set("@__#{method_name}_block", block)
39
-
40
- # redefine the getter
41
- __instance.instance_eval %<
42
- def #{method_name}
43
- original_value = @__#{method_name}_original.call
44
- if @__#{method_name}_block
45
- if #{count} \>= 1
46
- original_value = #{method_name}= (1..#{count}).map { |i| @__#{method_name}_block.call(self, i) }
47
- else
48
- original_value = #{method_name}= @__#{method_name}_block.call(self)
49
- end
50
- @__#{method_name}_block = nil
51
- end
52
- original_value
53
- end
54
- >
55
- else
56
- assign(method_name, options, &block)
57
- end
59
+ assign(method_name, args.first || {}, &block)
58
60
  else
59
61
  assign(method_name, {}, args.first)
60
62
  end
@@ -64,31 +66,48 @@ class Fabrication::Generator::Base
64
66
 
65
67
  attr_accessor :__klass, :__instance
66
68
 
67
- def after_generation(options)
68
- __instance.save! if options[:save] && __instance.respond_to?(:save!)
69
+ def __attributes
70
+ @__attributes ||= {}
71
+ end
72
+
73
+ def persist
74
+ __instance.save! if __instance.respond_to?(:save!)
69
75
  end
70
76
 
71
- def assign(method_name, options, raw_value=nil)
77
+ def assign(method_name, options, value=nil, &block)
72
78
  if options.has_key?(:count)
73
- value = (1..options[:count]).map do |i|
74
- block_given? ? yield(__instance, i) : raw_value
75
- end
79
+ assign_collection(method_name, options[:count], value, &block)
76
80
  else
77
- value = block_given? ? yield(__instance) : raw_value
81
+ assign_field(method_name, value, &block)
78
82
  end
79
- __instance.send("#{method_name}=", value)
83
+ end
84
+
85
+ def assign_field(field_name, value, &block)
86
+ __attributes[field_name] = block_given? ? yield(__attributes) : value
87
+ end
88
+
89
+ def assign_collection(field_name, count, value, &block)
90
+ __attributes[field_name] = block_given? ?
91
+ (1..count).map { |i| yield(__attributes, i) } :
92
+ value * count
80
93
  end
81
94
 
82
95
  def post_initialize; end
83
96
 
84
97
  def process_attributes(attributes)
85
98
  attributes.each do |attribute|
99
+ __transient_fields << attribute.name if attribute.transient?
86
100
  if Proc === attribute.value
87
101
  method_missing(attribute.name, attribute.params, &attribute.value)
88
102
  else
89
103
  method_missing(attribute.name, attribute.value)
90
104
  end
91
105
  end
106
+ __attributes.reject! { |k| __transient_fields.include?(k) }
107
+ end
108
+
109
+ def __transient_fields
110
+ @__transient_fields ||= []
92
111
  end
93
112
 
94
113
  end
@@ -1,14 +1,16 @@
1
1
  class Fabrication::Generator::DataMapper < Fabrication::Generator::Base
2
2
 
3
- class << self
4
- def supports?(klass)
5
- defined?(DataMapper) && klass.ancestors.include?(DataMapper::Hook)
6
- end
3
+ def self.supports?(klass)
4
+ defined?(DataMapper) && klass.ancestors.include?(DataMapper::Hook)
5
+ end
6
+
7
+ def build_instance
8
+ self.__instance = __klass.new(__attributes)
7
9
  end
8
10
 
9
11
  protected
10
12
 
11
- def after_generation(options)
12
- __instance.save if options[:save] && __instance.respond_to?(:save)
13
+ def persist
14
+ __instance.save
13
15
  end
14
16
  end
@@ -1,21 +1,11 @@
1
1
  class Fabrication::Generator::Mongoid < Fabrication::Generator::Base
2
+
2
3
  def self.supports?(klass)
3
4
  defined?(Mongoid) && klass.ancestors.include?(Mongoid::Document)
4
5
  end
5
6
 
6
- def assign(method_name, options, raw_value=nil)
7
- if options.has_key?(:count)
8
- value = (1..options[:count]).map do |i|
9
- block_given? ? yield(__instance, i) : raw_value
10
- end
11
- else
12
- value = block_given? ? yield(__instance) : raw_value
13
- end
14
-
15
- if Mongoid.allow_dynamic_fields && !__instance.respond_to?("#{method_name}=")
16
- __instance[method_name] = value
17
- else
18
- __instance.send("#{method_name}=", value)
19
- end
7
+ def build_instance
8
+ self.__instance = __klass.new(__attributes)
20
9
  end
10
+
21
11
  end
@@ -4,8 +4,12 @@ class Fabrication::Generator::Sequel < Fabrication::Generator::Base
4
4
  defined?(Sequel) && klass.ancestors.include?(Sequel::Model)
5
5
  end
6
6
 
7
- def after_generation(options)
8
- __instance.save if options[:save]
7
+ def build_instance
8
+ self.__instance = __klass.new(__attributes)
9
+ end
10
+
11
+ def persist
12
+ __instance.save
9
13
  end
10
14
 
11
15
  end
@@ -2,10 +2,22 @@ class Fabrication::Schematic::Attribute
2
2
 
3
3
  attr_accessor :name, :params, :value
4
4
 
5
- def initialize(name, params, value)
5
+ def initialize(name, value, params={}, &block)
6
6
  self.name = name
7
7
  self.params = params
8
- self.value = value
8
+ self.value = value.nil? ? block : value
9
+ end
10
+
11
+ def params
12
+ @params ||= {}
13
+ end
14
+
15
+ def transient!
16
+ params[:transient] = true
17
+ end
18
+
19
+ def transient?
20
+ params[:transient]
9
21
  end
10
22
 
11
23
  end
@@ -8,10 +8,9 @@ class Fabrication::Schematic::Definition
8
8
  Fabrication::Generator::Base
9
9
  ]
10
10
 
11
- attr_accessor :generator, :klass
11
+ attr_accessor :klass
12
12
  def initialize(klass, &block)
13
13
  self.klass = klass
14
- self.generator = GENERATORS.detect { |gen| gen.supports?(klass) }
15
14
  instance_eval(&block) if block_given?
16
15
  end
17
16
 
@@ -29,8 +28,10 @@ class Fabrication::Schematic::Definition
29
28
  attributes.select { |a| a.name == name }.first
30
29
  end
31
30
 
32
- def append_or_update_attribute(attribute)
31
+ def append_or_update_attribute(attribute_name, value, params={}, &block)
32
+ attribute = Fabrication::Schematic::Attribute.new(attribute_name, value, params, &block)
33
33
  if index = attributes.index { |a| a.name == attribute.name }
34
+ attribute.transient! if attributes[index].transient?
34
35
  attributes[index] = attribute
35
36
  else
36
37
  attributes << attribute
@@ -47,14 +48,30 @@ class Fabrication::Schematic::Definition
47
48
  @callbacks ||= {}
48
49
  end
49
50
 
50
- def generate(options={}, overrides={}, &block)
51
- new_schematic = merge(overrides, &block)
52
- new_schematic.instance_eval do
53
- if options[:attributes]
54
- to_hash(generator.new(klass).generate({:save => false}, attributes, callbacks))
55
- else
56
- generator.new(klass).generate(options, attributes, callbacks)
51
+ def generator
52
+ @generator ||= GENERATORS.detect { |gen| gen.supports?(klass) }
53
+ end
54
+
55
+ def build(overrides={}, &block)
56
+ Fabrication.schematics.build_stack << self
57
+ merge(overrides, &block).instance_eval do
58
+ generator.new(klass).build(attributes, callbacks)
59
+ end.tap { Fabrication.schematics.build_stack.pop }
60
+ end
61
+
62
+ def fabricate(overrides={}, &block)
63
+ if Fabrication.schematics.build_stack.empty?
64
+ merge(overrides, &block).instance_eval do
65
+ generator.new(klass).create(attributes, callbacks)
57
66
  end
67
+ else
68
+ build(overrides, &block)
69
+ end
70
+ end
71
+
72
+ def to_attributes(overrides={}, &block)
73
+ merge(overrides, &block).instance_eval do
74
+ generator.new(klass).to_hash(attributes, callbacks)
58
75
  end
59
76
  end
60
77
 
@@ -72,40 +89,41 @@ class Fabrication::Schematic::Definition
72
89
  end
73
90
 
74
91
  def merge(overrides={}, &block)
92
+ return self unless overrides.any? or block_given?
75
93
  clone.tap do |schematic|
76
94
  schematic.instance_eval(&block) if block_given?
77
95
  overrides.each do |name, value|
78
- schematic.append_or_update_attribute(Fabrication::Schematic::Attribute.new(name.to_sym, nil, value))
96
+ schematic.append_or_update_attribute(name.to_sym, value)
79
97
  end
80
98
  end
81
99
  end
82
100
 
83
101
  def method_missing(method_name, *args, &block)
84
- method_name = parse_method_name(method_name, args)
85
- if args.empty? or args.first.is_a?(Hash)
86
- params = args.first || {}
87
- value = block_given? ? block : generate_value(method_name, params)
88
- else
89
- params = {}
90
- value = args.first
91
- end
92
-
93
- append_or_update_attribute(Fabrication::Schematic::Attribute.new(method_name, params, value))
102
+ method_name = parse_method_name(method_name)
103
+ params = args.extract_options!
104
+ value = args.first
105
+ block = generate_value(method_name, params) if args.empty? && !block_given?
106
+ append_or_update_attribute(method_name, value, params, &block)
94
107
  end
95
108
 
96
109
  def on_init(&block)
97
110
  callbacks[:on_init] = block
98
111
  end
99
112
 
100
- def parse_method_name(method_name, args)
113
+ def parse_method_name(method_name)
101
114
  if method_name.to_s.end_with?("!")
115
+ warn("DEPRECATION WARNING: Using the \"!\" in Fabricators is no longer supported. Please remove all occurrances")
102
116
  method_name = method_name.to_s.chomp("!").to_sym
103
- args[0] ||= {}
104
- args[0][:force] = true
105
117
  end
106
118
  method_name
107
119
  end
108
120
 
121
+ def transient(*field_names)
122
+ field_names.each do |field_name|
123
+ append_or_update_attribute(field_name, nil, transient: true)
124
+ end
125
+ end
126
+
109
127
  def sequence(name=Fabrication::Sequencer::DEFAULT, start=0, &block)
110
128
  name = "#{self.klass.to_s.downcase.gsub(/::/, '_')}_#{name}"
111
129
  Fabrication::Sequencer.sequence(name, start, &block)
@@ -119,18 +137,4 @@ class Fabrication::Schematic::Definition
119
137
  params[:count] ||= 1 if !params[:count] && name != name.to_s
120
138
  Proc.new { Fabricate(params[:fabricator] || name.to_sym) }
121
139
  end
122
-
123
- def to_hash(object)
124
- (defined?(HashWithIndifferentAccess) ? HashWithIndifferentAccess.new : {}).tap do |hash|
125
- attributes.map do |attribute|
126
- value = object.send(attribute.name)
127
- if value && value.respond_to?(:id)
128
- hash["#{attribute.name}_id"] = value.id
129
- else
130
- hash[attribute.name] = value
131
- end
132
- end
133
- end
134
- end
135
-
136
140
  end
@@ -1,5 +1,16 @@
1
1
  class Fabrication::Schematic::Manager
2
2
 
3
+ def preinitialize
4
+ @initializing = true
5
+ clear
6
+ end
7
+
8
+ def initializing?; @initializing end
9
+
10
+ def freeze
11
+ @initializing = false
12
+ end
13
+
3
14
  def clear
4
15
  schematics.clear
5
16
  end
@@ -22,6 +33,10 @@ class Fabrication::Schematic::Manager
22
33
  @schematics ||= {}
23
34
  end
24
35
 
36
+ def build_stack
37
+ @build_stack ||= []
38
+ end
39
+
25
40
  protected
26
41
 
27
42
  def raise_if_registered(name)
@@ -23,14 +23,14 @@ class Fabrication::Support
23
23
  end
24
24
 
25
25
  def find_definitions
26
- Fabrication.initializing = true
26
+ Fabrication.schematics.preinitialize
27
27
  path_prefix = defined?(Rails) ? Rails.root : "."
28
28
  Fabrication::Config.fabricator_dir.each do |folder|
29
29
  Dir.glob(File.join(path_prefix, folder, '**', '*.rb')).sort.each do |file|
30
30
  load file
31
31
  end
32
32
  end
33
- Fabrication.initializing = false
33
+ Fabrication.schematics.freeze
34
34
  end
35
35
 
36
36
  end
@@ -1,3 +1,3 @@
1
1
  module Fabrication
2
- VERSION = '1.4.1'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -1,8 +1,13 @@
1
1
  World(FabricationMethods)
2
2
 
3
+ Fabrication::Config.register_with_steps = true
4
+
3
5
  def with_ivars(fabricator)
4
6
  @they = yield fabricator
5
- instance_variable_set("@#{fabricator.model}", @they)
7
+ model = @they.last.class.to_s.underscore
8
+ instance_variable_set("@#{model.pluralize}", @they)
9
+ instance_variable_set("@#{model.singularize}", @they.last)
10
+ Fabrication::Cucumber::Fabrications[model.singularize.gsub(/\W+/,'_').downcase] = @they.last
6
11
  end
7
12
 
8
13
  Given /^(\d+) ([^"]*)$/ do |count, model_name|
@@ -1,4 +1,4 @@
1
- Fabricator(:<%= singular_name %>) do
1
+ Fabricator(<%= class_name.match(/::/) ? "'#{class_name}'" : ":#{singular_name}" %>) do
2
2
  <% attributes.each do |attribute| -%>
3
3
  <%= attribute.name %> <%= attribute.default.inspect %>
4
4
  <% end -%>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fabrication
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-01 00:00:00.000000000 Z
12
+ date: 2012-06-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &70131616319860 !ruby/object:Gem::Requirement
16
+ requirement: &70125484404120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70131616319860
24
+ version_requirements: *70125484404120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bson_ext
27
- requirement: &70131616319440 !ruby/object:Gem::Requirement
27
+ requirement: &70125484403700 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70131616319440
35
+ version_requirements: *70125484403700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: cucumber
38
- requirement: &70131616319020 !ruby/object:Gem::Requirement
38
+ requirement: &70125484403280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70131616319020
46
+ version_requirements: *70125484403280
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sqlite3
49
- requirement: &70131616318600 !ruby/object:Gem::Requirement
49
+ requirement: &70125484402860 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70131616318600
57
+ version_requirements: *70125484402860
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: dm-active_model
60
- requirement: &70131616318180 !ruby/object:Gem::Requirement
60
+ requirement: &70125484402440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70131616318180
68
+ version_requirements: *70125484402440
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: dm-core
71
- requirement: &70131616317760 !ruby/object:Gem::Requirement
71
+ requirement: &70125484402020 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70131616317760
79
+ version_requirements: *70125484402020
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: dm-migrations
82
- requirement: &70131616317340 !ruby/object:Gem::Requirement
82
+ requirement: &70125484401600 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70131616317340
90
+ version_requirements: *70125484401600
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: dm-sqlite-adapter
93
- requirement: &70131616316920 !ruby/object:Gem::Requirement
93
+ requirement: &70125484401180 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70131616316920
101
+ version_requirements: *70125484401180
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: turnip
104
- requirement: &70131615272400 !ruby/object:Gem::Requirement
104
+ requirement: &70125484400660 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0.3'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70131615272400
112
+ version_requirements: *70125484400660
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: ffaker
115
- requirement: &70131615269340 !ruby/object:Gem::Requirement
115
+ requirement: &70125484400240 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70131615269340
123
+ version_requirements: *70125484400240
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: mongoid
126
- requirement: &70131615264260 !ruby/object:Gem::Requirement
126
+ requirement: &70125484399780 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70131615264260
134
+ version_requirements: *70125484399780
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: pry
137
- requirement: &70131616346200 !ruby/object:Gem::Requirement
137
+ requirement: &70125484399360 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70131616346200
145
+ version_requirements: *70125484399360
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: rake
148
- requirement: &70131616345780 !ruby/object:Gem::Requirement
148
+ requirement: &70125484398940 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *70131616345780
156
+ version_requirements: *70125484398940
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: rspec
159
- requirement: &70131616345360 !ruby/object:Gem::Requirement
159
+ requirement: &70125484398520 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: '0'
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *70131616345360
167
+ version_requirements: *70125484398520
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: sequel
170
- requirement: &70131616344940 !ruby/object:Gem::Requirement
170
+ requirement: &70125484398100 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ! '>='
@@ -175,9 +175,9 @@ dependencies:
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *70131616344940
178
+ version_requirements: *70125484398100
179
179
  description: Fabrication is an object generation framework for ActiveRecord, Mongoid,
180
- and Sequel. It has a sensible syntax and lazily generates ActiveRecord associations!
180
+ DataMapper, Sequel, or any other Ruby object.
181
181
  email:
182
182
  - paul@hashrocket.com
183
183
  executables: []