ruote-cukes 2.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+
2
+ = ruote-cukes - CHANGELOG.txt
3
+
4
+
5
+ == ruote-cukes - 2.1.9 released 2010/06/14
6
+
7
+ - initial release
8
+
@@ -0,0 +1,11 @@
1
+
2
+ = CREDITS.txt
3
+
4
+ John Mettraux - http://jmettraux.wordpress.com
5
+
6
+ Nicholas Faiz - http://github.com/biv
7
+ Kenneth Kalmer - http://github.com/kennethkalmer
8
+
9
+
10
+ Many thanks to the authors of Cucumber : http://cukes.info/
11
+
@@ -0,0 +1,78 @@
1
+
2
+ = ruote-cukes
3
+
4
+ Cucumber helpers (steps) for testing ruote process definitions and participants.
5
+
6
+ Scenario: alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ When I launch the flow
10
+ """
11
+ Ruote.process_definition do
12
+ sequence do
13
+ alpha
14
+ participant :ref => '${f:next}'
15
+ end
16
+ end
17
+ """
18
+ Then the process should reach alpha
19
+ When I get the first workitem of participant alpha
20
+ And I update the workitem with
21
+ | next | charly |
22
+ And I reply with the workitem
23
+ Then the process should reach charly
24
+
25
+ Note the usage of two columns cucumber tables for storing fields (or variables). The first column hold the keys, while the second one the values.
26
+
27
+ Look at features/ for the whole range of examples.
28
+
29
+
30
+ == using them
31
+
32
+ gem install ruote-cukes
33
+
34
+ then make sure to include
35
+
36
+ require 'ruote-cukes'
37
+
38
+ in your feature support or step definitions.
39
+
40
+
41
+ == complex fields
42
+
43
+ When using cucumber tables to represent fields (or variables), ruote-cukes will always try to decode the values via JSON. This thus becomes possible :
44
+
45
+ Scenario: alpha to bravo
46
+ Given I have a ruote engine
47
+ And the catchall participant is registered
48
+ And the initial fields are
49
+ | targets | ["alice","bob"] |
50
+ When I launch the flow
51
+ """
52
+ Ruote.process_definition do
53
+ concurrent_iterator :on_field => 'targets', :to_f => 'f' do
54
+ participant :ref => '${f:f}'
55
+ end
56
+ end
57
+ """
58
+ Then the process should reach alice
59
+ And the process should reach bob
60
+
61
+
62
+ == running the example features
63
+
64
+ Make sure the ruote and cucumber gems are installed and run
65
+
66
+ cucumber
67
+
68
+
69
+ == author
70
+
71
+ John Mettraux
72
+ http://jmettraux.wordpress.com
73
+
74
+
75
+ == license
76
+
77
+ MIT
78
+
@@ -0,0 +1,43 @@
1
+
2
+ require 'lib/ruote/cukes/version.rb'
3
+
4
+ require 'rubygems'
5
+ require 'rake'
6
+
7
+
8
+ begin
9
+
10
+ require 'jeweler'
11
+
12
+ Jeweler::Tasks.new do |gem|
13
+
14
+ gem.version = Ruote::Cukes::VERSION
15
+ gem.name = 'ruote-cukes'
16
+ gem.summary = 'cucumber helpers for testing ruote definitions and participants'
17
+ gem.description = %{
18
+ cucumber helpers (steps) for testing ruote process definitions and participants
19
+ }
20
+ gem.email = 'jmettraux@gmail.com'
21
+ gem.homepage = 'http://ruote.rubyforge.org'
22
+ gem.authors = [ 'John Mettraux' ]
23
+ gem.rubyforge_project = 'ruote'
24
+ #gem.test_file = 'test/test.rb'
25
+
26
+ gem.add_dependency 'ruote', '>= 2.1.9'
27
+ gem.add_dependency 'cucumber'
28
+
29
+ gem.add_development_dependency 'rake'
30
+ gem.add_development_dependency 'jeweler'
31
+
32
+ # Gem::Specification http://www.rubygems.org/read/chapter/20
33
+ end
34
+ Jeweler::GemcutterTasks.new
35
+ rescue LoadError
36
+ puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
37
+ end
38
+
39
+ require 'rake/clean'
40
+ CLEAN.include('pkg')
41
+
42
+ task :default => [ :clean ]
43
+
@@ -0,0 +1,7 @@
1
+
2
+ [o] use tables for field input
3
+ [o] "When I update the workitem with" should do storage_participant.first if
4
+ there is no workitem present
5
+
6
+ [ ] something about participants
7
+
@@ -0,0 +1,14 @@
1
+
2
+ Feature: basic
3
+
4
+ a basic feature example
5
+
6
+ Scenario: from a to b
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ And I launch the flow at flows/a_to_b.rb
10
+ When I get the first workitem of participant alpha
11
+ Then I should have a workitem
12
+ And the process should be alive
13
+ And the process should have no errors
14
+
@@ -0,0 +1,20 @@
1
+
2
+ Feature: I launch the flow
3
+
4
+ the process definition is embedded in the feature
5
+
6
+ Scenario: alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ And I launch the flow
10
+ """
11
+ Ruote.process_definition do
12
+ sequence do
13
+ alpha
14
+ bravo
15
+ end
16
+ end
17
+ """
18
+ When I get the first workitem of participant alpha
19
+ Then I should have a workitem
20
+
@@ -0,0 +1,21 @@
1
+
2
+ Feature: the fields table can hold json values
3
+
4
+ the second column of
5
+
6
+ Scenario: alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ And the initial fields are
10
+ | targets | ["alice","bob"] |
11
+ When I launch the flow
12
+ """
13
+ Ruote.process_definition do
14
+ concurrent_iterator :on_field => 'targets', :to_f => 'f' do
15
+ participant :ref => '${f:f}'
16
+ end
17
+ end
18
+ """
19
+ Then the process should reach alice
20
+ And the process should reach bob
21
+
@@ -0,0 +1,17 @@
1
+
2
+ Feature: When the initial fields are
3
+
4
+ using a cucumber table to set the initial fields of a workitem (launchitem)
5
+
6
+ Scenario: alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ And the initial fields are
10
+ | customer | Alain-san |
11
+ | company | super asia exchange |
12
+ And I launch the flow at flows/a_to_b.rb
13
+ When I get the first workitem of participant alpha
14
+ Then the workitem should include
15
+ | customer | Alain-san |
16
+ | company | super asia exchange |
17
+
@@ -0,0 +1,13 @@
1
+
2
+ Feature: When I launch
3
+
4
+ of course, launch may be a Given or a When
5
+
6
+ Scenario: from alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ When I launch the flow at flows/a.rb
10
+ Then the process should reach alpha
11
+ When I reply
12
+ Then the process should be over
13
+
@@ -0,0 +1,14 @@
1
+
2
+ Feature: When I reply with the workitem
3
+
4
+ a step definition for letting a workitem resume in its flow
5
+
6
+ Scenario: alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ When I launch the flow at flows/a_to_b.rb
10
+ Then the process should reach alpha
11
+ When I get the first workitem of alpha
12
+ And I reply with the workitem
13
+ Then the process should reach bravo
14
+
@@ -0,0 +1,5 @@
1
+
2
+ $:.unshift('lib')
3
+
4
+ require 'ruote/cukes'
5
+
@@ -0,0 +1,18 @@
1
+
2
+ Feature: When I update the workitem with
3
+
4
+ changing the fields (payload) of a workitem
5
+
6
+ Scenario: alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ When I launch the flow at flows/a_to_b.rb
10
+ Then the process should reach alpha
11
+ When I get the first workitem of alpha
12
+ And I update the workitem with
13
+ | customer | Alf |
14
+ And I reply with the workitem
15
+ Then the process should reach bravo
16
+ And the workitem should include
17
+ | customer | Alf |
18
+
@@ -0,0 +1,12 @@
1
+
2
+ Feature: When I launch
3
+
4
+ of course, launch may be a Given or a When
5
+
6
+ Scenario: from alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ When I launch the flow at flows/a_to_b.rb
10
+ Then the process should reach alpha
11
+ And the process should reach participant alpha
12
+
@@ -0,0 +1,24 @@
1
+
2
+ Feature: ruote-cukes features
3
+
4
+ showing a rather complete example
5
+
6
+ Scenario: alpha to bravo
7
+ Given I have a ruote engine
8
+ And the catchall participant is registered
9
+ When I launch the flow
10
+ """
11
+ Ruote.process_definition do
12
+ sequence do
13
+ alpha
14
+ participant :ref => '${f:next}'
15
+ end
16
+ end
17
+ """
18
+ Then the process should reach alpha
19
+ When I get the first workitem of participant alpha
20
+ And I update the workitem with
21
+ | next | charly |
22
+ And I reply with the workitem
23
+ Then the process should reach charly
24
+
@@ -0,0 +1,8 @@
1
+
2
+ #
3
+ # a tiny process with only a stop to participant alpha
4
+ #
5
+ Ruote.process_definition do
6
+ alpha
7
+ end
8
+
@@ -0,0 +1,8 @@
1
+
2
+ Ruote.process_definition do
3
+ sequence do
4
+ alpha
5
+ bravo
6
+ end
7
+ end
8
+
@@ -0,0 +1,213 @@
1
+ #--
2
+ # Copyright (c) 2010, John Mettraux, jmettraux@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+ # Made in Japan.
23
+ #++
24
+
25
+
26
+ require 'test/unit/assertions'
27
+ include Test::Unit::Assertions
28
+ # not sure about that for now...
29
+
30
+ require 'json'
31
+ require 'ruote'
32
+
33
+ require 'ruote/cukes/version'
34
+
35
+
36
+ #
37
+ # a variable container in a singleton, or something like that
38
+ #
39
+ module Ruote::Cukes
40
+
41
+ def self.method_missing (m, *args)
42
+ m = m.to_s
43
+ if args.size == 1 && mm = m.match(/^(.+)=$/)
44
+ (@vars ||= {})[mm[1]] = args.first
45
+ elsif args.size == 0
46
+ (@vars ||= {})[m]
47
+ else
48
+ super
49
+ end
50
+ end
51
+
52
+ def self.workitem
53
+
54
+ if wi = @vars['workitem']
55
+ return wi
56
+ end
57
+
58
+ wi = @vars['storage_participant'].first
59
+
60
+ @vars['workitem'] = wi
61
+ end
62
+ end
63
+
64
+ #
65
+ # re-opening the cucumber table class to add a fancy to_hash method
66
+ #
67
+ class Cucumber::Ast::Table
68
+
69
+ def to_hash
70
+
71
+ self.raw.inject({}) do |h, (k, v)|
72
+ h[k] = (Rufus::Json.decode(v) rescue v)
73
+ h
74
+ end
75
+ end
76
+ end
77
+
78
+
79
+ #
80
+ # ENGINE
81
+
82
+ Given /I have a ruote engine/ do
83
+
84
+ Ruote::Cukes.engine =
85
+ Ruote::Engine.new(
86
+ Ruote::Worker.new(
87
+ Ruote::HashStorage.new(
88
+ 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])))
89
+ end
90
+
91
+
92
+ #
93
+ # PARTICIPANTS
94
+
95
+ Given /the catch[- ]?all participant is registered/ do
96
+
97
+ Ruote::Cukes.storage_participant =
98
+ Ruote::Cukes.engine.register_participant('.+', Ruote::StorageParticipant)
99
+
100
+ Ruote::Cukes.storage_participant.context = Ruote::Cukes.engine.context
101
+ # due to a bug in ruote 2.1.7, remove when 2.1.8 is out
102
+ end
103
+
104
+ Given /I get the first workitem of (?:participant )?(.+)$/ do |pname|
105
+
106
+ sleep 0.100 # give some time to the engine
107
+
108
+ Ruote::Cukes.workitem =
109
+ Ruote::Cukes.storage_participant.by_participant(pname).first
110
+ end
111
+
112
+
113
+ #
114
+ # LAUNCH
115
+
116
+ Given /the initial fields are$/ do |table|
117
+
118
+ Ruote::Cukes.launch_fields = table.to_hash
119
+ end
120
+
121
+ Given /the initial variables are (.+)$/ do |table|
122
+
123
+ Ruote::Cukes.launch_variables = table.to_hash
124
+ end
125
+
126
+ Given /I launch the flow at (.+)$/ do |path|
127
+
128
+ Ruote::Cukes.last_wfid = Ruote::Cukes.engine.launch(
129
+ path,
130
+ Ruote::Cukes.launch_fields || {},
131
+ Ruote::Cukes.launch_variables || {})
132
+ end
133
+
134
+ Given /I launch the flow$/ do |process_definition|
135
+
136
+ Ruote::Cukes.last_wfid = Ruote::Cukes.engine.launch(
137
+ process_definition,
138
+ Ruote::Cukes.launch_fields || {},
139
+ Ruote::Cukes.launch_variables || {})
140
+ end
141
+
142
+
143
+ #
144
+ # WORKITEMS
145
+
146
+ When /^I reply with the workitem$/ do
147
+
148
+ Ruote::Cukes.storage_participant.reply(Ruote::Cukes.workitem)
149
+ Ruote::Cukes.workitem = nil
150
+ end
151
+
152
+ When /^I update the workitem with$/ do |table|
153
+
154
+ Ruote::Cukes.workitem.fields.merge!(table.to_hash)
155
+ end
156
+
157
+ When /^I reply$/ do
158
+
159
+ sleep 0.100 # give some time to the engine
160
+
161
+ Ruote::Cukes.storage_participant.reply(
162
+ Ruote::Cukes.storage_participant.all.first)
163
+ end
164
+
165
+ Then /I should have a workitem/ do
166
+
167
+ assert_not_nil Ruote::Cukes.workitem
168
+ end
169
+
170
+ Then /^the workitem (?:fields )?should include$/ do |table|
171
+
172
+ fields = table.to_hash
173
+
174
+ assert_nil fields.find { |k, v|
175
+ Ruote::Cukes.workitem.fields[k] != v
176
+ }
177
+ end
178
+
179
+
180
+
181
+ #
182
+ # PROCESSES
183
+
184
+ Then /^the process should be alive$/ do
185
+
186
+ assert_not_nil Ruote::Cukes.engine.process(Ruote::Cukes.last_wfid)
187
+ end
188
+
189
+ Then /^the process should have no errors$/ do
190
+
191
+ assert_equal [], Ruote::Cukes.engine.process(Ruote::Cukes.last_wfid).errors
192
+ end
193
+
194
+ Then /^the process should reach (?:participant )?(.+)$/ do |pname|
195
+
196
+ sleep 0.100 # give some time to the engine
197
+
198
+ assert_not_nil Ruote::Cukes.storage_participant.all.find { |wi|
199
+ wi.fei.wfid == Ruote::Cukes.last_wfid && wi.participant_name == pname
200
+ }
201
+ end
202
+
203
+ Then /^the process should be over$/ do
204
+
205
+ sleep 0.100 # give some time to the engine
206
+
207
+ assert_not_nil Ruote::Cukes.engine.context.logger.log.find do |r|
208
+ r['action'] == 'terminated' && r['wfid'] == Ruote::Cukes.last_wfid
209
+ end
210
+
211
+ assert_nil Ruote::Cukes.engine.process(Ruote::Cukes.last_wfid)
212
+ end
213
+
@@ -0,0 +1,8 @@
1
+
2
+ module Ruote
3
+ module Cukes
4
+
5
+ VERSION = '2.1.9'
6
+ end
7
+ end
8
+
@@ -0,0 +1,71 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{ruote-cukes}
8
+ s.version = "2.1.9"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["John Mettraux"]
12
+ s.date = %q{2010-06-14}
13
+ s.description = %q{
14
+ cucumber helpers (steps) for testing ruote process definitions and participants
15
+ }
16
+ s.email = %q{jmettraux@gmail.com}
17
+ s.extra_rdoc_files = [
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ "CHANGELOG.txt",
22
+ "CREDITS.txt",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "TODO.txt",
26
+ "features/basic.feature",
27
+ "features/embedded.feature",
28
+ "features/fields_and_json.feature",
29
+ "features/initial_fields.feature",
30
+ "features/over.feature",
31
+ "features/reply.feature",
32
+ "features/step_definitions/requiring.rb",
33
+ "features/update.feature",
34
+ "features/when.feature",
35
+ "features/whole.feature",
36
+ "flows/a.rb",
37
+ "flows/a_to_b.rb",
38
+ "lib/ruote/cukes.rb",
39
+ "lib/ruote/cukes/version.rb",
40
+ "ruote-cukes.gemspec"
41
+ ]
42
+ s.homepage = %q{http://ruote.rubyforge.org}
43
+ s.rdoc_options = ["--charset=UTF-8"]
44
+ s.require_paths = ["lib"]
45
+ s.rubyforge_project = %q{ruote}
46
+ s.rubygems_version = %q{1.3.6}
47
+ s.summary = %q{cucumber helpers for testing ruote definitions and participants}
48
+
49
+ if s.respond_to? :specification_version then
50
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
51
+ s.specification_version = 3
52
+
53
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
54
+ s.add_runtime_dependency(%q<ruote>, [">= 2.1.9"])
55
+ s.add_runtime_dependency(%q<cucumber>, [">= 0"])
56
+ s.add_development_dependency(%q<rake>, [">= 0"])
57
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
58
+ else
59
+ s.add_dependency(%q<ruote>, [">= 2.1.9"])
60
+ s.add_dependency(%q<cucumber>, [">= 0"])
61
+ s.add_dependency(%q<rake>, [">= 0"])
62
+ s.add_dependency(%q<jeweler>, [">= 0"])
63
+ end
64
+ else
65
+ s.add_dependency(%q<ruote>, [">= 2.1.9"])
66
+ s.add_dependency(%q<cucumber>, [">= 0"])
67
+ s.add_dependency(%q<rake>, [">= 0"])
68
+ s.add_dependency(%q<jeweler>, [">= 0"])
69
+ end
70
+ end
71
+
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruote-cukes
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 2
7
+ - 1
8
+ - 9
9
+ version: 2.1.9
10
+ platform: ruby
11
+ authors:
12
+ - John Mettraux
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-06-14 00:00:00 +09:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: ruote
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 1
30
+ - 9
31
+ version: 2.1.9
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: cucumber
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ type: :development
57
+ version_requirements: *id003
58
+ - !ruby/object:Gem::Dependency
59
+ name: jeweler
60
+ prerelease: false
61
+ requirement: &id004 !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ type: :development
69
+ version_requirements: *id004
70
+ description: "\n\
71
+ cucumber helpers (steps) for testing ruote process definitions and participants\n "
72
+ email: jmettraux@gmail.com
73
+ executables: []
74
+
75
+ extensions: []
76
+
77
+ extra_rdoc_files:
78
+ - README.rdoc
79
+ files:
80
+ - CHANGELOG.txt
81
+ - CREDITS.txt
82
+ - README.rdoc
83
+ - Rakefile
84
+ - TODO.txt
85
+ - features/basic.feature
86
+ - features/embedded.feature
87
+ - features/fields_and_json.feature
88
+ - features/initial_fields.feature
89
+ - features/over.feature
90
+ - features/reply.feature
91
+ - features/step_definitions/requiring.rb
92
+ - features/update.feature
93
+ - features/when.feature
94
+ - features/whole.feature
95
+ - flows/a.rb
96
+ - flows/a_to_b.rb
97
+ - lib/ruote/cukes.rb
98
+ - lib/ruote/cukes/version.rb
99
+ - ruote-cukes.gemspec
100
+ has_rdoc: true
101
+ homepage: http://ruote.rubyforge.org
102
+ licenses: []
103
+
104
+ post_install_message:
105
+ rdoc_options:
106
+ - --charset=UTF-8
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ segments:
121
+ - 0
122
+ version: "0"
123
+ requirements: []
124
+
125
+ rubyforge_project: ruote
126
+ rubygems_version: 1.3.6
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: cucumber helpers for testing ruote definitions and participants
130
+ test_files: []
131
+