guard-cucumber 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -102,6 +102,11 @@ Former `:color`, `:drb`, `:port` and `:profile` options are thus deprecated and
102
102
  # other shell script.
103
103
  # The example generates: 'xvfb-run bundle exec cucumber ...'
104
104
  # default: nil
105
+
106
+ :focus_on => 'dev' # Focus on scenarios tagged with '@dev'
107
+ # If '@dev' is on line 6 in 'foo.feature',
108
+ # this example runs: 'bundle exec cucumber foo.feature:6'
109
+ # default: nil
105
110
  ```
106
111
 
107
112
  ## Cucumber configuration
@@ -165,6 +170,16 @@ end
165
170
 
166
171
  There is a section with alternative configurations on the [Wiki](https://github.com/netzpirat/guard-cucumber/wiki/Spork-configurations).
167
172
 
173
+ ## Cucumber with Zeus
174
+
175
+ To use Guard::Cucumber with [Zeus](https://github.com/burke/zeus), just set the command prefix:
176
+ ```
177
+ guard 'cucumber', :cli => '--format progress --no-profile', :command_prefix => 'zeus' do
178
+ ...
179
+ end
180
+ ```
181
+ You may also want to set `:bundler => false` to avoid using Bundler, as recommended in the Zeus documenation.
182
+
168
183
  Issues
169
184
  ------
170
185
 
@@ -206,7 +221,7 @@ and follow [@netzpirat](https://twitter.com/#!/netzpirat) on Twitter for project
206
221
 
207
222
  ## Contributors
208
223
 
209
- See the GitHub list of [contributors](https://github.com/netzpirat/guard-jasmine/contributors).
224
+ See the GitHub list of [contributors](https://github.com/netzpirat/guard-cucumber/contributors).
210
225
 
211
226
  Since guard-cucumber is very close to guard-rspec, some contributions by the following authors have been
212
227
  incorporated into guard-cucumber:
@@ -12,6 +12,7 @@ module Guard
12
12
 
13
13
  autoload :Runner, 'guard/cucumber/runner'
14
14
  autoload :Inspector, 'guard/cucumber/inspector'
15
+ autoload :Focuser, 'guard/cucumber/focuser'
15
16
 
16
17
  attr_accessor :last_failed, :failed_path
17
18
 
@@ -0,0 +1,81 @@
1
+ module Guard
2
+ class Cucumber
3
+
4
+ # The Cucumber focuser updates cucumber feature paths to
5
+ # focus on sections tagged with a provided focus_tag.
6
+ #
7
+ # For example, if the `foo.feature` file has the provided focus tag
8
+ # `@bar` on line 8, then the path will be updated using the cucumber
9
+ # syntax for focusing on a section:
10
+ #
11
+ # foo.feature:8
12
+ #
13
+ # If '@bar' is found on lines 8 and 16, the path is updated as follows:
14
+ #
15
+ # foo.feature:8:16
16
+ #
17
+ # The path is not updated if it does not contain the focus tag.
18
+ #
19
+ module Focuser
20
+ class << self
21
+
22
+ # Focus the supplied paths using the provided focus tag.
23
+ #
24
+ # @param [Array<String>] paths the locations of the feature files
25
+ # @param [String] focus_tag the focus tag to look for in each path
26
+ # @return [Array<String>] the updated paths
27
+ #
28
+ def focus(paths, focus_tag)
29
+ return false if paths.empty?
30
+
31
+ paths.inject([]) do |updated_paths, path|
32
+ focused_line_numbers = scan_path_for_focus_tag(path, focus_tag)
33
+
34
+ unless focused_line_numbers.empty?
35
+ updated_paths << append_line_numbers_to_path(
36
+ focused_line_numbers, path
37
+ )
38
+ else
39
+ updated_paths << path
40
+ end
41
+
42
+ updated_paths
43
+ end
44
+ end
45
+
46
+ # Checks to see if the file at path contains the focus tag
47
+ #
48
+ # @param [String] path the file path to search
49
+ # @param [String] focus_tag the focus tag to look for in each path
50
+ # @return [Array<Integer>] the line numbers that include the focus tag in path
51
+ #
52
+ def scan_path_for_focus_tag(path, focus_tag)
53
+ line_numbers = []
54
+
55
+ File.open(path, 'r') do |f|
56
+ while (line = f.gets)
57
+ if line.include?(focus_tag)
58
+ line_numbers << f.lineno
59
+ end
60
+ end
61
+ end
62
+
63
+ line_numbers
64
+ end
65
+
66
+ # Appends the line numbers to the path
67
+ #
68
+ # @param [Array<Integer>] line_numbers the line numbers to append to the path
69
+ # @param [String] path the path that will receive the appended line numbers
70
+ # @return [String] the string containing the path appended with the line number
71
+ #
72
+ def append_line_numbers_to_path(line_numbers, path)
73
+ line_numbers.each { |num| path += ':' + num.to_s }
74
+
75
+ path
76
+ end
77
+
78
+ end
79
+ end
80
+ end
81
+ end
@@ -27,7 +27,7 @@ module Guard
27
27
 
28
28
  # Tests if the file is the features folder.
29
29
  #
30
- # @param [String] file the file
30
+ # @param [String] path the file
31
31
  # @param [Array<String>] feature_sets the feature sets
32
32
  # @return [Boolean] when the file is the feature folder
33
33
  #
@@ -37,7 +37,7 @@ module Guard
37
37
 
38
38
  # Tests if the file is valid.
39
39
  #
40
- # @param [String] file the file
40
+ # @param [String] path the file
41
41
  # @param [Array<String>] feature_sets the feature sets
42
42
  # @return [Boolean] when the file valid
43
43
  #
@@ -21,6 +21,8 @@ module Guard
21
21
  return false if paths.empty?
22
22
 
23
23
  message = options[:message] || (paths == ['features'] ? "Running all Cucumber features: #{ cucumber_command(paths, options) }" : "Running Cucumber features: #{ cucumber_command(paths, options) }")
24
+ paths = options[:focus_on] ? Focuser.focus(paths, options[:focus_on]) : paths
25
+
24
26
  UI.info message, :reset => true
25
27
 
26
28
  system(cucumber_command(paths, options))
@@ -41,7 +43,7 @@ module Guard
41
43
  def cucumber_command(paths, options)
42
44
  cmd = []
43
45
  cmd << options[:command_prefix] if options[:command_prefix]
44
- cmd << "rvm #{options[:rvm].join(',')} exec" if options[:rvm].is_a?(Array)
46
+ cmd << "rvm #{ options[:rvm].join(',') } exec" if options[:rvm].is_a?(Array)
45
47
  cmd << 'bundle exec' if (bundler? && options[:bundler] != false) || (bundler? && options[:binstubs].is_a?(TrueClass))
46
48
  cmd << cucumber_exec(options)
47
49
  cmd << options[:cli] if options[:cli]
@@ -49,9 +51,9 @@ module Guard
49
51
  if options[:notification] != false
50
52
  notification_formatter_path = File.expand_path(File.join(File.dirname(__FILE__), 'notification_formatter.rb'))
51
53
  cmd << "--require #{ notification_formatter_path }"
52
- cmd << "--format Guard::Cucumber::NotificationFormatter"
54
+ cmd << '--format Guard::Cucumber::NotificationFormatter'
53
55
  cmd << "--out #{ null_device }"
54
- cmd << (options[:feature_sets] || ['features']).map {|path| "--require #{path}"}.join(' ')
56
+ cmd << (options[:feature_sets] || ['features']).map {|path| "--require #{ path }"}.join(' ')
55
57
  end
56
58
 
57
59
  (cmd + paths).join(' ')
@@ -62,7 +64,7 @@ module Guard
62
64
  # @return [String] Cucumber executable
63
65
  #
64
66
  def cucumber_exec(options = {})
65
- options[:binstubs] == true && ( bundler? || options[:bundler] != false ) ? "bin/cucumber" : "cucumber"
67
+ options[:binstubs] == true && ( bundler? || options[:bundler] != false ) ? 'bin/cucumber' : 'cucumber'
66
68
  end
67
69
 
68
70
  # Simple test if bundler should be used. it just checks for the `Gemfile`.
@@ -70,7 +72,7 @@ module Guard
70
72
  # @return [Boolean] bundler exists
71
73
  #
72
74
  def bundler?
73
- @bundler ||= File.exist?("#{Dir.pwd}/Gemfile")
75
+ @bundler ||= File.exist?("#{ Dir.pwd }/Gemfile")
74
76
  end
75
77
 
76
78
  # Returns a null device for all OS.
@@ -1,6 +1,6 @@
1
1
  module Guard
2
2
  module CucumberVersion
3
3
  # Guard::Cucumber version that is used for the Gem specification
4
- VERSION = '1.2.2'
4
+ VERSION = '1.3.0'
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-31 00:00:00.000000000 Z
12
+ date: 2012-12-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guard
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: 1.2.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.1'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
46
62
  description: Guard::Cucumber automatically run your features (much like autotest)
47
63
  email:
48
64
  - michi@netzpiraten.ch
@@ -50,6 +66,7 @@ executables: []
50
66
  extensions: []
51
67
  extra_rdoc_files: []
52
68
  files:
69
+ - lib/guard/cucumber/focuser.rb
53
70
  - lib/guard/cucumber/inspector.rb
54
71
  - lib/guard/cucumber/notification_formatter.rb
55
72
  - lib/guard/cucumber/runner.rb
@@ -71,9 +88,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
71
88
  - - ! '>='
72
89
  - !ruby/object:Gem::Version
73
90
  version: '0'
74
- segments:
75
- - 0
76
- hash: 646156643643387503
77
91
  required_rubygems_version: !ruby/object:Gem::Requirement
78
92
  none: false
79
93
  requirements:
@@ -82,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
96
  version: 1.3.6
83
97
  requirements: []
84
98
  rubyforge_project: guard-cucumber
85
- rubygems_version: 1.8.24
99
+ rubygems_version: 1.8.23
86
100
  signing_key:
87
101
  specification_version: 3
88
102
  summary: Guard plugin for Cucumber