cucumber-rails 0.4.1 → 0.5.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/History.txt +9 -0
  2. data/README.md +74 -0
  3. data/config/cucumber.yml +1 -0
  4. data/cucumber-rails.gemspec +18 -18
  5. data/features/capybara_javascript_drivers.feature +1 -0
  6. data/features/emulate_javascript.feature +33 -0
  7. data/features/multiple_databases.feature +74 -0
  8. data/features/no_database.feature +1 -0
  9. data/features/pseduo_class_selectors.feature +24 -0
  10. data/features/select_dates.feature +36 -0
  11. data/features/step_definitions/cucumber_rails_steps.rb +1 -0
  12. data/lib/cucumber/rails.rb +1 -5
  13. data/lib/cucumber/rails/capybara/javascript_emulation.rb +4 -4
  14. data/lib/cucumber/rails/capybara/select_dates_and_times.rb +1 -1
  15. data/lib/cucumber/rails/hooks/database_cleaner.rb +0 -25
  16. data/lib/generators/cucumber/feature/feature_generator.rb +7 -16
  17. data/{templates/feature → lib/generators/cucumber/feature/templates}/feature.erb +0 -0
  18. data/{templates/feature → lib/generators/cucumber/feature/templates}/steps.erb +0 -0
  19. data/lib/generators/cucumber/install/install_generator.rb +68 -23
  20. data/{templates/install → lib/generators/cucumber/install/templates}/config/cucumber.yml.erb +0 -0
  21. data/{templates/install → lib/generators/cucumber/install/templates}/environments/cucumber.rb.erb +0 -4
  22. data/{templates/install → lib/generators/cucumber/install/templates}/script/cucumber +0 -0
  23. data/{templates/install/step_definitions/capybara_steps.rb.erb → lib/generators/cucumber/install/templates/step_definitions/web_steps.rb.erb} +2 -2
  24. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_cs.rb.erb +0 -0
  25. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_da.rb.erb +0 -0
  26. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_de.rb.erb +15 -24
  27. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_es.rb.erb +0 -0
  28. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_ja.rb.erb +0 -0
  29. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_ko.rb.erb +0 -0
  30. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_no.rb.erb +0 -0
  31. data/{templates/install → lib/generators/cucumber/install/templates}/step_definitions/web_steps_pt-BR.rb.erb +0 -0
  32. data/{templates/install → lib/generators/cucumber/install/templates}/support/_rails_each_run.rb.erb +12 -0
  33. data/{templates/install → lib/generators/cucumber/install/templates}/support/_rails_prefork.rb.erb +0 -0
  34. data/{templates/install → lib/generators/cucumber/install/templates}/support/capybara.rb +0 -0
  35. data/{templates/install → lib/generators/cucumber/install/templates}/support/edit_warning.txt +0 -0
  36. data/{templates/install → lib/generators/cucumber/install/templates}/support/paths.rb +3 -3
  37. data/{templates/install → lib/generators/cucumber/install/templates}/support/rails.rb.erb +1 -1
  38. data/{templates/install → lib/generators/cucumber/install/templates}/support/rails_spork.rb.erb +1 -1
  39. data/{templates/install → lib/generators/cucumber/install/templates}/support/selectors.rb +3 -3
  40. data/{templates/install → lib/generators/cucumber/install/templates}/support/web_steps_warning.txt +0 -0
  41. data/{templates/install → lib/generators/cucumber/install/templates}/tasks/cucumber.rake.erb +0 -0
  42. metadata +64 -73
  43. data/HACKING.rdoc +0 -22
  44. data/README.rdoc +0 -68
  45. data/VERSION +0 -1
  46. data/generators/cucumber/USAGE +0 -13
  47. data/generators/cucumber/cucumber_generator.rb +0 -46
  48. data/generators/feature/USAGE +0 -12
  49. data/generators/feature/feature_generator.rb +0 -47
  50. data/lib/cucumber/rails/version.rb +0 -22
  51. data/lib/cucumber/rails2.rb +0 -16
  52. data/lib/cucumber/rails2/action_controller.rb +0 -29
  53. data/lib/generators/cucumber/feature/feature_base.rb +0 -29
  54. data/lib/generators/cucumber/install/install_base.rb +0 -149
  55. data/templates/install/step_definitions/webrat_steps.rb.erb +0 -277
  56. data/templates/install/support/webrat.rb +0 -8
data/History.txt CHANGED
@@ -1,3 +1,12 @@
1
+ == 0.5.0.beta1
2
+
3
+ * Dropped support for Rails 2 (Aslak Hellesøy)
4
+ * Dropped support for Webrat (Aslak Hellesøy)
5
+ * Removed database cleaner strategy overrides (#134 Daniel Morrison, Daniel Duvall)
6
+ * Upgrade to Capybara 1.0.0.beta1 or newer (#130 Simon Menke, Klaus Hartl, Aslak Hellesøy)
7
+ * Generated paths.rb cleanup (#133 Tim Pope)
8
+ * Allow css pseudo-classes in scopers (#122 twalpole)
9
+
1
10
  == 0.4.1 2011-04-05
2
11
 
3
12
  === Bugfixes
data/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # Cucumber-Rails
2
+
3
+ Cucumber-Rails brings Cucumber to Rails3. It contains 2 generators - one
4
+ for bootstrapping your Rails app for Cucumber, and a second one for generating features.
5
+
6
+ Cucumber-Rails also contains Cucumber Step Definitions that wrap Capybara,
7
+ giving you a head start for writing Cucumber features against your Rails app.
8
+
9
+ ## Installation
10
+
11
+ Before you can use the generator, add the gem to your project's Gemfile as follows:
12
+
13
+ group :test do
14
+ gem 'cucumber-rails'
15
+ # database_cleaner is not required, but highly recommended
16
+ gem 'database_cleaner'
17
+ end
18
+
19
+ Then install it by running:
20
+
21
+ bundle install
22
+
23
+ Learn about the various options:
24
+
25
+ ruby rails generate cucumber:install --help
26
+
27
+ Finally, bootstrap your Rails app, for example:
28
+
29
+ rails generate cucumber:install
30
+
31
+ ## Generating a Cucumber feature
32
+
33
+ IMPORTANT: Only do this if you are new to Cucumber. We recommend you write your
34
+ Cucumber features by hand once you get the hang of it.
35
+
36
+ Example:
37
+
38
+ ruby rails generate cucumber:feature post title:string body:text published:boolean
39
+ ruby rails generate scaffold post title:string body:text published:boolean
40
+ rake db:migrate
41
+ rake cucumber
42
+
43
+ ## Running Cucumber
44
+
45
+ With Rake:
46
+
47
+ rake cucumber
48
+
49
+ Without Rake:
50
+
51
+ [bundle exec] cucumber
52
+
53
+ ## Hacking on Cucumber-Rails
54
+
55
+ If you have a bugfix or a new feature you want to contribute, please fork on Github and make your own feature branch:
56
+
57
+ git clone git@github.com:you/cucumber-rails.git
58
+ git checkout -b 87-my-awesome-bugfix
59
+
60
+ The feature branch should contain a ticket number (if applicable) and a descriptive name that aligns with the ticket name.
61
+ When you think you're done send a pull request.
62
+
63
+ ### Setting up your environment
64
+
65
+ I strongly recommend rvm and ruby 1.9.2. When you have that, cd into your cucumber-rails repository and:
66
+
67
+ gem install bundler
68
+ bundle install
69
+
70
+ ### Running all features
71
+
72
+ rake cucumber
73
+
74
+ One of the features uses MongoDB, which needs to be running in order to make features/mongoid.feature to pass.
@@ -0,0 +1 @@
1
+ default: --tags ~@broken
@@ -1,36 +1,36 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
- require 'cucumber/rails/version'
4
3
 
5
4
  Gem::Specification.new do |s|
6
5
  s.name = 'cucumber-rails'
7
- s.version = Cucumber::Rails::VERSION
6
+ s.version = '0.5.0.beta1'
8
7
  s.authors = ["Aslak Hellesøy", "Dennis Blöte", "Rob Holland"]
9
8
  s.description = "Cucumber Generators and Runtime for Rails"
10
- s.summary = "cucumber-rails-#{s.version}"
9
+ s.summary = "#{s.name}-#{s.version}"
11
10
  s.email = 'cukes@googlegroups.com'
12
11
  s.homepage = "http://cukes.info"
13
12
 
14
- s.add_dependency('cucumber', Cucumber::Rails::DEPS['cucumber'])
15
- s.add_dependency('rack-test', Cucumber::Rails::DEPS['rack-test'])
16
- s.add_dependency('nokogiri', Cucumber::Rails::DEPS['nokogiri'])
17
- s.add_development_dependency('bundler', Cucumber::Rails::DEPS['bundler'])
18
- s.add_development_dependency('aruba', Cucumber::Rails::DEPS['aruba'])
19
- s.add_development_dependency('rails', Cucumber::Rails::DEPS['rails'])
20
- s.add_development_dependency('sqlite3-ruby', Cucumber::Rails::DEPS['sqlite3-ruby'])
21
- s.add_development_dependency('rspec-rails', Cucumber::Rails::DEPS['rspec-rails'])
22
- s.add_development_dependency('capybara', Cucumber::Rails::DEPS['capybara'])
23
- s.add_development_dependency('webrat', Cucumber::Rails::DEPS['webrat'])
24
- s.add_development_dependency('database_cleaner', Cucumber::Rails::DEPS['database_cleaner'])
25
- s.add_development_dependency('mongoid', Cucumber::Rails::DEPS['mongoid'])
26
- s.add_development_dependency('bson_ext', Cucumber::Rails::DEPS['bson_ext'])
27
- s.add_development_dependency('akephalos', Cucumber::Rails::DEPS['akephalos'])
13
+ s.add_dependency('cucumber', '>= 0.10.2')
14
+ s.add_dependency('rack-test', '>= 0.5.7')
15
+ s.add_dependency('nokogiri', '>= 1.4.4')
16
+ s.add_dependency('capybara', '>= 1.0.0.beta1')
17
+ s.add_development_dependency('bundler', '>= 1.0.12')
18
+ s.add_development_dependency('aruba', '>= 0.3.6')
19
+ s.add_development_dependency('rails', '>= 3.0.7')
20
+ s.add_development_dependency('sqlite3-ruby', '>= 1.3.3')
21
+ s.add_development_dependency('rspec', '>= 2.6.0.rc6')
22
+ s.add_development_dependency('rspec-rails', '>= 2.2.0')
23
+ s.add_development_dependency('factory_girl', '>= 2.0.0.beta2')
24
+ s.add_development_dependency('database_cleaner', '>= 0.6.7')
25
+ s.add_development_dependency('mongoid', '>= 2.0.1')
26
+ s.add_development_dependency('bson_ext', '>= 1.3.0')
27
+ # s.add_development_dependency('akephalos', '>= 0.2.5')
28
28
 
29
29
  s.rubygems_version = ">= 1.6.1"
30
30
  s.files = `git ls-files`.split("\n")
31
31
  s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
32
32
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
33
- s.extra_rdoc_files = ["LICENSE", "README.rdoc", "History.txt"]
33
+ s.extra_rdoc_files = ["LICENSE", "README.md", "History.txt"]
34
34
  s.rdoc_options = ["--charset=UTF-8"]
35
35
  s.require_path = "lib"
36
36
  end
@@ -1,3 +1,4 @@
1
+ @broken
1
2
  Feature: Capybara Javascript Drivers
2
3
 
3
4
  Background: A simple calendar app
@@ -0,0 +1,33 @@
1
+ Feature: Emulate Javascript
2
+
3
+ Scenario: Delete a widget
4
+ Given I have created a new Rails 3 app "widgets" with cucumber-rails support
5
+ And I successfully run `rails generate scaffold widget name:string`
6
+ And I write to "features/f.feature" with:
7
+ """
8
+ Feature: Widget inventory
9
+ Scenario: Delete a widget
10
+ Given there is a widget named "wrench"
11
+ When I go to the widgets page
12
+ And I follow "Destroy"
13
+ Then I should not see "wrench"
14
+ """
15
+ And I write to "features/step_definitions/s.rb" with:
16
+ """
17
+ Given /^there is a widget named "([^"]*)"$/ do |name|
18
+ Factory(:widget, :name => name)
19
+ end
20
+ """
21
+ And I write to "features/support/factories.rb" with:
22
+ """
23
+ Factory.define :widget do |f|
24
+ f.name 'testwidget'
25
+ end
26
+ """
27
+ When I run `rake db:migrate cucumber`
28
+ Then it should pass with:
29
+ """
30
+ 1 scenario (1 passed)
31
+ 4 steps (4 passed)
32
+ """
33
+
@@ -0,0 +1,74 @@
1
+ Feature: Multiple Databases
2
+ In order to use Database Cleaner with multiple database repositories
3
+ As an engineer
4
+ I want to specify explicit strategies for each
5
+
6
+ Background: A Rails 3 app utilizing multiple database repositories exists
7
+ Given I have created a new Rails 3 app "rails-3-app" with cucumber-rails support
8
+ And I remove the file "features/step_definitions/web_steps.rb"
9
+ And I append to "config/database.yml" with:
10
+ """
11
+
12
+ ursidae:
13
+ adapter: sqlite3
14
+ database: db/ursidae.sqlite3
15
+ """
16
+ And I write to "app/models/bear.rb" with:
17
+ """
18
+ class Bear < ActiveRecord::Base
19
+ establish_connection "ursidae"
20
+ end
21
+ """
22
+ And a directory named "db/migrate"
23
+ And I write to "db/migrate/001_create_bears.rb" with:
24
+ """
25
+ class CreateBears < ActiveRecord::Migration
26
+ def self.up
27
+ if Rails.env == 'ursidae'
28
+ create_table :bears do |t|
29
+ t.string :name, :null => false
30
+ end
31
+ add_index :bears, :name, :unique => true
32
+ end
33
+ end
34
+ end
35
+ """
36
+ And I successfully run `bundle exec rake db:migrate`
37
+ And I successfully run `bundle exec rake db:migrate RAILS_ENV=ursidae`
38
+ And I write to "features/support/env.rb" with:
39
+ """
40
+ require 'cucumber/rails'
41
+ DatabaseCleaner.strategy = :transaction
42
+ DatabaseCleaner[:active_record, {:connection => "ursidae"}].strategy = :truncation
43
+ """
44
+ And I write to "features/create_bear.feature" with:
45
+ """
46
+ Feature: Screws up in transactional test and must use truncation
47
+ Scenario: I create a bear
48
+ When I create a bear
49
+ And something transactional happens
50
+ """
51
+ And I write to "features/step_definitions/create_bear_steps.rb" with:
52
+ """
53
+ When /^I create a bear$/ do
54
+ Bear.create!(:name => "yogi")
55
+ end
56
+ When /^something transactional happens$/ do
57
+ Bear.transaction { Bear.find_by_name("yogi").lock! }
58
+ end
59
+ """
60
+
61
+ Scenario: Default transactional strategy is not attempted on second database
62
+ When I run `bundle exec rake cucumber FEATURE=features/create_bear.feature`
63
+ Then it should pass with:
64
+ """
65
+ 1 scenario (1 passed)
66
+ 2 steps (2 passed)
67
+ """
68
+ And the output should not contain "cannot rollback - no transaction is active"
69
+
70
+ Scenario: Truncation strategy is used on the second database
71
+ Given I successfully run `bundle exec rails runner 'Bear.create(:name => "boo boo")'`
72
+ And I successfully run `bundle exec rake cucumber FEATURE=features/create_bear.feature`
73
+ When I run `bundle exec rails runner 'raise "ahh! bears!" if Bear.count > 0'`
74
+ Then the exit status should be 0
@@ -1,3 +1,4 @@
1
+ @announce
1
2
  Feature: No Database
2
3
  Allow Cucumber to work with a Rails app without a database
3
4
 
@@ -0,0 +1,24 @@
1
+ Feature: Pseudo-class Selectors
2
+
3
+ Scenario: Look within css pseudo-class selectors
4
+ Given a project without ActiveRecord
5
+ And a cukes resource
6
+ And I write to "app/views/cukes/index.html.erb" with:
7
+ """
8
+ <div>foo</div>
9
+ <div>bar</div>
10
+ """
11
+ And I write to "features/tests.feature" with:
12
+ """
13
+ Feature: Tests
14
+ Scenario: Tests
15
+ When I go to the cukes page
16
+ Then I should see "bar" within "div:nth-child(2)"
17
+ And I should not see "foo" within "div:nth-child(2)"
18
+ """
19
+ And I run `rake cucumber`
20
+ Then it should pass with:
21
+ """
22
+ 1 scenario (1 passed)
23
+ 3 steps (3 passed)
24
+ """
@@ -53,6 +53,42 @@ Feature: Select dates
53
53
  <% end %>
54
54
  """
55
55
  When I run `bundle exec rake db:migrate cucumber`
56
+ Then it should pass with:
57
+ """
58
+ 1 scenario (1 passed)
59
+ 6 steps (6 passed)
60
+ """
61
+
62
+ Scenario: Select date when the order of fields is changed and label is set to the first select
63
+ Given I successfully run `bundle exec rails g scaffold appointment name:string when:date`
64
+ And I write to "features/create_appointment.feature" with:
65
+ """
66
+ Feature: Create appointments
67
+ Scenario: Constitution on May 17
68
+ Given I am on the new appointment page
69
+ And I fill in "Norway's constitution" for "Name"
70
+ And I select "2009-02-20" as the "When" date
71
+ And I press "Create Appointment"
72
+ Then I should see "Norway's constitution"
73
+ And I should see "2009-02-20"
74
+ """
75
+ And I write to "app/views/appointments/_form.html.erb" with:
76
+ """
77
+ <%= form_for(@appointment) do |f| %>
78
+ <div class="field">
79
+ <%= f.label :name %><br />
80
+ <%= f.text_field :name %>
81
+ </div>
82
+ <div class="field">
83
+ <%= f.label :when, :for => "appointment_when_2i" %><br />
84
+ <%= f.date_select :when, :order=>[:month, :day, :year] %>
85
+ </div>
86
+ <div class="actions">
87
+ <%= f.submit %>
88
+ </div>
89
+ <% end %>
90
+ """
91
+ When I run `bundle exec rake db:migrate cucumber`
56
92
  Then it should pass with:
57
93
  """
58
94
  1 scenario (1 passed)
@@ -12,6 +12,7 @@ Given /^I have created a new Rails 3 app "([^"]*)" with cucumber\-rails support$
12
12
  gem "capybara", :group => :test
13
13
  gem "rspec-rails", :group => :test
14
14
  gem "database_cleaner", :group => :test
15
+ gem 'factory_girl', :group => :test
15
16
 
16
17
  """
17
18
  And I successfully run `bundle exec rails generate cucumber:install`
@@ -1,9 +1,5 @@
1
1
  require 'rails'
2
- if Rails.version.to_f < 3.0
3
- require 'cucumber/rails2'
4
- else
5
- require 'cucumber/rails3'
6
- end
2
+ require 'cucumber/rails3'
7
3
 
8
4
  require 'cucumber/rails/world'
9
5
  require 'cucumber/rails/hooks'
@@ -11,7 +11,7 @@ module Cucumber
11
11
 
12
12
  def click_with_javascript_emulation
13
13
  if link_with_non_get_http_method?
14
- ::Capybara::Driver::RackTest::Form.new(driver, js_form(element_node.document, self[:href], emulated_method)).submit(self)
14
+ ::Capybara::RackTest::Form.new(driver, js_form(element_node.document, self[:href], emulated_method)).submit(self)
15
15
  else
16
16
  click_without_javascript_emulation
17
17
  end
@@ -64,20 +64,20 @@ module Cucumber
64
64
  end
65
65
  end
66
66
 
67
- class Capybara::Driver::RackTest::Node
67
+ class Capybara::RackTest::Node
68
68
  include ::Cucumber::Rails::Capybara::JavascriptEmulation
69
69
  end
70
70
 
71
71
  Before('~@no-js-emulation') do
72
72
  # Enable javascript emulation
73
- ::Capybara::Driver::RackTest::Node.class_eval do
73
+ ::Capybara::RackTest::Node.class_eval do
74
74
  alias_method :click, :click_with_javascript_emulation
75
75
  end
76
76
  end
77
77
 
78
78
  Before('@no-js-emulation') do
79
79
  # Disable javascript emulation
80
- ::Capybara::Driver::RackTest::Node.class_eval do
80
+ ::Capybara::RackTest::Node.class_eval do
81
81
  alias_method :click, :click_without_javascript_emulation
82
82
  end
83
83
  end
@@ -28,7 +28,7 @@ module Cucumber
28
28
 
29
29
  # @example "event_starts_at_"
30
30
  def get_base_dom_id_from_label_tag(field)
31
- find(:xpath, "//label[contains(., '#{field}')]")['for'].gsub(/(_1i)$/, '')
31
+ find(:xpath, "//label[contains(., '#{field}')]")['for'].gsub(/(_[1-5]i)$/, '')
32
32
  end
33
33
  end
34
34
  end
@@ -1,32 +1,7 @@
1
- # Default setup for DatabaseCleaner that will work for most projects.
2
- # If you need your own setup, roll your own.
3
1
  begin
4
2
  require 'database_cleaner'
5
3
 
6
4
  Before do
7
- begin
8
- $__cucumber_global_database_cleaner_strategy ||= DatabaseCleaner.connections[0].strategy # There is no accessor on the DatabaseCleaner
9
- rescue DatabaseCleaner::NoStrategySetError => e
10
- e.message << "\nYou can set the strategy in your features/support/env.rb"
11
- end
12
- end
13
-
14
- Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do
15
- DatabaseCleaner.strategy = $__cucumber_global_database_cleaner_strategy
16
- end
17
-
18
- Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
19
- DatabaseCleaner.strategy = :truncation
20
- end
21
-
22
- Before do
23
- # TODO: May have to patch DatabaseCleaner's Transaction class to do what we used to do:
24
- # run_callbacks :setup if respond_to?(:run_callbacks)
25
- # IIRC There was a cucumber-rails ticket that added that to support multiple connections...
26
- # Similar in After (use run_callbacks :teardown if respond_to?(:run_callbacks))
27
- #
28
- # May also have to add this to Transaction:
29
- # include ActiveSupport::Testing::SetupAndTeardown if ActiveSupport::Testing.const_defined?("SetupAndTeardown")
30
5
  DatabaseCleaner.start
31
6
  end
32
7
 
@@ -1,11 +1,9 @@
1
1
  require File.join(File.dirname(__FILE__), 'named_arg')
2
- require File.join(File.dirname(__FILE__), 'feature_base')
3
2
 
4
3
  module Cucumber
5
4
  class FeatureGenerator < ::Rails::Generators::NamedBase
5
+ source_root File.expand_path("../templates", __FILE__)
6
6
 
7
- include Cucumber::Generators::FeatureBase
8
-
9
7
  argument :fields, :optional => true, :type => :array, :banner => "[field:type, field:type]"
10
8
 
11
9
  attr_reader :named_args
@@ -15,23 +13,16 @@ module Cucumber
15
13
  end
16
14
 
17
15
  def generate
18
- create_directory
19
- create_feature_file
20
- create_steps_file
21
- create_support_file
16
+ empty_directory 'features/step_definitions'
17
+ template 'feature.erb', "features/manage_#{plural_name}.feature"
18
+ template 'steps.erb', "features/step_definitions/#{singular_name}_steps.rb"
19
+ gsub_file 'features/support/paths.rb', /'\/'/mi do |match|
20
+ "#{match}\n when /the new #{singular_name} page/\n new_#{singular_name}_path\n"
21
+ end
22
22
  end
23
23
 
24
24
  def self.banner
25
25
  "#{$0} cucumber:feature ModelName [field:type, field:type]"
26
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
27
  end
37
28
  end