cucumber_factory 1.14.2 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -12
- data/CHANGELOG.md +55 -0
- data/Gemfile +1 -1
- data/{gemfiles/Gemfile.cucumber-1.3 → Gemfile.cucumber-1.3} +1 -1
- data/{gemfiles/Gemfile.cucumber-1.3.lock → Gemfile.cucumber-1.3.lock} +2 -2
- data/{gemfiles/Gemfile.cucumber-2.4 → Gemfile.cucumber-2.4} +1 -1
- data/{gemfiles/Gemfile.cucumber-2.4.lock → Gemfile.cucumber-2.4.lock} +2 -2
- data/{gemfiles/Gemfile.cucumber-3.0 → Gemfile.cucumber-3.0} +1 -1
- data/{gemfiles/Gemfile.cucumber-3.0.lock → Gemfile.cucumber-3.0.lock} +2 -2
- data/{gemfiles/Gemfile.cucumber-3.1 → Gemfile.cucumber-3.1} +1 -1
- data/{gemfiles/Gemfile.cucumber-3.1.lock → Gemfile.cucumber-3.1.lock} +2 -2
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/cucumber_factory.rb +15 -1
- data/lib/cucumber_factory/add_steps.rb +1 -0
- data/lib/cucumber_factory/build_strategy.rb +108 -0
- data/lib/{cucumber → cucumber_factory}/factory.rb +9 -11
- data/lib/cucumber_factory/version.rb +1 -1
- data/spec/cucumber_factory/factory/build_strategy_spec.rb +2 -2
- data/spec/support/cucumber_helper.rb +2 -1
- metadata +14 -12
- data/lib/cucumber/factory/build_strategy.rb +0 -110
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9be7d49c33814f02f79d18b4a92eb3f5af05de9bd8b8b0a38305e2113763e0c
|
4
|
+
data.tar.gz: a446cbe7440b4fb9f0841133dd655d1fd332e2eace463297d484fa40d5849ffd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bb70ead6e5bcb857d6c887ae4b5ec5a1f0b95f93d550c1e90a45c97c2a88f16733f4abf47fa5ded2242400c2e97e40d2a6c70835439b2b273ed290831af236e
|
7
|
+
data.tar.gz: c5dc17e7f963b9a7c5a0e6d1e128bc5024a5e547737e4f1148e60ee47b3dbf48d7a7db5422e5481ddaae0558092cd7faaa957ea370de233bfc5bff7f94904087
|
data/.travis.yml
CHANGED
@@ -4,32 +4,31 @@ rvm:
|
|
4
4
|
- 2.5.3
|
5
5
|
|
6
6
|
gemfile:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
-
|
7
|
+
- Gemfile.cucumber-1.3
|
8
|
+
- Gemfile.cucumber-2.4
|
9
|
+
- Gemfile.cucumber-3.0
|
10
|
+
- Gemfile.cucumber-3.1
|
11
11
|
|
12
12
|
matrix:
|
13
13
|
exclude:
|
14
|
-
- gemfile:
|
14
|
+
- gemfile: Gemfile.cucumber-3.1
|
15
15
|
rvm: 1.8.7
|
16
|
-
- gemfile:
|
16
|
+
- gemfile: Gemfile.cucumber-3.1
|
17
17
|
rvm: 2.1.10 # cucumber 3 wants ruby >= 2.2
|
18
|
-
- gemfile:
|
18
|
+
- gemfile: Gemfile.cucumber-3.0
|
19
19
|
rvm: 1.8.7
|
20
|
-
- gemfile:
|
20
|
+
- gemfile: Gemfile.cucumber-3.0
|
21
21
|
rvm: 2.1.10 # cucumber 3 wants ruby >= 2.2
|
22
|
-
- gemfile:
|
22
|
+
- gemfile: Gemfile.cucumber-2.4
|
23
23
|
rvm: 1.8.7
|
24
|
-
- gemfile:
|
24
|
+
- gemfile: Gemfile.cucumber-1.3
|
25
25
|
rvm: 2.5.3 # doesn't work with old RSpec
|
26
|
-
- gemfile:
|
26
|
+
- gemfile: Gemfile.cucumber-1.3
|
27
27
|
rvm: 2.1.10 # doesn't work with old RSpec
|
28
28
|
|
29
29
|
install:
|
30
30
|
# Replace default Travis CI bundler script with a version that doesn't
|
31
31
|
# explode when lockfile doesn't match recently bumped version
|
32
|
-
- gem update --system
|
33
32
|
- bundle install --no-deployment --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
|
34
33
|
|
35
34
|
before_script:
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
|
8
|
+
## 1.15.0 - 2019-02-08
|
9
|
+
|
10
|
+
### Breaking changes
|
11
|
+
|
12
|
+
- Moved gem's code from `Cucumber` module into `CucumberFactory` module.
|
13
|
+
- Instead of calling `Cucumber::Factory.add_steps(self)`, `require 'cucumber_factory/add_steps'` instead.
|
14
|
+
|
15
|
+
|
16
|
+
## 1.14.2 - 2018-10-31
|
17
|
+
|
18
|
+
### Compatible changes
|
19
|
+
|
20
|
+
- Replace deprecated `Fixnum` with `Integer`
|
21
|
+
|
22
|
+
|
23
|
+
## 1.14.1 - 2018-10-26
|
24
|
+
|
25
|
+
### Compatible changes
|
26
|
+
|
27
|
+
- Allow to refer to previously set foreign keys
|
28
|
+
|
29
|
+
|
30
|
+
## 1.14.0 - 2018-10-26
|
31
|
+
|
32
|
+
### Compatible changes
|
33
|
+
|
34
|
+
- Allow to set numbers without quotes
|
35
|
+
- Support array fields out of the box
|
36
|
+
- Allow to set has_many associations with square bracket notation
|
37
|
+
|
38
|
+
|
39
|
+
## 1.13.0 - 2018-04-26
|
40
|
+
|
41
|
+
### Compatible changes
|
42
|
+
|
43
|
+
- Support multi line attribute assignment
|
44
|
+
|
45
|
+
|
46
|
+
## 1.12.0 - 2018-04-26
|
47
|
+
|
48
|
+
### Compatible changes
|
49
|
+
|
50
|
+
- Support for Cucumber 3.0 and 3.1
|
51
|
+
|
52
|
+
|
53
|
+
## Previous releases
|
54
|
+
|
55
|
+
- See [GitHub](https://github.com/makandra/cucumber_factory/commits/master)
|
data/Gemfile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
./
|
1
|
+
./Gemfile.cucumber-2.4
|
data/Gemfile.lock
CHANGED
@@ -1 +1 @@
|
|
1
|
-
./
|
1
|
+
./Gemfile.cucumber-2.4.lock
|
data/README.md
CHANGED
@@ -180,7 +180,7 @@ In your `Gemfile` say:
|
|
180
180
|
|
181
181
|
Now create a file `features/step_definitions/factory_steps.rb`, which just says
|
182
182
|
|
183
|
-
|
183
|
+
require 'cucumber_factory/add_steps'
|
184
184
|
|
185
185
|
Now run `bundle install` and restart your server.
|
186
186
|
|
data/lib/cucumber_factory.rb
CHANGED
@@ -12,5 +12,19 @@ end
|
|
12
12
|
require 'cucumber_priority'
|
13
13
|
|
14
14
|
# Gem
|
15
|
-
require '
|
15
|
+
require 'cucumber_factory/build_strategy'
|
16
|
+
require 'cucumber_factory/factory'
|
16
17
|
require 'cucumber_factory/switcher'
|
18
|
+
|
19
|
+
module Cucumber
|
20
|
+
module Factory
|
21
|
+
module_function
|
22
|
+
|
23
|
+
def add_steps(main)
|
24
|
+
warn "Using `Cucumber::Factory.add_steps(self)` is deprecated. Use `require 'cucumber_factory/add_steps'` instead."
|
25
|
+
|
26
|
+
add_steps_filepath = File.join(File.dirname(__FILE__), 'cucumber_factory/add_steps.rb')
|
27
|
+
main.instance_eval(File.read(add_steps_filepath))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
CucumberFactory::Factory.add_steps(self)
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module CucumberFactory
|
2
|
+
|
3
|
+
# wraps machinist / factory_bot / ruby object logic
|
4
|
+
|
5
|
+
class BuildStrategy
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def from_prose(model_prose, variant_prose)
|
10
|
+
# don't use \w which depends on the system locale
|
11
|
+
underscored_model_name = model_prose.gsub(/[^A-Za-z0-9_\/]+/, "_")
|
12
|
+
if variant_prose.present?
|
13
|
+
variants = /\((.*?)\)/.match(variant_prose)[1].split(/\s*,\s*/)
|
14
|
+
variants = variants.collect { |variant| variant.downcase.gsub(" ", "_") }
|
15
|
+
else
|
16
|
+
variants = []
|
17
|
+
end
|
18
|
+
|
19
|
+
if factory_bot_strategy = factory_bot_strategy(underscored_model_name, variants)
|
20
|
+
factory_bot_strategy
|
21
|
+
else
|
22
|
+
model_class = underscored_model_name.camelize.constantize
|
23
|
+
machinist_strategy(model_class, variants) ||
|
24
|
+
active_record_strategy(model_class) ||
|
25
|
+
ruby_object_strategy(model_class)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def factory_bot_strategy(factory_name, variants)
|
32
|
+
factory_class = ::FactoryBot if defined?(FactoryBot)
|
33
|
+
factory_class ||= ::FactoryGirl if defined?(FactoryGirl)
|
34
|
+
return unless factory_class
|
35
|
+
|
36
|
+
variants = variants.map(&:to_sym)
|
37
|
+
factory_name = factory_name.to_s.underscore.gsub('/', '_').to_sym
|
38
|
+
|
39
|
+
factory = factory_class.factories[factory_name]
|
40
|
+
|
41
|
+
if factory.nil? && variants.present? && factory = factory_class.factories[variants[0]]
|
42
|
+
factory_name, *variants = variants
|
43
|
+
end
|
44
|
+
|
45
|
+
if factory
|
46
|
+
new(factory.build_class) do |attributes|
|
47
|
+
# Cannot have additional scalar args after a varargs
|
48
|
+
# argument in Ruby 1.8 and 1.9
|
49
|
+
args = []
|
50
|
+
args += variants
|
51
|
+
args << attributes
|
52
|
+
factory_class.create(factory_name, *args)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def machinist_strategy(model_class, variants)
|
59
|
+
if model_class.respond_to?(:make)
|
60
|
+
|
61
|
+
new(model_class) do |attributes|
|
62
|
+
if variants.present?
|
63
|
+
variants.size == 1 or raise 'Machinist only supports a single variant per blueprint'
|
64
|
+
model_class.make(variants.first.to_sym, attributes)
|
65
|
+
else
|
66
|
+
model_class.make(attributes)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def active_record_strategy(model_class)
|
74
|
+
if model_class.respond_to?(:create!)
|
75
|
+
|
76
|
+
new(model_class) do |attributes|
|
77
|
+
model = model_class.new
|
78
|
+
CucumberFactory::Switcher.assign_attributes(model, attributes)
|
79
|
+
model.save!
|
80
|
+
model
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def ruby_object_strategy(model_class)
|
87
|
+
new(model_class) do |attributes|
|
88
|
+
model_class.new(attributes)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
attr_reader :model_class
|
96
|
+
|
97
|
+
def initialize(model_class, &block)
|
98
|
+
@model_class = model_class
|
99
|
+
@create_proc = block
|
100
|
+
end
|
101
|
+
|
102
|
+
def create_record(attributes)
|
103
|
+
@create_proc.call(attributes)
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module Cucumber
|
4
|
-
class Factory
|
1
|
+
module CucumberFactory
|
2
|
+
module Factory
|
5
3
|
class Error < StandardError; end
|
6
4
|
|
7
5
|
ATTRIBUTES_PATTERN = '( with the .+?)?( (?:which|who|that) is .+?)?'
|
@@ -22,7 +20,7 @@ module Cucumber
|
|
22
20
|
|
23
21
|
CLEAR_NAMED_RECORDS_STEP_DESCRIPTOR = {
|
24
22
|
:kind => :Before,
|
25
|
-
:block => proc {
|
23
|
+
:block => proc { CucumberFactory::Factory.send(:reset_named_records, self) }
|
26
24
|
}
|
27
25
|
|
28
26
|
# We cannot use vararg blocks in the descriptors in Ruby 1.8, as explained by
|
@@ -32,26 +30,26 @@ module Cucumber
|
|
32
30
|
NAMED_CREATION_STEP_DESCRIPTOR = {
|
33
31
|
:kind => :Given,
|
34
32
|
:pattern => /^#{NAMED_RECORD_PATTERN}#{ATTRIBUTES_PATTERN}?$/,
|
35
|
-
:block => lambda { |a1, a2, a3, a4, a5|
|
33
|
+
:block => lambda { |a1, a2, a3, a4, a5| CucumberFactory::Factory.send(:parse_named_creation, self, a1, a2, a3, a4, a5) }
|
36
34
|
}
|
37
35
|
|
38
36
|
CREATION_STEP_DESCRIPTOR = {
|
39
37
|
:kind => :Given,
|
40
38
|
:pattern => /^#{RECORD_PATTERN}#{ATTRIBUTES_PATTERN}$/,
|
41
|
-
:block => lambda { |a1, a2, a3, a4|
|
39
|
+
:block => lambda { |a1, a2, a3, a4| CucumberFactory::Factory.send(:parse_creation, self, a1, a2, a3, a4) }
|
42
40
|
}
|
43
41
|
|
44
42
|
NAMED_CREATION_STEP_DESCRIPTOR_WITH_TEXT_ATTRIBUTES = {
|
45
43
|
:kind => :Given,
|
46
44
|
:pattern => /^"#{NAMED_RECORD_PATTERN}#{ATTRIBUTES_PATTERN}#{TEXT_ATTRIBUTES_PATTERN}?$/,
|
47
|
-
:block => lambda { |a1, a2, a3, a4, a5, a6|
|
45
|
+
:block => lambda { |a1, a2, a3, a4, a5, a6| CucumberFactory::Factory.send(:parse_named_creation, self, a1, a2, a3, a4, a5, a6) },
|
48
46
|
:priority => true
|
49
47
|
}
|
50
48
|
|
51
49
|
CREATION_STEP_DESCRIPTOR_WITH_TEXT_ATTRIBUTES = {
|
52
50
|
:kind => :Given,
|
53
51
|
:pattern => /^#{RECORD_PATTERN}#{ATTRIBUTES_PATTERN}#{TEXT_ATTRIBUTES_PATTERN}$/,
|
54
|
-
:block => lambda { |a1, a2, a3, a4, a5|
|
52
|
+
:block => lambda { |a1, a2, a3, a4, a5| CucumberFactory::Factory.send(:parse_creation, self, a1, a2, a3, a4, a5) },
|
55
53
|
:priority => true
|
56
54
|
}
|
57
55
|
|
@@ -94,12 +92,12 @@ module Cucumber
|
|
94
92
|
def set_named_record(world, name, record)
|
95
93
|
named_records(world)[name] = record
|
96
94
|
end
|
97
|
-
|
95
|
+
|
98
96
|
def parse_named_creation(world, name, raw_model, raw_variant, raw_attributes, raw_boolean_attributes, raw_multiline_attributes = nil)
|
99
97
|
record = parse_creation(world, raw_model, raw_variant, raw_attributes, raw_boolean_attributes, raw_multiline_attributes)
|
100
98
|
set_named_record(world, name, record)
|
101
99
|
end
|
102
|
-
|
100
|
+
|
103
101
|
def parse_creation(world, raw_model, raw_variant, raw_attributes, raw_boolean_attributes, raw_multiline_attributes = nil)
|
104
102
|
build_strategy = BuildStrategy.from_prose(raw_model, raw_variant)
|
105
103
|
model_class = build_strategy.model_class
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe CucumberFactory::BuildStrategy do
|
4
4
|
|
5
|
-
subject {
|
5
|
+
subject { CucumberFactory::BuildStrategy }
|
6
6
|
|
7
7
|
# most of the behaviour is integration tested in steps_spec.rb
|
8
8
|
|
@@ -17,7 +17,8 @@ def prepare_cucumber_example
|
|
17
17
|
@main.extend(Cucumber::RbSupport::RbDsl)
|
18
18
|
end
|
19
19
|
|
20
|
-
|
20
|
+
add_steps_filepath = File.expand_path(File.join(File.dirname(__FILE__), '../../lib/cucumber_factory/add_steps.rb'))
|
21
|
+
@main.instance_eval(File.read(add_steps_filepath))
|
21
22
|
end
|
22
23
|
|
23
24
|
def invoke_cucumber_step(step, doc_string = nil, data_table = nil)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber_factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Koch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -77,23 +77,25 @@ files:
|
|
77
77
|
- ".rspec"
|
78
78
|
- ".ruby-version"
|
79
79
|
- ".travis.yml"
|
80
|
+
- CHANGELOG.md
|
80
81
|
- Gemfile
|
82
|
+
- Gemfile.cucumber-1.3
|
83
|
+
- Gemfile.cucumber-1.3.lock
|
84
|
+
- Gemfile.cucumber-2.4
|
85
|
+
- Gemfile.cucumber-2.4.lock
|
86
|
+
- Gemfile.cucumber-3.0
|
87
|
+
- Gemfile.cucumber-3.0.lock
|
88
|
+
- Gemfile.cucumber-3.1
|
89
|
+
- Gemfile.cucumber-3.1.lock
|
81
90
|
- Gemfile.lock
|
82
91
|
- LICENSE
|
83
92
|
- README.md
|
84
93
|
- Rakefile
|
85
94
|
- cucumber_factory.gemspec
|
86
|
-
- gemfiles/Gemfile.cucumber-1.3
|
87
|
-
- gemfiles/Gemfile.cucumber-1.3.lock
|
88
|
-
- gemfiles/Gemfile.cucumber-2.4
|
89
|
-
- gemfiles/Gemfile.cucumber-2.4.lock
|
90
|
-
- gemfiles/Gemfile.cucumber-3.0
|
91
|
-
- gemfiles/Gemfile.cucumber-3.0.lock
|
92
|
-
- gemfiles/Gemfile.cucumber-3.1
|
93
|
-
- gemfiles/Gemfile.cucumber-3.1.lock
|
94
|
-
- lib/cucumber/factory.rb
|
95
|
-
- lib/cucumber/factory/build_strategy.rb
|
96
95
|
- lib/cucumber_factory.rb
|
96
|
+
- lib/cucumber_factory/add_steps.rb
|
97
|
+
- lib/cucumber_factory/build_strategy.rb
|
98
|
+
- lib/cucumber_factory/factory.rb
|
97
99
|
- lib/cucumber_factory/switcher.rb
|
98
100
|
- lib/cucumber_factory/version.rb
|
99
101
|
- spec/cucumber_factory/factory/build_strategy_spec.rb
|
@@ -1,110 +0,0 @@
|
|
1
|
-
module Cucumber
|
2
|
-
class Factory
|
3
|
-
|
4
|
-
# wraps machinist / factory_bot / ruby object logic
|
5
|
-
|
6
|
-
class BuildStrategy
|
7
|
-
|
8
|
-
class << self
|
9
|
-
|
10
|
-
def from_prose(model_prose, variant_prose)
|
11
|
-
# don't use \w which depends on the system locale
|
12
|
-
underscored_model_name = model_prose.gsub(/[^A-Za-z0-9_\/]+/, "_")
|
13
|
-
if variant_prose.present?
|
14
|
-
variants = /\((.*?)\)/.match(variant_prose)[1].split(/\s*,\s*/)
|
15
|
-
variants = variants.collect { |variant| variant.downcase.gsub(" ", "_") }
|
16
|
-
else
|
17
|
-
variants = []
|
18
|
-
end
|
19
|
-
|
20
|
-
if factory_bot_strategy = factory_bot_strategy(underscored_model_name, variants)
|
21
|
-
factory_bot_strategy
|
22
|
-
else
|
23
|
-
model_class = underscored_model_name.camelize.constantize
|
24
|
-
machinist_strategy(model_class, variants) ||
|
25
|
-
active_record_strategy(model_class) ||
|
26
|
-
ruby_object_strategy(model_class)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def factory_bot_strategy(factory_name, variants)
|
33
|
-
factory_class = ::FactoryBot if defined?(FactoryBot)
|
34
|
-
factory_class ||= ::FactoryGirl if defined?(FactoryGirl)
|
35
|
-
return unless factory_class
|
36
|
-
|
37
|
-
variants = variants.map(&:to_sym)
|
38
|
-
factory_name = factory_name.to_s.underscore.gsub('/', '_').to_sym
|
39
|
-
|
40
|
-
factory = factory_class.factories[factory_name]
|
41
|
-
|
42
|
-
if factory.nil? && variants.present? && factory = factory_class.factories[variants[0]]
|
43
|
-
factory_name, *variants = variants
|
44
|
-
end
|
45
|
-
|
46
|
-
if factory
|
47
|
-
new(factory.build_class) do |attributes|
|
48
|
-
# Cannot have additional scalar args after a varargs
|
49
|
-
# argument in Ruby 1.8 and 1.9
|
50
|
-
args = []
|
51
|
-
args += variants
|
52
|
-
args << attributes
|
53
|
-
factory_class.create(factory_name, *args)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
def machinist_strategy(model_class, variants)
|
60
|
-
if model_class.respond_to?(:make)
|
61
|
-
|
62
|
-
new(model_class) do |attributes|
|
63
|
-
if variants.present?
|
64
|
-
variants.size == 1 or raise 'Machinist only supports a single variant per blueprint'
|
65
|
-
model_class.make(variants.first.to_sym, attributes)
|
66
|
-
else
|
67
|
-
model_class.make(attributes)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def active_record_strategy(model_class)
|
75
|
-
if model_class.respond_to?(:create!)
|
76
|
-
|
77
|
-
new(model_class) do |attributes|
|
78
|
-
model = model_class.new
|
79
|
-
CucumberFactory::Switcher.assign_attributes(model, attributes)
|
80
|
-
model.save!
|
81
|
-
model
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def ruby_object_strategy(model_class)
|
88
|
-
new(model_class) do |attributes|
|
89
|
-
model_class.new(attributes)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
|
96
|
-
attr_reader :model_class
|
97
|
-
|
98
|
-
def initialize(model_class, &block)
|
99
|
-
@model_class = model_class
|
100
|
-
@create_proc = block
|
101
|
-
end
|
102
|
-
|
103
|
-
def create_record(attributes)
|
104
|
-
@create_proc.call(attributes)
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
110
|
-
end
|