fabrication 0.9.3 → 0.9.4
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/README.markdown +26 -0
- data/lib/fabrication/version.rb +1 -1
- data/lib/rails/generators/fabrication/cucumber_steps/cucumber_steps_generator.rb +15 -0
- data/lib/rails/generators/fabrication/cucumber_steps/templates/fabrication_steps.rb +54 -0
- data/lib/rails/generators/fabrication/model/model_generator.rb +12 -10
- metadata +12 -11
- data/lib/rails/generators/fabrication_generator.rb +0 -11
data/README.markdown
CHANGED
@@ -44,6 +44,32 @@ They are really easy to configure! Just add this to your `config/application.rb`
|
|
44
44
|
g.fixture_replacement :fabrication, :dir => "spec/fabricators"
|
45
45
|
end
|
46
46
|
|
47
|
+
### Cucumber Steps ###
|
48
|
+
|
49
|
+
Packaged with the gem is a generator which will load some handy cucumber table steps into your step_definitions folder. You can get them by running `rails g fabrication:cucumber_steps`.
|
50
|
+
|
51
|
+
To generating a single "widget" object (expecting a Fabricator(:widget) to be defined):
|
52
|
+
|
53
|
+
Given the following widget:
|
54
|
+
| name | widget_1 |
|
55
|
+
| color | red |
|
56
|
+
|
57
|
+
To generate multiple "widget" objects:
|
58
|
+
|
59
|
+
Given the following widgets:
|
60
|
+
| name | color |
|
61
|
+
| widget_1 | red |
|
62
|
+
| widget_2 | blue |
|
63
|
+
...
|
64
|
+
|
65
|
+
To generate "wockets" nested within "widget" objects:
|
66
|
+
|
67
|
+
And that widget has the following wocket:
|
68
|
+
| title | Amazing |
|
69
|
+
| category | fancy |
|
70
|
+
|
71
|
+
That will use the most recently defined "widget" and pass it into the Fabricator. That obviously requires your "wocket" to have a setter for a "widget".
|
72
|
+
|
47
73
|
### Usage ###
|
48
74
|
|
49
75
|
Define your fabricators.
|
data/lib/fabrication/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
|
3
|
+
module Fabrication::Generators
|
4
|
+
class CucumberStepsGenerator < Rails::Generators::Base
|
5
|
+
|
6
|
+
def generate
|
7
|
+
template 'fabrication_steps.rb', "features/step_definitions/fabrication_steps.rb"
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.source_root
|
11
|
+
@_fabrication_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module FabricationMethods
|
2
|
+
def create_from_table(model_name, table, extra = {})
|
3
|
+
fabricator_name = model_name.gsub(/\W+/, '_').downcase.singularize.to_sym
|
4
|
+
is_singular = model_name.to_s.singularize == model_name.to_s
|
5
|
+
hashes = if is_singular
|
6
|
+
[table.rows_hash]
|
7
|
+
else
|
8
|
+
table.hashes
|
9
|
+
end
|
10
|
+
@they = hashes.map do |hash|
|
11
|
+
hash = hash.merge(extra).inject({}) {|h,(k,v)| h.update(k.gsub(/\W+/,'_').to_sym => v)}
|
12
|
+
object = Fabricate.build(fabricator_name, hash)
|
13
|
+
yield object if block_given?
|
14
|
+
object.save!
|
15
|
+
object
|
16
|
+
end
|
17
|
+
if is_singular
|
18
|
+
@it = @they.last
|
19
|
+
instance_variable_set("@#{fabricator_name}", @it)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
World(FabricationMethods)
|
25
|
+
|
26
|
+
Given %r{^the following (.+):$} do |model_name, table|
|
27
|
+
create_from_table(model_name, table)
|
28
|
+
end
|
29
|
+
|
30
|
+
Given %r{^that (.+) has the following (.+):$} do |parent, child, table|
|
31
|
+
child= child.gsub(/\W+/,'_')
|
32
|
+
is_child_plural = child.pluralize == child
|
33
|
+
parent = parent.gsub(/\W+/,'_').downcase.sub(/^_/, '')
|
34
|
+
parent_instance = instance_variable_get("@#{parent}")
|
35
|
+
parent_class = parent_instance.class
|
36
|
+
if assoc = parent_class.reflect_on_association(child.to_sym) || parent_class.reflect_on_association(child.pluralize.to_sym)
|
37
|
+
parent = (assoc.options[:as] || parent).to_s
|
38
|
+
child = (assoc.options[:class_name] || assoc.options[:source] || child).to_s
|
39
|
+
# source will always be singular, repluralize based on original argument
|
40
|
+
child = child.pluralize if is_child_plural
|
41
|
+
end
|
42
|
+
if child.classify.constantize.method_defined?(parent.pluralize)
|
43
|
+
create_from_table(child, table, parent.pluralize => [parent_instance])
|
44
|
+
elsif child.classify.constantize.method_defined?(parent)
|
45
|
+
create_from_table(child, table, parent => parent_instance)
|
46
|
+
else
|
47
|
+
create_from_table(child, table)
|
48
|
+
if assoc.macro == :has_many
|
49
|
+
parent_instance.send("#{assoc.name}=", @they)
|
50
|
+
else
|
51
|
+
parent_instance.send("#{assoc.name}=", @they.first)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,15 +1,17 @@
|
|
1
|
-
require 'rails/generators/
|
1
|
+
require 'rails/generators/named_base'
|
2
2
|
|
3
|
-
module Fabrication
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
class_option :extension, :type => :string, :default => "rb", :desc => "file extension name"
|
3
|
+
module Fabrication::Generators
|
4
|
+
class ModelGenerator < Rails::Generators::NamedBase
|
5
|
+
argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
|
6
|
+
class_option :dir, :type => :string, :default => "spec/fabricators", :desc => "The directory where the fabricators should go"
|
7
|
+
class_option :extension, :type => :string, :default => "rb", :desc => "file extension name"
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
def create_fabrication_file
|
10
|
+
template 'fabricator.rb', File.join(options[:dir], "#{singular_table_name}_fabricator.#{options[:extension].to_s}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.source_root
|
14
|
+
@_fabrication_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
13
15
|
end
|
14
16
|
end
|
15
17
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 9
|
8
|
-
-
|
9
|
-
version: 0.9.
|
8
|
+
- 4
|
9
|
+
version: 0.9.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Paul Elliott
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-02 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -27,9 +27,9 @@ dependencies:
|
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
segments:
|
29
29
|
- 2
|
30
|
-
-
|
30
|
+
- 2
|
31
31
|
- 0
|
32
|
-
version: 2.
|
32
|
+
version: 2.2.0
|
33
33
|
type: :development
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
@@ -58,8 +58,8 @@ dependencies:
|
|
58
58
|
segments:
|
59
59
|
- 3
|
60
60
|
- 0
|
61
|
-
-
|
62
|
-
version: 3.0.
|
61
|
+
- 3
|
62
|
+
version: 3.0.3
|
63
63
|
type: :development
|
64
64
|
version_requirements: *id003
|
65
65
|
- !ruby/object:Gem::Dependency
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
69
|
none: false
|
70
70
|
requirements:
|
71
|
-
- - "
|
71
|
+
- - "="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
segments:
|
74
74
|
- 1
|
@@ -88,8 +88,8 @@ dependencies:
|
|
88
88
|
segments:
|
89
89
|
- 1
|
90
90
|
- 1
|
91
|
-
-
|
92
|
-
version: 1.1.
|
91
|
+
- 4
|
92
|
+
version: 1.1.4
|
93
93
|
type: :development
|
94
94
|
version_requirements: *id005
|
95
95
|
- !ruby/object:Gem::Dependency
|
@@ -148,9 +148,10 @@ files:
|
|
148
148
|
- lib/fabrication/support.rb
|
149
149
|
- lib/fabrication/version.rb
|
150
150
|
- lib/fabrication.rb
|
151
|
+
- lib/rails/generators/fabrication/cucumber_steps/cucumber_steps_generator.rb
|
152
|
+
- lib/rails/generators/fabrication/cucumber_steps/templates/fabrication_steps.rb
|
151
153
|
- lib/rails/generators/fabrication/model/model_generator.rb
|
152
154
|
- lib/rails/generators/fabrication/model/templates/fabricator.rb
|
153
|
-
- lib/rails/generators/fabrication_generator.rb
|
154
155
|
- spec/fabrication/attribute_spec.rb
|
155
156
|
- spec/fabrication/fabricator_spec.rb
|
156
157
|
- spec/fabrication/generator/active_record_spec.rb
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'rails/generators/named_base'
|
2
|
-
|
3
|
-
module Fabrication
|
4
|
-
module Generators
|
5
|
-
class Base < Rails::Generators::NamedBase #:nodoc:
|
6
|
-
def self.source_root
|
7
|
-
@_fabrication_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'fabrication', generator_name, 'templates'))
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|