gauge-ruby 0.1.1 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 514aa253e16a9b0b2119820b3f5afa0bb0277d1f
4
- data.tar.gz: 6a060abc1853aa62afaeb3ed1626fcc14b5b2f90
3
+ metadata.gz: c12089561835ca4f98c3832d2507b37d9f0ba03f
4
+ data.tar.gz: 852373f669d336e8f828fbcb0f59d19fac3d251a
5
5
  SHA512:
6
- metadata.gz: c6663fcf99dad1adc3ca8ed6c2332296d8d3a923a002726d3ed4fbf1b435afbccbdb6ee6c30a7fa7527d4f4320526c20b581c4ef0f6eb4e2f45ce877675a6e33
7
- data.tar.gz: 0a5744c577558d3c45ceeef89a851d6fd3dac9b693295778dd64ce6490cc26dcecc037b6cf7951c1121575a1ea4100ec8dcf70cd215e9723181a68085b68a5b7
6
+ metadata.gz: f6aa6d61e8fa9f9904f49f646971efac4aa4f34a0f72f620f08fb95d4b47450f326d11242fc6e434339aa45bb0a21678bfcb7806d6d8e76e98224be7c93f849d
7
+ data.tar.gz: af4914cf14c84260a9c97a66e14ed124a9ae3ca9e29d31dc1fe2c7b8be1fb531c0b8c5c12e74ce233f59d869e0200d3c1a3d8f283216dfe0785ed52b55b5633d
data/lib/code_parser.rb CHANGED
@@ -34,7 +34,7 @@ module Gauge
34
34
  args = step_args_from_code code
35
35
  param_positions.sort_by!(&:newPosition).each { |e|
36
36
  if e.oldPosition == -1
37
- new_params[e.newPosition] = new_param_values[e.newPosition]
37
+ new_params[e.newPosition] = "arg_#{new_param_values[e.newPosition].downcase.split.join('_')}"
38
38
  else
39
39
  new_params[e.newPosition] = args[e.oldPosition].children[0]
40
40
  end
data/lib/executor.rb CHANGED
@@ -33,10 +33,18 @@ module Gauge
33
33
  end
34
34
  end
35
35
 
36
- def self.execute_hooks(hooks, currentExecutionInfo)
36
+ def self.execute_hooks(hooks, currentExecutionInfo, should_filter)
37
37
  begin
38
38
  hooks.each do |hook|
39
- hook.call(currentExecutionInfo)
39
+ if !should_filter || hook[:options][:tags].length == 0
40
+ next hook[:block].call(currentExecutionInfo)
41
+ end
42
+ tags = currentExecutionInfo.currentSpec.tags + currentExecutionInfo.currentScenario.tags
43
+ intersection = (tags & hook[:options][:tags])
44
+ if (hook[:options][:operator] == 'OR' && intersection.length > 0) ||
45
+ (hook[:options][:operator] == 'AND' && intersection.length == hook[:options][:tags].length)
46
+ hook[:block].call(currentExecutionInfo)
47
+ end
40
48
  end
41
49
  return nil
42
50
  rescue Exception => e
data/lib/gauge.rb CHANGED
@@ -26,16 +26,30 @@ module Kernel
26
26
  # @!macro [attach] self.hook
27
27
  # @method $1(&block)
28
28
  # @api public
29
- # @param block [block], this block is called while executing the $1 hook
29
+ # @param block [block] this block is called while executing the $1 hook
30
30
  # @example
31
31
  # $1 do
32
32
  # puts "I am the $1 hook"
33
33
  # end
34
34
  def hook(hook)
35
- define_method hook do |&block|
36
- Gauge::MethodCache.send("add_#{hook}_hook".to_sym, &block)
35
+ define_method hook do |options={}, &block|
36
+ Gauge::MethodCache.send("add_#{hook}_hook".to_sym, options, &block)
37
37
  end
38
38
  end
39
+
40
+ # @!macro [attach] self.tagged_hook
41
+ # @method $1(options, &block)
42
+ # @api public
43
+ # @param block [block] this block is called while executing the $1 hook
44
+ # @param {{tags: ['list', 'of', 'tags'], operator: 'OR' | 'AND'}} options specify tags and operator for which this $1 execution hook should run.
45
+ # @example
46
+ # $1({tags: ['tag2', 'tag1'], operator: 'OR'}) do
47
+ # puts "I am the $1 hook"
48
+ # end
49
+ def tagged_hook(hook)
50
+ hook(hook)
51
+ end
52
+
39
53
  end
40
54
 
41
55
  # Specify implementation for a given step
@@ -69,7 +83,7 @@ module Kernel
69
83
  # # |Mingle |Agile project management |
70
84
  # # |Snap |Hosted continuous integration|
71
85
  # # |Gocd |Continuous delivery platform |
72
- #
86
+ #
73
87
  # step 'Step that takes a table <table>' do |table|
74
88
  # # note the extra <table> that is added to the description
75
89
  # puts x.columns.join("|")
@@ -87,19 +101,19 @@ module Kernel
87
101
  end
88
102
 
89
103
  # Invoked before execution of every step.
90
- hook "before_step"
104
+ tagged_hook "before_step"
91
105
  # Invoked after execution of every step.
92
- hook "after_step"
106
+ tagged_hook "after_step"
93
107
  # Invoked before execution of every specification.
94
- hook "before_spec"
108
+ tagged_hook "before_spec"
95
109
  # Invoked after execution of every specification.
96
- hook "after_spec"
110
+ tagged_hook "after_spec"
97
111
  # Invoked before execution of every scenario.
98
- hook "before_scenario"
112
+ tagged_hook "before_scenario"
99
113
  # Invoked after execution of every scenario.
100
- hook "after_scenario"
114
+ tagged_hook "after_scenario"
101
115
  # Invoked before execution of the entire suite.
102
116
  hook "before_suite"
103
117
  # Invoked after execution of the entire suite.
104
118
  hook "after_suite"
105
- end
119
+ end
@@ -0,0 +1,54 @@
1
+ # Copyright 2015 ThoughtWorks, Inc.
2
+
3
+ # This file is part of Gauge-Ruby.
4
+
5
+ # Gauge-Ruby is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+
10
+ # Gauge-Ruby is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ # @api public
19
+ module Gauge
20
+ class << self
21
+ # @api public
22
+ # Custom Messages for Gauge
23
+ # Lets you send custom execution messages to Gauge which are printed in reports.
24
+ #
25
+ # @example
26
+ # Gauge.write_message 'The answer is 42.'
27
+ def write_message(message)
28
+ GaugeMessages.instance.write(message)
29
+ end
30
+ end
31
+
32
+ # @api private
33
+ class GaugeMessages
34
+ def initialize
35
+ @messages = []
36
+ end
37
+
38
+ def self.instance
39
+ @gauge_messages ||= GaugeMessages.new
40
+ end
41
+
42
+ def write(message)
43
+ @messages.push(message)
44
+ end
45
+
46
+ def get
47
+ @messages
48
+ end
49
+
50
+ def clear
51
+ @messages = []
52
+ end
53
+ end
54
+ end
data/lib/method_cache.rb CHANGED
@@ -20,14 +20,19 @@ module Gauge
20
20
  # @api private
21
21
  class MethodCache
22
22
  ["before_step", "after_step", "before_spec", "after_spec", "before_scenario", "after_scenario", "before_suite", "after_suite"].each { |hook|
23
- define_singleton_method "add_#{hook}_hook" do |&block|
24
- self.class_variable_get("@@#{hook}_hooks").push block
23
+ define_singleton_method "add_#{hook}_hook" do |options={}, &block|
24
+ options = {operator: "AND", tags: []}.merge options
25
+ self.class_variable_get("@@#{hook}_hooks").push :block=> block, :options=> options
25
26
  end
26
27
  define_singleton_method "get_#{hook}_hooks" do
27
28
  self.class_variable_get("@@#{hook}_hooks")
28
29
  end
29
30
  }
30
-
31
+
32
+ def self.clear_hooks(hook)
33
+ self.class_variable_get("@@#{hook}_hooks").clear
34
+ end
35
+
31
36
  def self.add_step(parameterized_step_text, &block)
32
37
  @@steps_map[parameterized_step_text] = block
33
38
  end
@@ -77,4 +82,4 @@ module Gauge
77
82
  # hack : get the 'main' object and include the configured includes there.
78
83
  # can be removed once we have scoped execution.
79
84
  MethodCache.add_before_suite_hook { Configuration.include_configured_modules }
80
- end
85
+ end
@@ -21,9 +21,9 @@ module Gauge
21
21
  module Processors
22
22
  # @api private
23
23
  module ExecutionHandler
24
- def handle_hooks_execution(hooks, message, currentExecutionInfo)
24
+ def handle_hooks_execution(hooks, message, currentExecutionInfo, should_filter=true)
25
25
  start_time= Time.now
26
- execution_error = Executor.execute_hooks(hooks, currentExecutionInfo)
26
+ execution_error = Executor.execute_hooks(hooks, currentExecutionInfo, should_filter)
27
27
  if execution_error == nil
28
28
  return handle_pass message, time_elapsed_since(start_time)
29
29
  else
@@ -16,17 +16,18 @@
16
16
  # along with Gauge-Ruby. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
18
  require_relative "execution_handler"
19
+ require_relative "../gauge_messages"
19
20
 
20
21
  module Gauge
21
22
  module Processors
22
23
  include ExecutionHandler
23
24
 
24
25
  def process_execution_start_request(message)
25
- handle_hooks_execution(MethodCache.get_before_suite_hooks, message, message.executionStartingRequest.currentExecutionInfo)
26
+ handle_hooks_execution(MethodCache.get_before_suite_hooks, message, message.executionStartingRequest.currentExecutionInfo,false)
26
27
  end
27
28
 
28
29
  def process_execution_end_request(message)
29
- handle_hooks_execution(MethodCache.get_after_suite_hooks, message, message.executionEndingRequest.currentExecutionInfo)
30
+ handle_hooks_execution(MethodCache.get_after_suite_hooks, message, message.executionEndingRequest.currentExecutionInfo, false)
30
31
  end
31
32
 
32
33
  def process_spec_execution_start_request(message)
@@ -46,11 +47,14 @@ module Gauge
46
47
  end
47
48
 
48
49
  def process_step_execution_start_request(message)
50
+ Gauge::GaugeMessages.instance.clear
49
51
  handle_hooks_execution(MethodCache.get_before_step_hooks, message, message.stepExecutionStartingRequest.currentExecutionInfo)
50
52
  end
51
53
 
52
54
  def process_step_execution_end_request(message)
53
- handle_hooks_execution(MethodCache.get_after_step_hooks, message, message.stepExecutionEndingRequest.currentExecutionInfo)
55
+ response = handle_hooks_execution(MethodCache.get_after_step_hooks, message, message.stepExecutionEndingRequest.currentExecutionInfo)
56
+ response.executionStatusResponse.executionResult.message = Gauge::GaugeMessages.instance.get
57
+ return response
54
58
  end
55
59
  end
56
- end
60
+ end
data/lib/table.rb CHANGED
@@ -30,14 +30,41 @@ module Gauge
30
30
 
31
31
  # Gets the column headers of the table
32
32
  # @return [string[]]
33
+ # @deprecated Use [] accessor instead
33
34
  def columns
34
35
  @columns
35
36
  end
36
37
 
37
38
  # Gets the rows of the table. The rows are two dimensional arrays.
38
39
  # @return [string[][]]
40
+ # @deprecated Use {#[]} accessor instead
39
41
  def rows
40
42
  @rows
41
43
  end
44
+
45
+ # Gets the table data.
46
+ # @param index Either row index, or Column name.
47
+ # @return [Hash] When an integer index is passed. Values correspond to a the row in the table with the index.
48
+ # @example
49
+ # table[0] => {"Col1" => "Row1.Cell1", "Col2" => "Row2.Col1", ...}
50
+ # table[i] => nil # when index is out of range
51
+ # @return [string[]] When a string key is passed. Values correspond to the respective cells in a row, matching the index of value in Column headers.
52
+ # @example
53
+ # table["Col1"] => ["Row1.Cell1", "Row1.Cell1", ...]
54
+ # table["Invalid_Col_Name"] => nil
55
+ def [](index)
56
+ return row_values_as_hash(@rows[index]) if index.is_a?(Integer)
57
+ column_values_as_array(index)
58
+ end
59
+
60
+ private
61
+ def row_values_as_hash(row)
62
+ row.nil? ? nil : Hash[@columns.zip(row)]
63
+ end
64
+
65
+ def column_values_as_array(col_name)
66
+ i = @columns.index col_name
67
+ i.nil? ? nil : @rows.map { |r| r[i] }
68
+ end
42
69
  end
43
- end
70
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gauge-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gauge Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-15 00:00:00.000000000 Z
11
+ date: 2016-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-protocol-buffers
@@ -42,28 +42,28 @@ dependencies:
42
42
  name: parser
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.2'
47
+ version: '2.3'
48
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: '2.2'
54
+ version: '2.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: method_source
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.8.2
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.8.2
69
69
  description: Adds Ruby support into Gauge tests
@@ -80,6 +80,7 @@ files:
80
80
  - lib/datastore.rb
81
81
  - lib/executor.rb
82
82
  - lib/gauge.rb
83
+ - lib/gauge_messages.rb
83
84
  - lib/gauge_runtime.rb
84
85
  - lib/message_processor.rb
85
86
  - lib/messages.pb.rb
@@ -97,7 +98,7 @@ files:
97
98
  - lib/table.rb
98
99
  homepage: http://www.getgauge.io
99
100
  licenses:
100
- - GPLv3
101
+ - GPL-3.0
101
102
  metadata: {}
102
103
  post_install_message:
103
104
  rdoc_options: []
@@ -105,17 +106,17 @@ require_paths:
105
106
  - lib
106
107
  required_ruby_version: !ruby/object:Gem::Requirement
107
108
  requirements:
108
- - - '>='
109
+ - - ">="
109
110
  - !ruby/object:Gem::Version
110
- version: '0'
111
+ version: '1.9'
111
112
  required_rubygems_version: !ruby/object:Gem::Requirement
112
113
  requirements:
113
- - - '>='
114
+ - - ">="
114
115
  - !ruby/object:Gem::Version
115
- version: '0'
116
+ version: '1.9'
116
117
  requirements: []
117
118
  rubyforge_project:
118
- rubygems_version: 2.0.14
119
+ rubygems_version: 2.4.6
119
120
  signing_key:
120
121
  specification_version: 4
121
122
  summary: Ruby support for Gauge