cucumber-rails 0.2.4 → 0.3.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/.gitignore +3 -2
- data/HACKING.rdoc +34 -0
- data/History.txt +29 -0
- data/README.rdoc +48 -22
- data/Rakefile +6 -1
- data/VERSION +1 -1
- data/config/.gitignore +1 -0
- data/cucumber-rails.gemspec +49 -25
- data/dev_tasks/cucumber.rake +5 -0
- data/{tasks → dev_tasks}/rspec.rake +0 -0
- data/features/rails2.feature +56 -0
- data/features/rails3.feature +52 -0
- data/features/step_definitions/cucumber_rails_steps.rb +7 -0
- data/features/support/env.rb +4 -0
- data/features/support/matchers/files.rb +17 -0
- data/generators/cucumber/cucumber_generator.rb +27 -134
- data/generators/cucumber/templates/step_definitions/web_steps_ja.rb.erb +136 -0
- data/generators/feature/feature_generator.rb +30 -24
- data/lib/cucumber/rails/capybara_javascript_emulation.rb +25 -14
- data/lib/cucumber/rails/rspec.rb +20 -7
- data/lib/cucumber/rails/world.rb +5 -1
- data/lib/cucumber/web/tableish.rb +67 -65
- data/lib/generators/cucumber/feature/USAGE +16 -0
- data/lib/generators/cucumber/feature/feature_base.rb +29 -0
- data/lib/generators/cucumber/feature/feature_generator.rb +37 -0
- data/lib/generators/cucumber/feature/named_arg.rb +17 -0
- data/lib/generators/cucumber/skeleton/USAGE +21 -0
- data/lib/generators/cucumber/skeleton/skeleton_base.rb +202 -0
- data/lib/generators/cucumber/skeleton/skeleton_generator.rb +64 -0
- data/rvm.yml +22 -0
- data/spec/cucumber/web/tableish_spec.rb +2 -0
- data/spec/generators/cucumber/skeleton/skeleton_base_spec.rb +84 -0
- data/spec/spec.opts +2 -0
- data/{generators/feature/templates → templates/feature}/feature.erb +18 -12
- data/{generators/feature/templates → templates/feature}/steps.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/config/cucumber.yml.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/environments/cucumber.rb.erb +2 -2
- data/{generators/cucumber/templates → templates/skeleton}/script/cucumber +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/step_definitions/capybara_steps.rb.erb +18 -8
- data/{generators/cucumber/templates → templates/skeleton}/step_definitions/web_steps_cs.rb.erb +0 -0
- data/templates/skeleton/step_definitions/web_steps_da.rb.erb +114 -0
- data/{generators/cucumber/templates → templates/skeleton}/step_definitions/web_steps_de.rb.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/step_definitions/web_steps_es.rb.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/step_definitions/web_steps_no.rb.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/step_definitions/web_steps_pt-BR.rb.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/step_definitions/webrat_steps.rb.erb +13 -3
- data/{generators/cucumber/templates → templates/skeleton}/support/_rails_each_run.rb +7 -2
- data/{generators/cucumber/templates → templates/skeleton}/support/_rails_prefork.rb.erb +1 -1
- data/{generators/cucumber/templates → templates/skeleton}/support/capybara.rb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/support/edit_warning.txt +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/support/paths.rb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/support/rails.rb.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/support/rails_spork.rb.erb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/support/webrat.rb +0 -0
- data/{generators/cucumber/templates → templates/skeleton}/tasks/cucumber.rake.erb +1 -1
- metadata +77 -31
@@ -3,20 +3,21 @@ module Cucumber
|
|
3
3
|
module CapybaraJavascriptEmulation
|
4
4
|
def self.included(base)
|
5
5
|
base.class_eval do
|
6
|
-
alias_method :
|
6
|
+
alias_method :click_without_javascript_emulation, :click
|
7
|
+
alias_method :click, :click_with_javascript_emulation
|
7
8
|
end
|
8
9
|
end
|
9
10
|
|
10
|
-
def
|
11
|
-
if
|
11
|
+
def click_with_javascript_emulation
|
12
|
+
if link_with_non_get_http_method?
|
12
13
|
Capybara::Driver::RackTest::Form.new(driver, js_form(self[:href], emulated_method)).submit(self)
|
13
14
|
else
|
14
|
-
|
15
|
+
click_without_javascript_emulation
|
15
16
|
end
|
16
17
|
end
|
17
|
-
|
18
18
|
|
19
19
|
private
|
20
|
+
|
20
21
|
def js_form(action, emulated_method, method = 'POST')
|
21
22
|
js_form = node.document.create_element('form')
|
22
23
|
js_form['action'] = action
|
@@ -33,12 +34,20 @@ module Cucumber
|
|
33
34
|
js_form
|
34
35
|
end
|
35
36
|
|
36
|
-
def
|
37
|
-
|
37
|
+
def link_with_non_get_http_method?
|
38
|
+
if ::Rails.version.to_f >= 3.0
|
39
|
+
tag_name == 'a' && node['data-method'] && node['data-method'] =~ /(?:delete|put|post)/
|
40
|
+
else
|
41
|
+
tag_name == 'a' && node['onclick'] && node['onclick'] =~ /var f = document\.createElement\('form'\); f\.style\.display = 'none';/
|
42
|
+
end
|
38
43
|
end
|
39
44
|
|
40
45
|
def emulated_method
|
41
|
-
|
46
|
+
if ::Rails.version.to_f >= 3.0
|
47
|
+
node['data-method']
|
48
|
+
else
|
49
|
+
node['onclick'][/m\.setAttribute\('value', '([^']*)'\)/, 1]
|
50
|
+
end
|
42
51
|
end
|
43
52
|
end
|
44
53
|
end
|
@@ -47,15 +56,17 @@ end
|
|
47
56
|
class Capybara::Driver::RackTest::Node
|
48
57
|
include Cucumber::Rails::CapybaraJavascriptEmulation
|
49
58
|
end
|
50
|
-
|
51
|
-
Before('
|
59
|
+
|
60
|
+
Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do
|
61
|
+
# Enable javascript emulation
|
52
62
|
Capybara::Driver::RackTest::Node.class_eval do
|
53
|
-
alias_method :click, :
|
63
|
+
alias_method :click, :click_with_javascript_emulation
|
54
64
|
end
|
55
65
|
end
|
56
|
-
|
57
|
-
|
66
|
+
|
67
|
+
Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
|
68
|
+
# Disable javascript emulation
|
58
69
|
Capybara::Driver::RackTest::Node.class_eval do
|
59
|
-
alias_method :click, :
|
70
|
+
alias_method :click, :click_without_javascript_emulation
|
60
71
|
end
|
61
72
|
end
|
data/lib/cucumber/rails/rspec.rb
CHANGED
@@ -1,10 +1,23 @@
|
|
1
1
|
require 'cucumber/rails/world'
|
2
|
-
require 'spec/expectations'
|
3
|
-
require 'spec/rails'
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
begin
|
4
|
+
require 'rspec/expectations'
|
5
|
+
require 'rspec/rails'
|
6
|
+
|
7
|
+
[Cucumber::Rails::World, ActionController::Integration::Session].each do |klass|
|
8
|
+
klass.class_eval do
|
9
|
+
include Rspec::Matchers
|
10
|
+
include Rspec::Rails::Matchers
|
11
|
+
end
|
12
|
+
end
|
13
|
+
rescue LoadError => try_rspec_1
|
14
|
+
require 'spec/expectations'
|
15
|
+
require 'spec/rails'
|
16
|
+
|
17
|
+
[Cucumber::Rails::World, ActionController::Integration::Session].each do |klass|
|
18
|
+
klass.class_eval do
|
19
|
+
include Spec::Matchers
|
20
|
+
include Spec::Rails::Matchers
|
21
|
+
end
|
9
22
|
end
|
10
|
-
end
|
23
|
+
end
|
data/lib/cucumber/rails/world.rb
CHANGED
@@ -6,7 +6,11 @@ unless defined?(Test)
|
|
6
6
|
end
|
7
7
|
|
8
8
|
if defined?(ActiveRecord::Base)
|
9
|
-
|
9
|
+
if Rails.version.to_f >= 3.0
|
10
|
+
require 'rails/test_help'
|
11
|
+
else
|
12
|
+
require 'test_help'
|
13
|
+
end
|
10
14
|
else
|
11
15
|
# I can't do rescue LoadError because in this files could be loaded
|
12
16
|
# from rails gem (ie. load actionpack 2.3.5 if rubygems are not disabled)
|
@@ -1,75 +1,77 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
|
3
3
|
module Cucumber
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
4
|
+
module Web
|
5
|
+
module Tableish
|
6
|
+
# This method returns an Array of Array of String, using CSS3 selectors.
|
7
|
+
# This is particularly handy when using Cucumber's Table#diff! method.
|
8
|
+
#
|
9
|
+
# The +row_selector+ argument must be a String, and picks out all the rows
|
10
|
+
# from the web page's DOM. If the number of cells in each row differs, it
|
11
|
+
# will be constrained by (or padded with) the number of cells in the first row
|
12
|
+
#
|
13
|
+
# The +column_selectors+ argument must be a String or a Proc, picking out
|
14
|
+
# cells from each row. If you pass a Proc, it will be yielded an instance
|
15
|
+
# of Nokogiri::HTML::Element.
|
16
|
+
#
|
17
|
+
# == Example with a table
|
18
|
+
#
|
19
|
+
# <table id="tools">
|
20
|
+
# <tr>
|
21
|
+
# <th>tool</th>
|
22
|
+
# <th>dude</th>
|
23
|
+
# </tr>
|
24
|
+
# <tr>
|
25
|
+
# <td>webrat</td>
|
26
|
+
# <td>bryan</td>
|
27
|
+
# </tr>
|
28
|
+
# <tr>
|
29
|
+
# <td>cucumber</td>
|
30
|
+
# <td>aslak</td>
|
31
|
+
# </tr>
|
32
|
+
# </table>
|
33
|
+
#
|
34
|
+
# t = tableish('table#tools tr', 'td,th')
|
35
|
+
#
|
36
|
+
# == Example with a dl
|
37
|
+
#
|
38
|
+
# <dl id="tools">
|
39
|
+
# <dt>webrat</dt>
|
40
|
+
# <dd>bryan</dd>
|
41
|
+
# <dt>cucumber</dt>
|
42
|
+
# <dd>aslak</dd>
|
43
|
+
# </dl>
|
44
|
+
#
|
45
|
+
# t = tableish('dl#tools dt', lambda{|dt| [dt, dt.next.next]})
|
46
|
+
#
|
47
|
+
def tableish(row_selector, column_selectors)
|
48
|
+
html = defined?(Capybara) ? body : response_body
|
49
|
+
_tableish(html, row_selector, column_selectors)
|
50
|
+
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
52
|
+
def _tableish(html, row_selector, column_selectors) #:nodoc
|
53
|
+
doc = Nokogiri::HTML(html)
|
54
|
+
column_count = nil
|
55
|
+
doc.search(row_selector).map do |row|
|
56
|
+
cells = case(column_selectors)
|
57
|
+
when String
|
58
|
+
row.search(column_selectors)
|
59
|
+
when Proc
|
60
|
+
column_selectors.call(row)
|
61
|
+
end
|
62
|
+
column_count ||= cells.length
|
63
|
+
(0...column_count).map do |n|
|
64
|
+
cell = cells[n]
|
65
|
+
case(cell)
|
66
|
+
when String then cell.strip
|
67
|
+
when nil then ''
|
68
|
+
else cell.text.strip
|
69
|
+
end
|
68
70
|
end
|
69
71
|
end
|
70
72
|
end
|
71
|
-
end
|
73
|
+
end
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
75
|
-
World(Cucumber::Tableish)
|
77
|
+
World(Cucumber::Web::Tableish)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a skeleton for a new feature. Both a simple .feature file and
|
3
|
+
a steps.rb file is generated. This generator should be used with moderation.
|
4
|
+
See http://github.com/aslakhellesoy/cucumber/wikis/feature-coupled-steps-antipattern
|
5
|
+
for details about the dangers involved.
|
6
|
+
|
7
|
+
This generator can take an optional list of attribute pairs similar to Rails'
|
8
|
+
built-in resource generator.
|
9
|
+
|
10
|
+
Examples (Rails 3):
|
11
|
+
`script/rails generate cucumber:feature post` # no attributes
|
12
|
+
`script/rails generate cucumber:feature post title:string body:text published:boolean`
|
13
|
+
|
14
|
+
Examples (Rails 2):
|
15
|
+
`script/generate feature post` # no attributes
|
16
|
+
`script/generate feature post title:string body:text published:boolean`
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Generators
|
3
|
+
module FeatureBase
|
4
|
+
|
5
|
+
def create_directory(m = self, rails2 = false)
|
6
|
+
if rails2
|
7
|
+
m.directory 'features/step_definitions'
|
8
|
+
else
|
9
|
+
m.empty_directory 'features/step_definitions'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_feature_file(m = self)
|
14
|
+
m.template 'feature.erb', "features/manage_#{plural_name}.feature"
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_steps_file(m = self)
|
18
|
+
m.template 'steps.erb', "features/step_definitions/#{singular_name}_steps.rb"
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_support_file(m = self)
|
22
|
+
m.gsub_file 'features/support/paths.rb', /'\/'/mi do |match|
|
23
|
+
"#{match}\n when /the new #{singular_name} page/\n new_#{singular_name}_path\n"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'named_arg')
|
2
|
+
require File.join(File.dirname(__FILE__), 'feature_base')
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
class FeatureGenerator < Rails::Generators::NamedBase
|
6
|
+
|
7
|
+
include Cucumber::Generators::FeatureBase
|
8
|
+
|
9
|
+
argument :fields, :optional => true, :type => :array, :banner => "[field:type, field:type]"
|
10
|
+
|
11
|
+
attr_reader :named_args
|
12
|
+
|
13
|
+
def parse_fields
|
14
|
+
@named_args = @fields.nil? ? [] : @fields.map { |arg| NamedArg.new(arg) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def generate
|
18
|
+
create_directory
|
19
|
+
create_feature_file
|
20
|
+
create_steps_file
|
21
|
+
create_support_file
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.banner
|
25
|
+
"#{$0} cucumber:feature ModelName [field:type, field:type]"
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.gem_root
|
29
|
+
File.expand_path("../../../../../", __FILE__)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.source_root
|
33
|
+
File.join(gem_root, 'templates', 'feature')
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Description:
|
2
|
+
Sets up Cucumber in your Rails project. After running this generator you will
|
3
|
+
get a new rake task called features.
|
4
|
+
|
5
|
+
This also generates the necessary files in the features directory.
|
6
|
+
|
7
|
+
Also see the feature generator, which you can use to generate skeletons
|
8
|
+
for new features.
|
9
|
+
|
10
|
+
Examples (Rails 3):
|
11
|
+
`script/rails generate cucumber:skeleton`
|
12
|
+
|
13
|
+
You can also provide a language argument for localized webrat_steps:
|
14
|
+
`script/rails generate cucumber:skeleton de`
|
15
|
+
|
16
|
+
Examples (Rails 2):
|
17
|
+
`script/generate cucumber`
|
18
|
+
|
19
|
+
You can also provide a language argument for localized webrat_steps:
|
20
|
+
`script/generate cucumber de`
|
21
|
+
|
@@ -0,0 +1,202 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Generators
|
3
|
+
module SkeletonBase
|
4
|
+
|
5
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
|
6
|
+
|
7
|
+
# Checks and prints the limitations
|
8
|
+
def check_upgrade_limitations
|
9
|
+
if File.exist?('features/step_definitions/webrat_steps.rb')
|
10
|
+
STDERR.puts "Please remove features/step_definitions/webrat_steps.rb\n" +
|
11
|
+
"See upgrading instructions for 0.2.0 in History.txt"
|
12
|
+
exit(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
if File.exist?('features/support/version_check.rb')
|
16
|
+
STDERR.puts "Please remove features/support/version_check.rb\n" +
|
17
|
+
"See upgrading instructions for 0.2.0 in History.txt"
|
18
|
+
exit(1)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Creates templates
|
23
|
+
def create_templates(m = self, rails2 = false)
|
24
|
+
m.template 'config/cucumber.yml.erb', 'config/cucumber.yml'
|
25
|
+
if rails2
|
26
|
+
m.template 'environments/cucumber.rb.erb', 'config/environments/cucumber.rb'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def configure_gemfile(m = self, rails2 = false)
|
31
|
+
require 'thor-ext'
|
32
|
+
unless rails2
|
33
|
+
puts "Update Rails 3 Gemfile for cucumber"
|
34
|
+
gsub_file 'Gemfile', /('|")gem/, "\1\ngem"
|
35
|
+
add_gem('database_cleaner', '>=0.5.0') unless has_plugin? 'database_cleaner'
|
36
|
+
if driver == :capybara
|
37
|
+
add_gem('capybara', '>=0.3.0')
|
38
|
+
else
|
39
|
+
add_gem('webrat', '>=0.7.0') unless has_plugin? 'webrat'
|
40
|
+
end
|
41
|
+
if framework == :rspec
|
42
|
+
add_gem('rspec', '>=1.3.0') unless has_plugin? 'rspec'
|
43
|
+
add_gem('rspec-rails', '>=1.3.2') unless has_plugin? 'rspec-rails'
|
44
|
+
end
|
45
|
+
if spork?
|
46
|
+
add_gem('spork''>=0.7.5') unless has_plugin? 'spork'
|
47
|
+
end
|
48
|
+
add_gems(%w{cucumber cucumber-rails})
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_scripts(m = self, rails2 = false)
|
53
|
+
if rails2
|
54
|
+
m.file 'script/cucumber', 'script/cucumber', {
|
55
|
+
:chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang]
|
56
|
+
}
|
57
|
+
else
|
58
|
+
m.copy_file 'script/cucumber', 'script/cucumber'
|
59
|
+
m.chmod 'script/cucumber', 0755
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_step_definitions(m = self, rails2 = false)
|
64
|
+
if rails2
|
65
|
+
m.directory 'features/step_definitions'
|
66
|
+
else
|
67
|
+
m.empty_directory 'features/step_definitions'
|
68
|
+
end
|
69
|
+
|
70
|
+
m.template "step_definitions/#{driver}_steps.rb.erb", 'features/step_definitions/web_steps.rb'
|
71
|
+
if language != 'en'
|
72
|
+
m.template "step_definitions/web_steps_#{language}.rb.erb", "features/step_definitions/web_steps_#{language}.rb"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def create_feature_support(m = self, rails2 = false)
|
77
|
+
if rails2
|
78
|
+
m.directory 'features/support'
|
79
|
+
m.file 'support/paths.rb', 'features/support/paths.rb'
|
80
|
+
|
81
|
+
if spork?
|
82
|
+
m.template 'support/rails_spork.rb.erb', 'features/support/env.rb'
|
83
|
+
else
|
84
|
+
m.template 'support/rails.rb.erb', 'features/support/env.rb'
|
85
|
+
end
|
86
|
+
else
|
87
|
+
m.empty_directory 'features/support'
|
88
|
+
m.copy_file 'support/paths.rb', 'features/support/paths.rb'
|
89
|
+
|
90
|
+
if spork?
|
91
|
+
m.template 'support/rails_spork.rb.erb', 'features/support/env.rb'
|
92
|
+
else
|
93
|
+
m.template 'support/rails.rb.erb', 'features/support/env.rb'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def create_tasks(m = self, rails2 = false)
|
99
|
+
if rails2
|
100
|
+
m.directory 'lib/tasks'
|
101
|
+
else
|
102
|
+
m.empty_directory 'lib/tasks'
|
103
|
+
end
|
104
|
+
|
105
|
+
m.template 'tasks/cucumber.rake.erb', 'lib/tasks/cucumber.rake'
|
106
|
+
end
|
107
|
+
|
108
|
+
def create_database(m = self, rails2 = false)
|
109
|
+
unless File.read('config/database.yml').include? 'cucumber:'
|
110
|
+
m.gsub_file 'config/database.yml', /^test:.*\n/, "test: &TEST\n"
|
111
|
+
m.gsub_file 'config/database.yml', /\z/, "\ncucumber:\n <<: *TEST"
|
112
|
+
|
113
|
+
# Since gsub_file doesn't ask the user, just inform user that the file was overwritten.
|
114
|
+
puts " force config/database.yml"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def print_instructions
|
119
|
+
require 'cucumber/formatter/ansicolor'
|
120
|
+
extend Cucumber::Formatter::ANSIColor
|
121
|
+
|
122
|
+
if @default_driver
|
123
|
+
puts <<-WARNING
|
124
|
+
|
125
|
+
#{yellow_cukes(15)}
|
126
|
+
|
127
|
+
#{yellow_cukes(1)} D R I V E R A L E R T #{yellow_cukes(1)}
|
128
|
+
|
129
|
+
You didn't explicitly generate with --capybara or --webrat, so I looked at
|
130
|
+
your gems and saw that you had #{green(@default_driver.to_s)} installed, so I went with that.
|
131
|
+
If you want something else, be specific about it. Otherwise, relax.
|
132
|
+
|
133
|
+
#{yellow_cukes(15)}
|
134
|
+
|
135
|
+
WARNING
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
protected
|
140
|
+
|
141
|
+
def detect_current_driver
|
142
|
+
detect_in_env([['capybara', :capybara], ['webrat', :webrat]])
|
143
|
+
end
|
144
|
+
|
145
|
+
def detect_default_driver
|
146
|
+
@default_driver = first_loadable([['capybara', :capybara], ['webrat', :webrat]])
|
147
|
+
raise "I don't know which driver you want. Use --capybara or --webrat, or gem install capybara or webrat." unless @default_driver
|
148
|
+
@default_driver
|
149
|
+
end
|
150
|
+
|
151
|
+
def detect_current_framework
|
152
|
+
detect_in_env([['spec', :rspec]]) || :testunit
|
153
|
+
end
|
154
|
+
|
155
|
+
def detect_default_framework
|
156
|
+
# TODO need to check this - defaulting to :testunit has been moved from first_loadable
|
157
|
+
# It's unlikely that we don't have test/unit since it comes with Ruby
|
158
|
+
@default_framework ||= first_loadable([['rspec', :rspec]])
|
159
|
+
end
|
160
|
+
|
161
|
+
def spork?
|
162
|
+
options[:spork]
|
163
|
+
end
|
164
|
+
|
165
|
+
def embed_file(source, indent='')
|
166
|
+
IO.read(File.join(self.class.source_root, source)).gsub(/^/, indent)
|
167
|
+
end
|
168
|
+
|
169
|
+
def embed_template(source, indent='')
|
170
|
+
template = File.join(self.class.source_root, source)
|
171
|
+
ERB.new(IO.read(template), nil, '-').result(binding).gsub(/^/, indent)
|
172
|
+
end
|
173
|
+
|
174
|
+
def version
|
175
|
+
IO.read(File.join(self.class.gem_root, 'VERSION')).chomp
|
176
|
+
end
|
177
|
+
|
178
|
+
def first_loadable(libraries)
|
179
|
+
require 'rubygems'
|
180
|
+
|
181
|
+
libraries.each do |lib_name, lib_key|
|
182
|
+
return lib_key if Gem.available?(lib_name)
|
183
|
+
end
|
184
|
+
|
185
|
+
nil
|
186
|
+
end
|
187
|
+
|
188
|
+
def detect_in_env(choices)
|
189
|
+
return nil unless File.file?("features/support/env.rb")
|
190
|
+
|
191
|
+
env = IO.read("features/support/env.rb")
|
192
|
+
|
193
|
+
choices.each do |choice|
|
194
|
+
detected = choice[1] if env =~ /#{choice[0]}/n
|
195
|
+
return detected if detected
|
196
|
+
end
|
197
|
+
|
198
|
+
nil
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|