gurke 1.0.1 → 2.0.0.dev.1.b17

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.
@@ -0,0 +1,41 @@
1
+ module Gurke
2
+ #
3
+ class Step
4
+ #
5
+ # Return path to file containing this scenario.
6
+ #
7
+ # @return [String] File path.
8
+ #
9
+ attr_reader :file
10
+
11
+ # Return line number where the scenario is defined.
12
+ #
13
+ # @return [Fixnum] Line number.
14
+ #
15
+ attr_reader :line
16
+
17
+ attr_reader :type
18
+
19
+ # @api private
20
+ attr_reader :raw
21
+
22
+ # @api private
23
+ def initialize(file, line, type, raw)
24
+ @file, @line = file, line
25
+ @type, @raw = type, raw
26
+ end
27
+
28
+ def name
29
+ raw.name
30
+ end
31
+ alias_method :to_s, :name
32
+
33
+ def keyword
34
+ raw.keyword
35
+ end
36
+
37
+ def doc_string
38
+ raw.doc_string.value if raw.doc_string
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,31 @@
1
+ module Gurke
2
+ #
3
+ class StepDefinition
4
+ #
5
+ attr_reader :pattern, :method_name, :opts
6
+
7
+ def initialize(pattern, opts = {})
8
+ @pattern = pattern
9
+ @opts = opts
10
+ end
11
+
12
+ def method_name
13
+ "#{type.to_s.capitalize} #{pattern}"
14
+ end
15
+
16
+ def type
17
+ opts[:type] || :any
18
+ end
19
+
20
+ def match(name, type = :any)
21
+ match = pattern.match(name)
22
+
23
+ return unless match
24
+ return if self.type != :any && self.type != type
25
+
26
+ Match.new(method_name, match.to_a[1..-1])
27
+ end
28
+
29
+ class Match < Struct.new(:method_name, :params); end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ module Gurke
2
+ #
3
+ module Steps
4
+ #
5
+ # rubocop:disable MethodName
6
+ def Given(step)
7
+ rst = self.class.find_step(step, self, :given)
8
+ send rst.method_name
9
+ end
10
+
11
+ def When(step)
12
+ rst = self.class.find_step(step, self, :when)
13
+ send rst.method_name
14
+ end
15
+
16
+ def Then(step)
17
+ rst = self.class.find_step(step, self, :then)
18
+ send rst.method_name
19
+ end
20
+
21
+ class << self
22
+ def find_step(step, world, type)
23
+ matches = world.methods.map do |method|
24
+ next unless method.to_s.start_with?('match: ')
25
+ world.send(method.to_s, step.to_s, type)
26
+ end.compact
27
+
28
+ case matches.size
29
+ when 0 then raise Gurke::StepPending.new step.to_s
30
+ when 1 then matches.first
31
+ else raise Gurke::StepAmbiguous.new step.to_s
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,41 @@
1
+ module Gurke
2
+ #
3
+ class Tag
4
+ #
5
+ # Return path to file containing this feature.
6
+ #
7
+ # @return [String] File path.
8
+ #
9
+ attr_reader :file
10
+
11
+ # Return line number where this feature is defined.
12
+ #
13
+ # @return [Fixnum] Line number.
14
+ #
15
+ attr_reader :line
16
+
17
+ # @api private
18
+ attr_reader :raw
19
+
20
+ # @api private
21
+ def initialize(file, line, raw)
22
+ @file, @line, @raw = file, line, raw
23
+ end
24
+
25
+ def name
26
+ raw.name[1..-1]
27
+ end
28
+
29
+ def to_s
30
+ name
31
+ end
32
+
33
+ def match?(rule)
34
+ p rule
35
+ p name
36
+ negated = rule[0] == '~'
37
+ name = negated ? rule[1..-1] : rule
38
+ negated != (self.name == name)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,14 @@
1
+ module Gurke
2
+ #
3
+ module VERSION
4
+ MAJOR = 2
5
+ MINOR = 0
6
+ PATCH = 0
7
+ STAGE = :dev
8
+ STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.').freeze
9
+
10
+ def self.to_s
11
+ STRING
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,91 +1,107 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gurke
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0.dev.1.b17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-22 00:00:00.000000000 Z
11
+ date: 2014-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: cucumber
14
+ name: trollop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: gherkin
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: colorize
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
- version: '1.3'
48
- type: :development
47
+ version: '0'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: '1.3'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
69
- description: A description
68
+ version: '1.3'
69
+ description: An alternative gherkin feature runner inspired by rspec and turnip.
70
70
  email:
71
71
  - jg@altimos.de
72
- executables: []
72
+ executables:
73
+ - gurke
73
74
  extensions: []
74
75
  extra_rdoc_files: []
75
76
  files:
76
- - ".gitignore"
77
- - Gemfile
78
77
  - LICENSE.txt
79
78
  - README.md
80
- - Rakefile
79
+ - bin/gurke
80
+ - features/gurke.feature
81
+ - features/gurke.rb
82
+ - features/gurke/backtrace_filtering.feature
83
+ - features/gurke/filter_by_tags.feature
84
+ - features/gurke/step_specific_definitions.feature
85
+ - features/support/steps/cli_steps.rb
86
+ - features/support/steps/file_steps.rb
81
87
  - gurke.gemspec
82
88
  - lib/gurke.rb
83
- - lib/gurke/current.rb
84
- - lib/gurke/formatter.rb
85
- - lib/gurke/formatters/base.rb
86
- - lib/gurke/formatters/headless.rb
87
- - lib/gurke/hooks.rb
88
- - lib/gurke/patch/cucumber_cli_configuration.rb
89
+ - lib/gurke/background.rb
90
+ - lib/gurke/builder.rb
91
+ - lib/gurke/capybara.rb
92
+ - lib/gurke/cli.rb
93
+ - lib/gurke/configuration.rb
94
+ - lib/gurke/dsl.rb
95
+ - lib/gurke/feature.rb
96
+ - lib/gurke/reporter.rb
97
+ - lib/gurke/rspec.rb
98
+ - lib/gurke/runner.rb
99
+ - lib/gurke/scenario.rb
100
+ - lib/gurke/step.rb
101
+ - lib/gurke/step_definition.rb
102
+ - lib/gurke/steps.rb
103
+ - lib/gurke/tag.rb
104
+ - lib/gurke/version.rb
89
105
  homepage: https://github.com/jgraichen/gurke
90
106
  licenses:
91
107
  - MIT
@@ -96,18 +112,25 @@ require_paths:
96
112
  - lib
97
113
  required_ruby_version: !ruby/object:Gem::Requirement
98
114
  requirements:
99
- - - ">="
115
+ - - ! '>='
100
116
  - !ruby/object:Gem::Version
101
117
  version: '0'
102
118
  required_rubygems_version: !ruby/object:Gem::Requirement
103
119
  requirements:
104
- - - ">="
120
+ - - ! '>'
105
121
  - !ruby/object:Gem::Version
106
- version: '0'
122
+ version: 1.3.1
107
123
  requirements: []
108
124
  rubyforge_project:
109
- rubygems_version: 2.2.1
125
+ rubygems_version: 2.2.2
110
126
  signing_key:
111
127
  specification_version: 4
112
- summary: A summary
113
- test_files: []
128
+ summary: An alternative gherkin feature runner inspired by rspec and turnip.
129
+ test_files:
130
+ - features/gurke.feature
131
+ - features/gurke.rb
132
+ - features/gurke/backtrace_filtering.feature
133
+ - features/gurke/filter_by_tags.feature
134
+ - features/gurke/step_specific_definitions.feature
135
+ - features/support/steps/cli_steps.rb
136
+ - features/support/steps/file_steps.rb
data/.gitignore DELETED
@@ -1,19 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- .idea
19
- *.iml
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in gurke-formatters-headless.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
@@ -1,39 +0,0 @@
1
- module Gurke
2
- class Current
3
- attr_accessor :scenario, :step, :feature
4
-
5
- class << self
6
- def instance
7
- @instance ||= new
8
- end
9
-
10
- def scenario
11
- instance.scenario
12
- end
13
-
14
- def feature
15
- instance.feature
16
- end
17
-
18
- def step
19
- instance.step
20
- end
21
- end
22
-
23
- class Formatter < Gurke::Formatters::Base
24
- def before_scenario(scenario)
25
- Current.instance.scenario = scenario
26
- end
27
-
28
- def before_step(step)
29
- Current.instance.step = step
30
- end
31
-
32
- def before_feature(feature)
33
- Current.instance.feature = feature
34
- end
35
- end
36
-
37
- ::Gurke::Formatter.use Formatter
38
- end
39
- end
@@ -1,180 +0,0 @@
1
- require 'active_support/core_ext/string/inflections'
2
- require 'gurke/formatters/base'
3
-
4
- module Gurke
5
- class Formatter
6
- attr_reader :runtime, :options
7
- attr_reader :current_feature, :current_step
8
-
9
- def initialize(runtime, path_or_io, options)
10
- @runtime, @path_or_io, @options = runtime, path_or_io, options
11
-
12
- self.class.formatters.each do |klass, opts|
13
- if klass.respond_to?(:gurkig?) && klass.gurkig?
14
- formatters << klass.new(self, opts)
15
- else
16
- legacy << klass.new(runtime, path_or_io, options)
17
- end
18
- end
19
-
20
- at_exit { invoke :after, :all }
21
-
22
- self.class.instance = self
23
- end
24
-
25
- def formatters
26
- @formatters ||= []
27
- end
28
-
29
- def legacy
30
- @legacy ||= []
31
- end
32
-
33
- ## -- Before callbacks --
34
-
35
- def before_features(features)
36
- invoke :before, :all
37
- invoke :before, :features, [features]
38
- end
39
-
40
- def before_feature(feature)
41
- invoke :before, :feature, [feature]
42
- end
43
-
44
- def before_tags(tags)
45
- invoke :before, :tags, [tags]
46
- end
47
-
48
- def before_background(background)
49
- invoke :before, :background, [background]
50
- end
51
-
52
- def before_steps(steps)
53
- invoke :before, :steps, [steps]
54
- end
55
-
56
- def before_step(step)
57
- invoke :before, :step, [step]
58
- end
59
-
60
- def before_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line)
61
- invoke :before, :step_result, [keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line]
62
- end
63
-
64
- def before_feature_element(element)
65
- invoke :before, :feature_element, [element]
66
- invoke :before, :scenario, args: [element]
67
- end
68
-
69
- ## -- Element callbacks --
70
-
71
- def manual_step(step, opts)
72
- invoke nil, :manual_step, args: [step, opts]
73
- end
74
-
75
- def feature_name(name, description)
76
- invoke nil, :feature_name, [name, description]
77
- end
78
-
79
- def tag_name(name)
80
- invoke nil, :tag_name, [name]
81
- end
82
-
83
- def background_name(keyword, name, file_colon_line, source_indent)
84
- invoke nil, :background_name, [keyword, name, file_colon_line, source_indent]
85
- end
86
-
87
- def scenario_name(keyword, name, file_colon_line, source_indent)
88
- invoke nil, :scenario_name, [keyword, name, file_colon_line, source_indent]
89
- end
90
-
91
- def step_name(keyword, step_match, status, source_indent, background, file_colon_line)
92
- invoke nil, :step_name, [keyword, step_match, status, source_indent, background, file_colon_line]
93
- end
94
-
95
- def exception(exception, status)
96
- invoke nil, :exception, [exception, status]
97
- end
98
-
99
- ## -- After callbacks --
100
-
101
- def after_feature_element(element)
102
- invoke :after, :feature_element, [element]
103
- invoke :after, :scenario, args: [element]
104
- end
105
-
106
- def after_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line)
107
- invoke :after, :step_result, [keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line]
108
- end
109
-
110
- def after_step(step)
111
- invoke :after, :step, [step]
112
- end
113
-
114
- def after_steps(steps)
115
- invoke :after, :steps, [steps]
116
- end
117
-
118
- def after_background(background)
119
- invoke :after, :background, [background]
120
- end
121
-
122
- def after_tags(tags)
123
- invoke :after, :tags, [tags]
124
- end
125
-
126
- def after_feature(feature)
127
- invoke :after, :feature, [feature]
128
- end
129
-
130
- def after_features(features)
131
- invoke :after, :features, [features]
132
- end
133
-
134
- private
135
- def invoke(type, name, args = {})
136
- args = { args: args, legacy: args } if Array === args
137
-
138
- if args[:args]
139
- (type == :after ? formatters.reverse : formatters).each do |fmt|
140
- mth = type.nil? ? name : "#{type}_#{name}"
141
- fmt.send mth, *args[:args] if fmt.respond_to? mth
142
- end
143
- end
144
-
145
- if args[:legacy]
146
- legacy.each do |fmt|
147
- mth = type.nil? ? name : "#{type}_#{name}"
148
- fmt.send mth, *args[:legacy] if fmt.respond_to? mth
149
- end
150
- end
151
- end
152
-
153
- class << self
154
- attr_reader :legacy_formatter
155
- attr_accessor :instance
156
-
157
- def formatters
158
- @formatters ||= {}
159
- end
160
-
161
- def config(&block)
162
- instance_eval &block
163
- end
164
-
165
- def use(formatter, options = {})
166
- klass = lookup_formatter(formatter)
167
- raise InvalidArgument.new 'Cannot find formatters `#{formatters}\'.' unless klass
168
-
169
- formatters[klass] = options
170
- end
171
-
172
- private
173
- def lookup_formatter(formatter)
174
- return formatter if formatter.is_a? Class
175
- formatter.camelize.safe_constantize
176
- end
177
- end
178
- end
179
- end
180
-