cukeq 0.0.1.dev → 0.0.1.dev2

Sign up to get free protection for your applications and to get access to all the features.
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