cukeq 0.0.1.dev → 0.0.1.dev2

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.
data/.gitignore CHANGED
@@ -1,21 +1,3 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in cukeq.gemspec
4
+ gemspec
data/Rakefile CHANGED
@@ -1,34 +1,9 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |g|
7
- g.name = "cukeq"
8
- g.summary = %Q{Distributed cucumbers}
9
- g.description = %Q{Cucumber features distributed using AMQP.}
10
- g.email = "jari.bakken@gmail.com"
11
- g.homepage = "http://github.com/jarib/cukeq"
12
- g.authors = ["Jari Bakken"]
13
-
14
- g.add_dependency "amqp"
15
- g.add_dependency "thin"
16
- g.add_dependency "json"
17
- g.add_dependency "git"
18
-
19
- g.add_development_dependency "rspec", ">= 2.0.0"
20
- g.add_development_dependency "yard", ">= 0"
21
- g.add_development_dependency "cucumber", ">= 0"
22
- g.add_development_dependency "rack-test", ">= 0"
23
- end
24
- Jeweler::GemcutterTasks.new
25
- rescue LoadError
26
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
27
- end
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
28
3
 
29
4
  require 'rspec/core/rake_task'
30
5
 
31
- task :default => ["spec:coverage", "spec:coverage:verify"]
6
+ task :default => [:spec, :features]
32
7
 
33
8
  RSpec::Core::RakeTask.new(:spec) do |t|
34
9
  t.rspec_opts = ["--color", "--format", "progress"]
@@ -45,13 +20,11 @@ namespace :spec do
45
20
  end
46
21
  end
47
22
 
48
- task :spec => :check_dependencies
49
-
50
23
  begin
51
24
  require 'cucumber/rake/task'
52
25
  Cucumber::Rake::Task.new(:features)
53
26
 
54
- task :features => :check_dependencies
27
+ task :features
55
28
  rescue LoadError
56
29
  task :features do
57
30
  abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
@@ -65,4 +38,4 @@ rescue LoadError
65
38
  task :yardoc do
66
39
  abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
67
40
  end
68
- end
41
+ end
data/cukeq.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "cukeq/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "cukeq"
7
+ s.version = CukeQ::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jari Bakken"]
10
+ s.email = ["jari.bakken@gmail.com"]
11
+ s.homepage = "http://github.com/jarib/cukeq"
12
+ s.summary = %Q{Distributed cucumbers}
13
+ s.description = %Q{Cucumber features distributed using AMQP.}
14
+
15
+ s.rubyforge_project = "cukeq"
16
+
17
+ s.add_runtime_dependency "amqp", ">= 0"
18
+ s.add_runtime_dependency "thin", ">= 0"
19
+ s.add_runtime_dependency "json", ">= 0"
20
+ s.add_runtime_dependency "git", ">= 0"
21
+ s.add_runtime_dependency "nokogiri", ">= 0"
22
+
23
+ s.add_development_dependency "rspec", ">= 2.0.0"
24
+ s.add_development_dependency "yard", ">= 0"
25
+ s.add_development_dependency "cucumber", ">= 0"
26
+ s.add_development_dependency "rack-test", ">= 0"
27
+ s.add_development_dependency "childprocess", ">= 0.1.4"
28
+ s.add_development_dependency "ruby-debug19"
29
+
30
+ s.files = `git ls-files`.split("\n")
31
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
32
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
33
+ s.require_paths = ["lib"]
34
+ end
@@ -9,7 +9,7 @@ end
9
9
 
10
10
  Given /^I POST the following list to the master web service:$/ do |table|
11
11
  features = table.raw.flatten
12
- post(master_url, features.to_json)
12
+ post(master_url, {:features => features}.to_json)
13
13
  end
14
14
 
15
15
  Then /^the report app should know when the run has finished$/ do
@@ -12,6 +12,7 @@ module CukeQHelper
12
12
  def start_master
13
13
  pids << fork { CukeQ::Master.execute(MASTER_ARGS) }
14
14
  ensure_running
15
+ ensure_listening(master_url)
15
16
  end
16
17
 
17
18
  def start_slave
@@ -23,7 +24,9 @@ module CukeQHelper
23
24
  app = report_app()
24
25
 
25
26
  pids << fork { app.start }
27
+
26
28
  ensure_running
29
+ ensure_listening(app.url)
27
30
  end
28
31
 
29
32
  def post(url, data)
@@ -51,6 +54,16 @@ module CukeQHelper
51
54
  end
52
55
  end
53
56
 
57
+ def ensure_listening(url)
58
+ max_time = Time.now + 10
59
+ until listening?(url)
60
+ if Time.now > max_time
61
+ raise "timed out waiting for #{url} to respond"
62
+ end
63
+ sleep 0.1
64
+ end
65
+ end
66
+
54
67
  def report_app
55
68
  @report_app ||= ReportApp.new
56
69
  end
@@ -60,7 +73,7 @@ module CukeQHelper
60
73
  end
61
74
 
62
75
  def execute_request(url, req)
63
- res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
76
+ res = Net::HTTP.new(url.host, url.port).start { |http| http.request(req) }
64
77
 
65
78
  case res
66
79
  when Net::HTTPSuccess
@@ -70,4 +83,12 @@ module CukeQHelper
70
83
  end
71
84
  end
72
85
 
73
- end
86
+ def listening?(url)
87
+ uri = URI.parse(url)
88
+ TCPSocket.new(uri.host, uri.port).close
89
+ true
90
+ rescue
91
+ false
92
+ end
93
+
94
+ end
@@ -2,12 +2,16 @@ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
 
3
3
  require 'rubygems'
4
4
  require 'cukeq'
5
- require 'spec/expectations'
6
- require File.dirname(__FILE__) + "/report_app"
7
- require File.dirname(__FILE__) + "/cukeq_helper"
5
+ require 'rspec/expectations'
6
+ require File.expand_path("../report_app", __FILE__)
7
+ require File.expand_path("../cukeq_helper", __FILE__)
8
+ require File.expand_path("../test_environment", __FILE__)
9
+ require File.expand_path("../rabbit_control", __FILE__)
8
10
 
9
11
  World(CukeQHelper)
10
12
 
13
+ TestEnvironment.launch
14
+
11
15
  After do
12
16
  cleanup
13
17
  end
@@ -0,0 +1,53 @@
1
+ require "tempfile"
2
+ require "childprocess"
3
+
4
+ class RabbitControl
5
+
6
+ TIMEOUT = 10
7
+
8
+ def initialize
9
+ @tmp = Tempfile.new("rabbit-control")
10
+ @process = ChildProcess.build("rabbitmq-server")
11
+
12
+ @process.io.stdout = @tmp
13
+ @process.io.stderr = @tmp
14
+ end
15
+
16
+ def start
17
+ @process.start
18
+
19
+ max_time = Time.now + TIMEOUT
20
+
21
+ until running?
22
+ if Time.now > max_time
23
+ raise "timed out waiting for rabbitmq-server"
24
+ end
25
+ sleep 0.1
26
+ end
27
+
28
+ system "rabbitmqctl list_users 2>&1"
29
+ raise "rabbit error: #{out}" unless $?.success?
30
+
31
+ true
32
+ end
33
+
34
+ def stop
35
+ @process.stop
36
+ @tmp.close!
37
+ end
38
+
39
+ def running?
40
+ @tmp.rewind
41
+ output = @tmp.read
42
+ puts output if $DEBUG
43
+ output =~ /broker running/
44
+ end
45
+
46
+ end
47
+
48
+ if __FILE__ == $0
49
+ rabbitctl = RabbitControl.new
50
+ trap("INT") { rabbitctl.stop }
51
+ rabbitctl.start
52
+ sleep
53
+ end
@@ -10,6 +10,8 @@ class ReportApp
10
10
 
11
11
  def start
12
12
  Rack::Handler::Thin.run(self, :Port => port)
13
+ rescue => ex
14
+ puts $!, $@
13
15
  end
14
16
 
15
17
  def results
@@ -0,0 +1,19 @@
1
+ class TestEnvironment
2
+ def self.launch
3
+ env = new
4
+ env.start
5
+ at_exit { env.stop }
6
+ end
7
+
8
+ def initialize
9
+ @rabbit = RabbitControl.new
10
+ end
11
+
12
+ def start
13
+ @rabbit.start
14
+ end
15
+
16
+ def stop
17
+ @rabbit.stop
18
+ end
19
+ end
@@ -0,0 +1,94 @@
1
+ module CukeQ
2
+ class AsyncJob
3
+
4
+ def initialize(working_copy, job, callback)
5
+ @job = job
6
+ @callback = callback
7
+ @result = {:success => true, :slave => CukeQ.identifier}
8
+ @invoked = false
9
+ @working_copy = working_copy
10
+ end
11
+
12
+ def run
13
+ parse_job
14
+
15
+ EventMachine.system3 command, &method(:child_finished)
16
+ rescue => ex
17
+ handle_exception(ex)
18
+ end
19
+
20
+ private
21
+
22
+ def handle_exception(ex)
23
+ @result.merge!(:success => false, :error => ex.message, :backtrace => ex.backtrace, :cwd => Dir.pwd)
24
+ cleanup
25
+ invoke_callback
26
+ end
27
+
28
+ def invoke_callback
29
+ if @invoked
30
+ $stderr.puts "#{self} tried to invoke callback twice"
31
+ return
32
+ end
33
+
34
+ @invoked = true
35
+ @callback.call @result
36
+ end
37
+
38
+ def cleanup
39
+ FileUtils.rm_rf(output_file) if File.exist?(output_file)
40
+ end
41
+
42
+ def command
43
+ "cucumber -rfeatures --format Cucumber::Formatter::Json --out #{output_file} #{@feature_file}"
44
+ end
45
+
46
+ def child_finished(stdout, stderr, status)
47
+ output = <<-OUT
48
+ stdout:
49
+ #{stdout}
50
+
51
+ stderr:
52
+ #{stderr}
53
+ OUT
54
+
55
+ @result.merge!(
56
+ :output => output,
57
+ :stderr => stderr,
58
+ :stdout => stdout,
59
+ :success => status.success?,
60
+ :exitcode => status.exitstatus,
61
+ :results => fetch_results,
62
+ :cwd => Dir.pwd
63
+ )
64
+ cleanup
65
+ invoke_callback
66
+ rescue => ex
67
+ handle_exception ex
68
+ end
69
+
70
+ def fetch_results
71
+ return unless File.exist?(output_file)
72
+
73
+ content = File.read(output_file)
74
+ begin
75
+ JSON.parse(content)
76
+ rescue JSON::ParserError => ex
77
+ raise JSON::ParserError, "#{ex.message} (#{content.inspect})"
78
+ end
79
+ end
80
+
81
+ def parse_job
82
+ @feature_file = @job['unit']['file']
83
+ @run = @job['run']
84
+ @scm = @job['scm']
85
+
86
+ @result.merge!(:feature_file => @feature_file, :run => @run, :scm => @scm)
87
+ end
88
+
89
+ def output_file
90
+ @output_file ||= "#{CukeQ.identifier}-#{@run['id']}.json"
91
+ end
92
+
93
+ end
94
+ end
data/lib/cukeq/master.rb CHANGED
@@ -86,7 +86,7 @@ module CukeQ
86
86
  end
87
87
 
88
88
  def ping(&blk)
89
- log log_name, :ping
89
+ log self.class, :ping
90
90
  @broker.subscribe :pong, &blk
91
91
  @broker.publish :ping, '{}'
92
92
  end
@@ -139,6 +139,7 @@ module CukeQ
139
139
  end
140
140
 
141
141
  def start_webapp
142
+ log self.class, :start_webapp
142
143
  @webapp.run method(:run)
143
144
  end
144
145
 
@@ -6,11 +6,16 @@ require "fileutils"
6
6
  module CukeQ
7
7
  class ScenarioRunner
8
8
 
9
+ attr_reader :repos
10
+
11
+ def initialize(repo_directory = nil)
12
+ @repos = repo_directory || CukeQ.root
13
+ end
14
+
9
15
  def run(job, &callback)
10
16
  scm = scm_for job
11
17
 
12
18
  Dir.chdir scm.working_copy
13
-
14
19
  run_job(scm.working_copy, job, callback)
15
20
  rescue => ex
16
21
  yield :success => false,
@@ -23,7 +28,7 @@ module CukeQ
23
28
  url = job['scm']['url']
24
29
  rev = job['scm']['revision']
25
30
 
26
- scm = Scm.new(url)
31
+ scm = Scm.new(@repos, url)
27
32
  unless scm.current_revision.to_s == rev.to_s
28
33
  # TODO(jari): this doesn't ensure that current_revision == rev - it
29
34
  # would also make sense to move the logic to Scm
@@ -40,95 +45,3 @@ module CukeQ
40
45
  end # ScenarioRunner
41
46
  end # CukeQ
42
47
 
43
- class AsyncJob
44
-
45
- def initialize(working_copy, job, callback)
46
- @job = job
47
- @callback = callback
48
- @result = {:success => true, :slave => CukeQ.identifier}
49
- @invoked = false
50
- @working_copy = working_copy
51
- end
52
-
53
- def run
54
- parse_job
55
-
56
- EventMachine.system3 command, &method(:child_finished)
57
- rescue => ex
58
- handle_exception(ex)
59
- end
60
-
61
- private
62
-
63
- def handle_exception(ex)
64
- @result.merge!(:success => false, :error => ex.message, :backtrace => ex.backtrace, :cwd => Dir.pwd)
65
- cleanup
66
- invoke_callback
67
- end
68
-
69
- def invoke_callback
70
- if @invoked
71
- $stderr.puts "#{self} tried to invoke callback twice"
72
- return
73
- end
74
-
75
- @invoked = true
76
- @callback.call @result
77
- end
78
-
79
- def cleanup
80
- FileUtils.rm_rf(output_file) if File.exist?(output_file)
81
- end
82
-
83
- def command
84
- "cucumber -rfeatures --format Cucumber::Formatter::Json --out #{output_file} #{@feature_file}"
85
- end
86
-
87
- def child_finished(stdout, stderr, status)
88
- output = <<-OUT
89
- stdout:
90
- #{stdout}
91
-
92
- stderr:
93
- #{stderr}
94
- OUT
95
-
96
- @result.merge!(
97
- :output => output,
98
- :stderr => stderr,
99
- :stdout => stdout,
100
- :success => status.success?,
101
- :exitcode => status.exitstatus,
102
- :results => fetch_results,
103
- :cwd => Dir.pwd
104
- )
105
- cleanup
106
- invoke_callback
107
- rescue => ex
108
- handle_exception ex
109
- end
110
-
111
- def fetch_results
112
- return unless File.exist?(output_file)
113
-
114
- content = File.read(output_file)
115
- begin
116
- JSON.parse(content)
117
- rescue JSON::ParserError => ex
118
- raise JSON::ParserError, "#{ex.message} (#{content.inspect})"
119
- end
120
- end
121
-
122
- def parse_job
123
- @feature_file = @job['unit']['file']
124
- @run = @job['run']
125
- @scm = @job['scm']
126
-
127
- @result.merge!(:feature_file => @feature_file, :run => @run, :scm => @scm)
128
- end
129
-
130
- def output_file
131
- @output_file ||= "#{CukeQ.identifier}-#{@run['id']}.json"
132
- end
133
-
134
- end
data/lib/cukeq/scm.rb CHANGED
@@ -5,14 +5,13 @@ module CukeQ
5
5
  autoload :GitBridge, "cukeq/scm/git_bridge"
6
6
  autoload :SvnBridge, "cukeq/scm/svn_bridge"
7
7
 
8
- ROOT = File.expand_path("~/.cukeq")
9
-
10
- def initialize(url)
8
+ def initialize(url, root_dir = CukeQ.root)
9
+ @root_dir = root_dir
11
10
  @url = url.kind_of?(String) ? URI.parse(url) : url
12
11
  end
13
12
 
14
13
  def working_copy
15
- @working_copy ||= "#{ROOT}/repos/#{url.host}/#{url.path.gsub(/[^A-z]+/, '_')}"
14
+ @working_copy ||= "#{@root_dir}/repos/#{url.host}/#{url.path.gsub(/[^A-z]+/, '_')}"
16
15
  end
17
16
 
18
17
  def current_revision
@@ -33,7 +32,7 @@ module CukeQ
33
32
  when "svn"
34
33
  SvnBridge.new url, working_copy
35
34
  when "http", "https"
36
- # TODO: fix heuristic for http scm urls
35
+ # TODO: fix heuristic for http scm urls
37
36
  if url.to_s.include?("svn")
38
37
  SvnBridge.new url, working_copy
39
38
  elsif url.to_s.include?("git")
data/lib/cukeq/slave.rb CHANGED
@@ -24,7 +24,7 @@ module CukeQ
24
24
 
25
25
  new(
26
26
  Broker.new(opts[:broker]),
27
- ScenarioRunner.new
27
+ ScenarioRunner.new(opts[:repos])
28
28
  )
29
29
  end
30
30
 
@@ -36,6 +36,10 @@ module CukeQ
36
36
  opts.on("-b", "--broker URI (default: #{DEFAULT_BROKER_URI})") do |b|
37
37
  options[:broker] = URI.parse(b)
38
38
  end
39
+
40
+ opts.on("-r", "--repos DIRECTORY (default: #{CukeQ.root})") do |dir|
41
+ options[:repos] = dir
42
+ end
39
43
  end.parse!
40
44
 
41
45
  options
@@ -0,0 +1,3 @@
1
+ module CukeQ
2
+ VERSION = "0.0.1.dev2"
3
+ end
data/lib/cukeq.rb CHANGED
@@ -35,6 +35,10 @@ module CukeQ
35
35
  def self.identifier
36
36
  @identifier ||= "#{Socket.gethostname}-#{Etc.getlogin}"
37
37
  end
38
+
39
+ def self.root
40
+ @root ||= File.expand_path("~/.cukeq")
41
+ end
38
42
  end
39
43
 
40
44
  def log(*args)
@@ -17,7 +17,9 @@ describe CukeQ::ScenarioRunner do
17
17
  it "creates a configured and updated Scm instance" do
18
18
  job = {'scm' => {'url' => 'git://example.com/foo/bar', 'revision' => 'some-revision'}}
19
19
 
20
- CukeQ::Scm.should_receive(:new).with(job['scm']['url']).and_return(mock_scm = mock("scm"))
20
+ CukeQ::Scm.should_receive(:new).with(CukeQ.root, job['scm']['url']).
21
+ and_return(mock_scm = mock("scm"))
22
+
21
23
  mock_scm.should_receive(:current_revision).and_return 'another-revision'
22
24
  mock_scm.should_receive(:update).and_yield
23
25
 
@@ -36,6 +36,16 @@ describe CukeQ::Slave do
36
36
  slave.broker.pass.should == 'cukeq123'
37
37
  slave.broker.vhost.should == '/cukeq'
38
38
  end
39
+
40
+ it "uses the given repo directory" do
41
+ CukeQ::ScenarioRunner.should_receive(:new).with("/tmp/foo")
42
+ CukeQ::Slave.configured_instance(%w[--repos /tmp/foo])
43
+ end
44
+
45
+ it "uses the default repo directory" do
46
+ slave = CukeQ::Slave.configured_instance
47
+ slave.scenario_runner.repos.should == CukeQ.root
48
+ end
39
49
  end
40
50
 
41
51
  describe ".execute" do
metadata CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
6
6
  - 0
7
7
  - 0
8
8
  - 1
9
- - dev
10
- version: 0.0.1.dev
9
+ - dev2
10
+ version: 0.0.1.dev2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jari Bakken
@@ -15,8 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-29 00:00:00 +01:00
19
- default_executable: cukeq
18
+ date: 2010-12-06 00:00:00 +01:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: amqp
@@ -71,9 +71,22 @@ dependencies:
71
71
  type: :runtime
72
72
  version_requirements: *id004
73
73
  - !ruby/object:Gem::Dependency
74
- name: rspec
74
+ name: nokogiri
75
75
  prerelease: false
76
76
  requirement: &id005 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ type: :runtime
85
+ version_requirements: *id005
86
+ - !ruby/object:Gem::Dependency
87
+ name: rspec
88
+ prerelease: false
89
+ requirement: &id006 !ruby/object:Gem::Requirement
77
90
  none: false
78
91
  requirements:
79
92
  - - ">="
@@ -84,11 +97,11 @@ dependencies:
84
97
  - 0
85
98
  version: 2.0.0
86
99
  type: :development
87
- version_requirements: *id005
100
+ version_requirements: *id006
88
101
  - !ruby/object:Gem::Dependency
89
102
  name: yard
90
103
  prerelease: false
91
- requirement: &id006 !ruby/object:Gem::Requirement
104
+ requirement: &id007 !ruby/object:Gem::Requirement
92
105
  none: false
93
106
  requirements:
94
107
  - - ">="
@@ -97,11 +110,11 @@ dependencies:
97
110
  - 0
98
111
  version: "0"
99
112
  type: :development
100
- version_requirements: *id006
113
+ version_requirements: *id007
101
114
  - !ruby/object:Gem::Dependency
102
115
  name: cucumber
103
116
  prerelease: false
104
- requirement: &id007 !ruby/object:Gem::Requirement
117
+ requirement: &id008 !ruby/object:Gem::Requirement
105
118
  none: false
106
119
  requirements:
107
120
  - - ">="
@@ -110,11 +123,11 @@ dependencies:
110
123
  - 0
111
124
  version: "0"
112
125
  type: :development
113
- version_requirements: *id007
126
+ version_requirements: *id008
114
127
  - !ruby/object:Gem::Dependency
115
128
  name: rack-test
116
129
  prerelease: false
117
- requirement: &id008 !ruby/object:Gem::Requirement
130
+ requirement: &id009 !ruby/object:Gem::Requirement
118
131
  none: false
119
132
  requirements:
120
133
  - - ">="
@@ -123,33 +136,64 @@ dependencies:
123
136
  - 0
124
137
  version: "0"
125
138
  type: :development
126
- version_requirements: *id008
139
+ version_requirements: *id009
140
+ - !ruby/object:Gem::Dependency
141
+ name: childprocess
142
+ prerelease: false
143
+ requirement: &id010 !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ segments:
149
+ - 0
150
+ - 1
151
+ - 4
152
+ version: 0.1.4
153
+ type: :development
154
+ version_requirements: *id010
155
+ - !ruby/object:Gem::Dependency
156
+ name: ruby-debug19
157
+ prerelease: false
158
+ requirement: &id011 !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ segments:
164
+ - 0
165
+ version: "0"
166
+ type: :development
167
+ version_requirements: *id011
127
168
  description: Cucumber features distributed using AMQP.
128
- email: jari.bakken@gmail.com
169
+ email:
170
+ - jari.bakken@gmail.com
129
171
  executables:
130
172
  - cukeq
131
173
  extensions: []
132
174
 
133
- extra_rdoc_files:
134
- - LICENSE
135
- - README.rdoc
175
+ extra_rdoc_files: []
176
+
136
177
  files:
137
- - .autotest
138
178
  - .document
139
179
  - .gitignore
180
+ - Gemfile
140
181
  - LICENSE
141
182
  - README.rdoc
142
183
  - Rakefile
143
- - VERSION
144
184
  - bin/cukeq
185
+ - cukeq.gemspec
145
186
  - features/cukeq.feature
146
187
  - features/example1.feature
147
188
  - features/example2.feature
148
189
  - features/step_definitions/cukeq_steps.rb
149
190
  - features/support/cukeq_helper.rb
150
191
  - features/support/env.rb
192
+ - features/support/rabbit_control.rb
151
193
  - features/support/report_app.rb
194
+ - features/support/test_environment.rb
152
195
  - lib/cukeq.rb
196
+ - lib/cukeq/async_job.rb
153
197
  - lib/cukeq/broker.rb
154
198
  - lib/cukeq/em/system3.rb
155
199
  - lib/cukeq/job_clearer.rb
@@ -163,6 +207,7 @@ files:
163
207
  - lib/cukeq/scm/shell_svn_bridge.rb
164
208
  - lib/cukeq/scm/svn_bridge.rb
165
209
  - lib/cukeq/slave.rb
210
+ - lib/cukeq/version.rb
166
211
  - lib/cukeq/webapp.rb
167
212
  - spec/cukeq/broker_spec.rb
168
213
  - spec/cukeq/cukeq_spec.rb
@@ -183,8 +228,8 @@ homepage: http://github.com/jarib/cukeq
183
228
  licenses: []
184
229
 
185
230
  post_install_message:
186
- rdoc_options:
187
- - --charset=UTF-8
231
+ rdoc_options: []
232
+
188
233
  require_paths:
189
234
  - lib
190
235
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -207,12 +252,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
207
252
  version: 1.3.1
208
253
  requirements: []
209
254
 
210
- rubyforge_project:
255
+ rubyforge_project: cukeq
211
256
  rubygems_version: 1.3.7
212
257
  signing_key:
213
258
  specification_version: 3
214
259
  summary: Distributed cucumbers
215
260
  test_files:
261
+ - features/cukeq.feature
262
+ - features/example1.feature
263
+ - features/example2.feature
264
+ - features/step_definitions/cukeq_steps.rb
265
+ - features/support/cukeq_helper.rb
266
+ - features/support/env.rb
267
+ - features/support/rabbit_control.rb
268
+ - features/support/report_app.rb
269
+ - features/support/test_environment.rb
216
270
  - spec/cukeq/broker_spec.rb
217
271
  - spec/cukeq/cukeq_spec.rb
218
272
  - spec/cukeq/master_spec.rb
@@ -225,4 +279,5 @@ test_files:
225
279
  - spec/cukeq/scm_spec.rb
226
280
  - spec/cukeq/slave_spec.rb
227
281
  - spec/cukeq/webapp_spec.rb
282
+ - spec/spec.opts
228
283
  - spec/spec_helper.rb
data/.autotest DELETED
@@ -1 +0,0 @@
1
- require "autotest/redgreen"
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.1.dev