kbaum-pickle 0.2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/History.txt +239 -0
- data/License.txt +20 -0
- data/README.rdoc +246 -0
- data/Rakefile +110 -0
- data/Todo.txt +4 -0
- data/VERSION +1 -0
- data/features/app/app.rb +121 -0
- data/features/app/blueprints.rb +11 -0
- data/features/app/factories.rb +23 -0
- data/features/app/views/notifier/email.erb +1 -0
- data/features/app/views/notifier/user_email.erb +6 -0
- data/features/email/email.feature +39 -0
- data/features/generator/generators.feature +59 -0
- data/features/path/models_page.feature +44 -0
- data/features/path/named_route_page.feature +10 -0
- data/features/pickle/create_from_active_record.feature +49 -0
- data/features/pickle/create_from_factory_girl.feature +55 -0
- data/features/pickle/create_from_machinist.feature +38 -0
- data/features/step_definitions/email_steps.rb +55 -0
- data/features/step_definitions/extra_email_steps.rb +7 -0
- data/features/step_definitions/fork_steps.rb +4 -0
- data/features/step_definitions/generator_steps.rb +46 -0
- data/features/step_definitions/path_steps.rb +14 -0
- data/features/step_definitions/pickle_steps.rb +73 -0
- data/features/support/email.rb +21 -0
- data/features/support/env.rb +55 -0
- data/features/support/paths.rb +46 -0
- data/features/support/pickle.rb +26 -0
- data/features/support/pickle_app.rb +4 -0
- data/garlic.rb +38 -0
- data/init.rb +0 -0
- data/lib/pickle/adapter.rb +88 -0
- data/lib/pickle/config.rb +48 -0
- data/lib/pickle/email/parser.rb +18 -0
- data/lib/pickle/email/world.rb +13 -0
- data/lib/pickle/email.rb +36 -0
- data/lib/pickle/parser/matchers.rb +87 -0
- data/lib/pickle/parser.rb +65 -0
- data/lib/pickle/path/world.rb +5 -0
- data/lib/pickle/path.rb +45 -0
- data/lib/pickle/session/parser.rb +34 -0
- data/lib/pickle/session.rb +157 -0
- data/lib/pickle/version.rb +6 -0
- data/lib/pickle/world.rb +9 -0
- data/lib/pickle.rb +26 -0
- data/pickle.gemspec +110 -0
- data/rails_generators/pickle/pickle_generator.rb +40 -0
- data/rails_generators/pickle/templates/email.rb +21 -0
- data/rails_generators/pickle/templates/email_steps.rb +55 -0
- data/rails_generators/pickle/templates/paths.rb +20 -0
- data/rails_generators/pickle/templates/pickle.rb +28 -0
- data/rails_generators/pickle/templates/pickle_steps.rb +73 -0
- data/spec/lib/pickle_adapter_spec.rb +164 -0
- data/spec/lib/pickle_config_spec.rb +97 -0
- data/spec/lib/pickle_email_parser_spec.rb +49 -0
- data/spec/lib/pickle_email_spec.rb +131 -0
- data/spec/lib/pickle_parser_matchers_spec.rb +70 -0
- data/spec/lib/pickle_parser_spec.rb +154 -0
- data/spec/lib/pickle_path_spec.rb +92 -0
- data/spec/lib/pickle_session_spec.rb +384 -0
- data/spec/lib/pickle_spec.rb +24 -0
- data/spec/spec_helper.rb +38 -0
- metadata +126 -0
@@ -0,0 +1,157 @@
|
|
1
|
+
module Pickle
|
2
|
+
module Session
|
3
|
+
class << self
|
4
|
+
def included(world_class)
|
5
|
+
proxy_to_pickle_parser(world_class)
|
6
|
+
end
|
7
|
+
|
8
|
+
def extended(world_object)
|
9
|
+
proxy_to_pickle_parser(class << world_object; self; end) # metaclass is not 2.1 compatible
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
def proxy_to_pickle_parser(world_class)
|
14
|
+
world_class.class_eval do
|
15
|
+
unless methods.include?('method_missing_with_pickle_parser')
|
16
|
+
alias_method_chain :method_missing, :pickle_parser
|
17
|
+
alias_method_chain :respond_to?, :pickle_parser
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_model(a_model_name, fields = nil)
|
24
|
+
factory, label = *parse_model(a_model_name)
|
25
|
+
raise ArgumentError, "Can't create with an ordinal (e.g. 1st user)" if label.is_a?(Integer)
|
26
|
+
fields = fields.is_a?(Hash) ? parse_hash(fields) : parse_fields(fields)
|
27
|
+
record = pickle_config.factories[factory].create(fields)
|
28
|
+
store_model(factory, label, record)
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_model(a_model_name, fields = nil)
|
32
|
+
factory, name = *parse_model(a_model_name)
|
33
|
+
raise ArgumentError, "Can't find a model with an ordinal (e.g. 1st user)" if name.is_a?(Integer)
|
34
|
+
model_class = pickle_config.factories[factory].klass
|
35
|
+
fields = fields.is_a?(Hash) ? parse_hash(fields) : parse_fields(fields)
|
36
|
+
if record = model_class.find(:first, :conditions => convert_models_to_attributes(model_class, fields))
|
37
|
+
store_model(factory, name, record)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def find_model!(a_model_name, fields = nil)
|
42
|
+
find_model(a_model_name, fields) or raise "Can't find pickle model: '#{name}' in this scenario"
|
43
|
+
end
|
44
|
+
|
45
|
+
def find_models(factory, fields = nil)
|
46
|
+
models_by_index(factory).clear
|
47
|
+
model_class = pickle_config.factories[factory].klass
|
48
|
+
records = model_class.find(:all, :conditions => convert_models_to_attributes(model_class, parse_fields(fields)))
|
49
|
+
records.each {|record| store_model(factory, nil, record)}
|
50
|
+
end
|
51
|
+
|
52
|
+
# return the original model stored by create_model or find_model
|
53
|
+
def created_model(name)
|
54
|
+
factory, name_or_index = *parse_model(name)
|
55
|
+
|
56
|
+
if name_or_index.blank?
|
57
|
+
models_by_index(factory).last
|
58
|
+
elsif name_or_index.is_a?(Integer)
|
59
|
+
models_by_index(factory)[name_or_index]
|
60
|
+
else
|
61
|
+
models_by_name(factory)[name_or_index] or raise "Can't find pickle model: '#{name}' in this scenario"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# predicate version which raises no errors
|
66
|
+
def created_model?(name)
|
67
|
+
(created_model(name) rescue nil) ? true : false
|
68
|
+
end
|
69
|
+
|
70
|
+
# return a newly selected model
|
71
|
+
def model(name)
|
72
|
+
(model = created_model(name)) && model.class.find(model.id)
|
73
|
+
end
|
74
|
+
|
75
|
+
# predicate version which raises no errors
|
76
|
+
def model?(name)
|
77
|
+
(model(name) rescue nil) ? true : false
|
78
|
+
end
|
79
|
+
|
80
|
+
# like model, but raise an error if it can't be found
|
81
|
+
def model!(name)
|
82
|
+
model(name) or raise "Can't find pickle model: '#{name}' in this scenario"
|
83
|
+
end
|
84
|
+
|
85
|
+
# like created_model, but raise an error if it can't be found
|
86
|
+
def created_model!(name)
|
87
|
+
created_model(name) or raise "Can't find pickle model: '#{name}' in this scenario"
|
88
|
+
end
|
89
|
+
|
90
|
+
# return all original models of specified type
|
91
|
+
def created_models(factory)
|
92
|
+
models_by_index(factory)
|
93
|
+
end
|
94
|
+
|
95
|
+
# return all models of specified type (freshly selected from the database)
|
96
|
+
def models(factory)
|
97
|
+
created_models(factory).map{|model| model.class.find(model.id) }
|
98
|
+
end
|
99
|
+
|
100
|
+
def respond_to_with_pickle_parser?(method, include_private = false)
|
101
|
+
respond_to_without_pickle_parser?(method, include_private) || pickle_parser.respond_to?(method, include_private)
|
102
|
+
end
|
103
|
+
|
104
|
+
protected
|
105
|
+
def method_missing_with_pickle_parser(method, *args, &block)
|
106
|
+
if pickle_parser.respond_to?(method)
|
107
|
+
pickle_parser.send(method, *args, &block)
|
108
|
+
else
|
109
|
+
method_missing_without_pickle_parser(method, *args, &block)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def pickle_parser=(parser)
|
114
|
+
parser.session = self
|
115
|
+
@pickle_parser = parser
|
116
|
+
end
|
117
|
+
|
118
|
+
def pickle_parser
|
119
|
+
@pickle_parser or self.pickle_parser = Pickle.parser
|
120
|
+
end
|
121
|
+
|
122
|
+
def pickle_config
|
123
|
+
pickle_parser.config
|
124
|
+
end
|
125
|
+
|
126
|
+
def convert_models_to_attributes(ar_class, attrs)
|
127
|
+
attrs.each do |key, val|
|
128
|
+
if val.is_a?(ActiveRecord::Base) && ar_class.column_names.include?("#{key}_id")
|
129
|
+
attrs["#{key}_id"] = val.id
|
130
|
+
attrs["#{key}_type"] = val.class.name if ar_class.column_names.include?("#{key}_type")
|
131
|
+
attrs.delete(key)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def models_by_name(factory)
|
137
|
+
@models_by_name ||= {}
|
138
|
+
@models_by_name[pickle_parser.canonical(factory)] ||= {}
|
139
|
+
end
|
140
|
+
|
141
|
+
def models_by_index(factory)
|
142
|
+
@models_by_index ||= {}
|
143
|
+
@models_by_index[pickle_parser.canonical(factory)] ||= []
|
144
|
+
end
|
145
|
+
|
146
|
+
# if the factory name != the model name, store under both names
|
147
|
+
def store_model(factory, name, record)
|
148
|
+
store_record(record.class.name, name, record) unless pickle_parser.canonical(factory) == pickle_parser.canonical(record.class.name)
|
149
|
+
store_record(factory, name, record)
|
150
|
+
end
|
151
|
+
|
152
|
+
def store_record(factory, name, record)
|
153
|
+
models_by_name(factory)[name] = record
|
154
|
+
models_by_index(factory) << record
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
data/lib/pickle/world.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'pickle'
|
2
|
+
|
3
|
+
# make cucumber world pickle aware
|
4
|
+
World(Pickle::Session)
|
5
|
+
|
6
|
+
# shortcuts to regexps for use in step definition regexps
|
7
|
+
class << self
|
8
|
+
delegate :capture_model, :capture_fields, :capture_factory, :capture_plural_factory, :capture_predicate, :to => 'Pickle.parser'
|
9
|
+
end
|
data/lib/pickle.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'pickle/version'
|
3
|
+
require 'pickle/adapter'
|
4
|
+
require 'pickle/config'
|
5
|
+
require 'pickle/parser'
|
6
|
+
require 'pickle/session'
|
7
|
+
require 'pickle/session/parser'
|
8
|
+
|
9
|
+
# make the parser aware of models in the session (for fields refering to models)
|
10
|
+
Pickle::Parser.send :include, Pickle::Session::Parser
|
11
|
+
|
12
|
+
module Pickle
|
13
|
+
class << self
|
14
|
+
def config
|
15
|
+
@config ||= Config.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def configure(&block)
|
19
|
+
config.configure(&block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def parser(options = {})
|
23
|
+
@parser ||= Parser.new({:config => config}.merge(options))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/pickle.gemspec
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{kbaum-pickle}
|
8
|
+
s.version = "0.2.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Ian White"]
|
12
|
+
s.date = %q{2009-12-01}
|
13
|
+
s.description = %q{Easy model creation and reference in your cucumber features}
|
14
|
+
s.email = %q{ian.w.white@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"History.txt",
|
21
|
+
"License.txt",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"Todo.txt",
|
25
|
+
"VERSION",
|
26
|
+
"features/app/app.rb",
|
27
|
+
"features/app/blueprints.rb",
|
28
|
+
"features/app/factories.rb",
|
29
|
+
"features/app/views/notifier/email.erb",
|
30
|
+
"features/app/views/notifier/user_email.erb",
|
31
|
+
"features/email/email.feature",
|
32
|
+
"features/generator/generators.feature",
|
33
|
+
"features/path/models_page.feature",
|
34
|
+
"features/path/named_route_page.feature",
|
35
|
+
"features/pickle/create_from_active_record.feature",
|
36
|
+
"features/pickle/create_from_factory_girl.feature",
|
37
|
+
"features/pickle/create_from_machinist.feature",
|
38
|
+
"features/step_definitions/email_steps.rb",
|
39
|
+
"features/step_definitions/extra_email_steps.rb",
|
40
|
+
"features/step_definitions/fork_steps.rb",
|
41
|
+
"features/step_definitions/generator_steps.rb",
|
42
|
+
"features/step_definitions/path_steps.rb",
|
43
|
+
"features/step_definitions/pickle_steps.rb",
|
44
|
+
"features/support/email.rb",
|
45
|
+
"features/support/env.rb",
|
46
|
+
"features/support/paths.rb",
|
47
|
+
"features/support/pickle.rb",
|
48
|
+
"features/support/pickle_app.rb",
|
49
|
+
"garlic.rb",
|
50
|
+
"init.rb",
|
51
|
+
"lib/pickle.rb",
|
52
|
+
"lib/pickle/adapter.rb",
|
53
|
+
"lib/pickle/config.rb",
|
54
|
+
"lib/pickle/email.rb",
|
55
|
+
"lib/pickle/email/parser.rb",
|
56
|
+
"lib/pickle/email/world.rb",
|
57
|
+
"lib/pickle/parser.rb",
|
58
|
+
"lib/pickle/parser/matchers.rb",
|
59
|
+
"lib/pickle/path.rb",
|
60
|
+
"lib/pickle/path/world.rb",
|
61
|
+
"lib/pickle/session.rb",
|
62
|
+
"lib/pickle/session/parser.rb",
|
63
|
+
"lib/pickle/version.rb",
|
64
|
+
"lib/pickle/world.rb",
|
65
|
+
"pickle.gemspec",
|
66
|
+
"rails_generators/pickle/pickle_generator.rb",
|
67
|
+
"rails_generators/pickle/templates/email.rb",
|
68
|
+
"rails_generators/pickle/templates/email_steps.rb",
|
69
|
+
"rails_generators/pickle/templates/paths.rb",
|
70
|
+
"rails_generators/pickle/templates/pickle.rb",
|
71
|
+
"rails_generators/pickle/templates/pickle_steps.rb",
|
72
|
+
"spec/lib/pickle_adapter_spec.rb",
|
73
|
+
"spec/lib/pickle_config_spec.rb",
|
74
|
+
"spec/lib/pickle_email_parser_spec.rb",
|
75
|
+
"spec/lib/pickle_email_spec.rb",
|
76
|
+
"spec/lib/pickle_parser_matchers_spec.rb",
|
77
|
+
"spec/lib/pickle_parser_spec.rb",
|
78
|
+
"spec/lib/pickle_path_spec.rb",
|
79
|
+
"spec/lib/pickle_session_spec.rb",
|
80
|
+
"spec/lib/pickle_spec.rb",
|
81
|
+
"spec/spec_helper.rb"
|
82
|
+
]
|
83
|
+
s.homepage = %q{http://github.com/ianwhite/pickle/tree}
|
84
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
85
|
+
s.require_paths = ["lib"]
|
86
|
+
s.rubygems_version = %q{1.3.5}
|
87
|
+
s.summary = %q{Easy model creation and reference in your cucumber features}
|
88
|
+
s.test_files = [
|
89
|
+
"spec/lib/pickle_adapter_spec.rb",
|
90
|
+
"spec/lib/pickle_config_spec.rb",
|
91
|
+
"spec/lib/pickle_email_parser_spec.rb",
|
92
|
+
"spec/lib/pickle_email_spec.rb",
|
93
|
+
"spec/lib/pickle_parser_matchers_spec.rb",
|
94
|
+
"spec/lib/pickle_parser_spec.rb",
|
95
|
+
"spec/lib/pickle_path_spec.rb",
|
96
|
+
"spec/lib/pickle_session_spec.rb",
|
97
|
+
"spec/lib/pickle_spec.rb",
|
98
|
+
"spec/spec_helper.rb"
|
99
|
+
]
|
100
|
+
|
101
|
+
if s.respond_to? :specification_version then
|
102
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
103
|
+
s.specification_version = 3
|
104
|
+
|
105
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
106
|
+
else
|
107
|
+
end
|
108
|
+
else
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class PickleGenerator < Rails::Generator::Base
|
2
|
+
def initialize(args, options)
|
3
|
+
super(args, options)
|
4
|
+
@generate_email_steps = args.include?('email')
|
5
|
+
if @generate_path_steps = args.include?('path') || args.include?('paths')
|
6
|
+
File.exists?('features/support/paths.rb') or raise "features/support/paths.rb not found, is your cucumber up to date?"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def manifest
|
11
|
+
record do |m|
|
12
|
+
m.directory File.join('features/step_definitions')
|
13
|
+
m.directory File.join('features/support')
|
14
|
+
|
15
|
+
current_pickle = File.exists?('features/support/pickle.rb') ? File.read('features/support/pickle.rb') : ''
|
16
|
+
pickle_assigns = {:pickle_path => false, :pickle_email => false}
|
17
|
+
|
18
|
+
if @generate_path_steps
|
19
|
+
pickle_assigns[:pickle_path] = true
|
20
|
+
current_paths = File.read('features/support/paths.rb')
|
21
|
+
unless current_paths.include?('#{capture_model}')
|
22
|
+
if current_paths =~ /^(.*)(\n\s+else\n\s+raise "Can't find.*".*$)/m
|
23
|
+
pickle_assigns[:current_paths_header] = $1
|
24
|
+
pickle_assigns[:current_paths_footer] = $2
|
25
|
+
m.template 'paths.rb', File.join('features/support', 'paths.rb'), :assigns => pickle_assigns, :collision => :force
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
if @generate_email_steps
|
31
|
+
pickle_assigns[:pickle_email] = true
|
32
|
+
m.template 'email_steps.rb', File.join('features/step_definitions', 'email_steps.rb')
|
33
|
+
m.template 'email.rb', File.join('features/support', 'email.rb')
|
34
|
+
end
|
35
|
+
|
36
|
+
m.template 'pickle_steps.rb', File.join('features/step_definitions', 'pickle_steps.rb')
|
37
|
+
m.template 'pickle.rb', File.join('features/support', 'pickle.rb'), :assigns => pickle_assigns
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module EmailHelpers
|
2
|
+
# Maps a name to an email address. Used by email_steps
|
3
|
+
|
4
|
+
def email_for(to)
|
5
|
+
case to
|
6
|
+
|
7
|
+
# add your own name => email address mappings here
|
8
|
+
|
9
|
+
when /^#{capture_model}$/
|
10
|
+
model($1).email
|
11
|
+
|
12
|
+
when /^"(.*)"$/
|
13
|
+
$1
|
14
|
+
|
15
|
+
else
|
16
|
+
to
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
World(EmailHelpers)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# this file generated by script/generate pickle email
|
2
|
+
#
|
3
|
+
# add email mappings in features/support/email.rb
|
4
|
+
|
5
|
+
ActionMailer::Base.delivery_method = :test
|
6
|
+
ActionMailer::Base.perform_deliveries = true
|
7
|
+
|
8
|
+
Before do
|
9
|
+
ActionMailer::Base.deliveries.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
# Clear the deliveries array, useful if your background sends email that you want to ignore
|
13
|
+
Given(/^all emails? (?:have|has) been delivered$/) do
|
14
|
+
ActionMailer::Base.deliveries.clear
|
15
|
+
end
|
16
|
+
|
17
|
+
Given(/^(\d)+ emails? should be delivered$/) do |count|
|
18
|
+
emails.size.should == count.to_i
|
19
|
+
end
|
20
|
+
|
21
|
+
Then(/^(\d)+ emails? should be delivered to (.*)$/) do |count, to|
|
22
|
+
emails("to: \"#{email_for(to)}\"").size.should == count.to_i
|
23
|
+
end
|
24
|
+
|
25
|
+
Then(/^(\d)+ emails? should be delivered with #{capture_fields}$/) do |count, fields|
|
26
|
+
emails(fields).size.should == count.to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
Then(/^#{capture_email} should be delivered to (.+)$/) do |email_ref, to|
|
30
|
+
email(email_ref, "to: \"#{email_for(to)}\"").should_not be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
Then(/^#{capture_email} should not be delivered to (.+)$/) do |email_ref, to|
|
34
|
+
email(email_ref, "to: \"#{email_for(to)}\"").should be_nil
|
35
|
+
end
|
36
|
+
|
37
|
+
Then(/^#{capture_email} should have #{capture_fields}$/) do |email_ref, fields|
|
38
|
+
email(email_ref, fields).should_not be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
Then(/^#{capture_email} should contain "(.*)"$/) do |email_ref, text|
|
42
|
+
email(email_ref).body.should =~ /#{text}/
|
43
|
+
end
|
44
|
+
|
45
|
+
Then(/^#{capture_email} should not contain "(.*)"$/) do |email_ref, text|
|
46
|
+
email(email_ref).body.should_not =~ /#{text}/
|
47
|
+
end
|
48
|
+
|
49
|
+
Then(/^#{capture_email} should link to (.+)$/) do |email_ref, page|
|
50
|
+
email(email_ref).body.should =~ /#{path_to(page)}/
|
51
|
+
end
|
52
|
+
|
53
|
+
Then(/^show me the emails?$/) do
|
54
|
+
save_and_open_emails
|
55
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%= current_paths_header %>
|
2
|
+
# added by script/generate pickle path
|
3
|
+
|
4
|
+
when /^#{capture_model}(?:'s)? page$/ # eg. the forum's page
|
5
|
+
path_to_pickle $1
|
6
|
+
|
7
|
+
when /^#{capture_model}(?:'s)? #{capture_model}(?:'s)? page$/ # eg. the forum's post's page
|
8
|
+
path_to_pickle $1, $2
|
9
|
+
|
10
|
+
when /^#{capture_model}(?:'s)? #{capture_model}'s (.+?) page$/ # eg. the forum's post's comments page
|
11
|
+
path_to_pickle $1, $2, :extra => $3 # or the forum's post's edit page
|
12
|
+
|
13
|
+
when /^#{capture_model}(?:'s)? (.+?) page$/ # eg. the forum's posts page
|
14
|
+
path_to_pickle $1, :extra => $2 # or the forum's edit page
|
15
|
+
|
16
|
+
when /^the (.+?) page$/ # translate to named route
|
17
|
+
send "#{$1.downcase.gsub(' ','_')}_path"
|
18
|
+
|
19
|
+
# end added by pickle path
|
20
|
+
<%= current_paths_footer %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# this file generated by script/generate pickle [paths] [email]
|
2
|
+
#
|
3
|
+
# Make sure that you are loading your factory of choice in your cucumber environment
|
4
|
+
#
|
5
|
+
# For machinist add: features/support/machinist.rb
|
6
|
+
#
|
7
|
+
# require 'machinist/active_record' # or your chosen adaptor
|
8
|
+
# require File.dirname(__FILE__) + '/../../spec/blueprints' # or wherever your blueprints are
|
9
|
+
# Before { Sham.reset } # to reset Sham's seed between scenarios so each run has same random sequences
|
10
|
+
#
|
11
|
+
# For FactoryGirl add: features/support/factory_girl.rb
|
12
|
+
#
|
13
|
+
# require 'factory_girl'
|
14
|
+
# require File.dirname(__FILE__) + '/../../spec/factories' # or wherever your factories are
|
15
|
+
#
|
16
|
+
# You may also need to add gem dependencies on your factory of choice in <tt>config/environments/cucumber.rb</tt>
|
17
|
+
|
18
|
+
require 'pickle/world'
|
19
|
+
# Example of configuring pickle:
|
20
|
+
#
|
21
|
+
# Pickle.configure do |config|
|
22
|
+
# config.adapters = [:machinist]
|
23
|
+
# config.map 'I', 'myself', 'me', 'my', :to => 'user: "me"'
|
24
|
+
# end
|
25
|
+
<%- if pickle_path -%>require 'pickle/path/world'
|
26
|
+
<%- end -%>
|
27
|
+
<%- if pickle_email -%>require 'pickle/email/world'
|
28
|
+
<%- end -%>
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# this file generated by script/generate pickle
|
2
|
+
|
3
|
+
# create a model
|
4
|
+
Given(/^#{capture_model} exists?(?: with #{capture_fields})?$/) do |name, fields|
|
5
|
+
create_model(name, fields)
|
6
|
+
end
|
7
|
+
|
8
|
+
# create n models
|
9
|
+
Given(/^(\d+) #{capture_plural_factory} exist(?: with #{capture_fields})?$/) do |count, plural_factory, fields|
|
10
|
+
count.to_i.times { create_model(plural_factory.singularize, fields) }
|
11
|
+
end
|
12
|
+
|
13
|
+
# create models from a table
|
14
|
+
Given(/^the following #{capture_plural_factory} exists?:?$/) do |plural_factory, table|
|
15
|
+
name = plural_factory.singularize
|
16
|
+
table.hashes.each { |hash| create_model(name, hash) }
|
17
|
+
end
|
18
|
+
|
19
|
+
# find a model
|
20
|
+
Then(/^#{capture_model} should exist(?: with #{capture_fields})?$/) do |name, fields|
|
21
|
+
find_model!(name, fields)
|
22
|
+
end
|
23
|
+
|
24
|
+
# not find a model
|
25
|
+
Then(/^#{capture_model} should not exist(?: with #{capture_fields})?$/) do |name, fields|
|
26
|
+
find_model(name, fields).should be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
# find models with a table
|
30
|
+
Then(/^the following #{capture_plural_factory} should exists?:?$/) do |plural_factory, table|
|
31
|
+
name = plural_factory.singularize
|
32
|
+
table.hashes.each { |hash| find_model!(name, hash)}
|
33
|
+
end
|
34
|
+
|
35
|
+
# find exactly n models
|
36
|
+
Then(/^(\d+) #{capture_plural_factory} should exist(?: with #{capture_fields})?$/) do |count, plural_factory, fields|
|
37
|
+
find_models(plural_factory.singularize, fields).size.should == count.to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
# assert equality of models
|
41
|
+
Then(/^#{capture_model} should be #{capture_model}$/) do |a, b|
|
42
|
+
model!(a).should == model!(b)
|
43
|
+
end
|
44
|
+
|
45
|
+
# assert model is in another model's has_many assoc
|
46
|
+
Then(/^#{capture_model} should be (?:in|one of|amongst) #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
47
|
+
model!(owner).send(association).should include(model!(target))
|
48
|
+
end
|
49
|
+
|
50
|
+
# assert model is not in another model's has_many assoc
|
51
|
+
Then(/^#{capture_model} should not be (?:in|one of|amongst) #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
52
|
+
model!(owner).send(association).should_not include(model!(target))
|
53
|
+
end
|
54
|
+
|
55
|
+
# assert model is another model's has_one/belongs_to assoc
|
56
|
+
Then(/^#{capture_model} should be #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
57
|
+
model!(owner).send(association).should == model!(target)
|
58
|
+
end
|
59
|
+
|
60
|
+
# assert model is not another model's has_one/belongs_to assoc
|
61
|
+
Then(/^#{capture_model} should not be #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
62
|
+
model!(owner).send(association).should_not == model!(target)
|
63
|
+
end
|
64
|
+
|
65
|
+
# assert model.predicate?
|
66
|
+
Then(/^#{capture_model} should (?:be|have) (?:an? )?#{capture_predicate}$/) do |name, predicate|
|
67
|
+
model!(name).should send("be_#{predicate.gsub(' ', '_')}")
|
68
|
+
end
|
69
|
+
|
70
|
+
# assert not model.predicate?
|
71
|
+
Then(/^#{capture_model} should not (?:be|have) (?:an? )?#{capture_predicate}$/) do |name, predicate|
|
72
|
+
model!(name).should_not send("be_#{predicate.gsub(' ', '_')}")
|
73
|
+
end
|