corleone 0.0.5

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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8a8be9936cdf47f503a9e8cd3c53c75383ee651e
4
+ data.tar.gz: dab6b7dd6fff91d12f99cf44919d97ad0998fb3b
5
+ SHA512:
6
+ metadata.gz: b6e7d527ceeedb3a90d95b3474ecddfce229ab13f98335422330816497970b57a2a68788963e6b348caaa72ffe221bc2ae86cf1fa6801619d39fb9b919f763c5
7
+ data.tar.gz: f697c022ad5334109f3368772785afe9dd0e9ff7138fa32ae2ba42dd1887eb70bb477874f97182f6d08588a61a9f2a8db35ea8241702a73e5fd0275e6276bfab
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1 @@
1
+ corleone
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rspec', '>= 2.99'
4
+
5
+ group :development do
6
+ gem 'byebug'
7
+ gem 'jeweler'
8
+ end
@@ -0,0 +1,72 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.3.6)
5
+ builder (3.2.2)
6
+ byebug (3.5.1)
7
+ columnize (~> 0.8)
8
+ debugger-linecache (~> 1.2)
9
+ slop (~> 3.6)
10
+ columnize (0.8.9)
11
+ debugger-linecache (1.2.0)
12
+ descendants_tracker (0.0.4)
13
+ thread_safe (~> 0.3, >= 0.3.1)
14
+ diff-lcs (1.2.5)
15
+ faraday (0.9.0)
16
+ multipart-post (>= 1.2, < 3)
17
+ git (1.2.8)
18
+ github_api (0.12.1)
19
+ addressable (~> 2.3)
20
+ descendants_tracker (~> 0.0.4)
21
+ faraday (~> 0.8, < 0.10)
22
+ hashie (>= 3.2)
23
+ multi_json (>= 1.7.5, < 2.0)
24
+ nokogiri (~> 1.6.3)
25
+ oauth2
26
+ hashie (3.3.1)
27
+ highline (1.6.21)
28
+ jeweler (2.0.1)
29
+ builder
30
+ bundler (>= 1.0)
31
+ git (>= 1.2.5)
32
+ github_api
33
+ highline (>= 1.6.15)
34
+ nokogiri (>= 1.5.10)
35
+ rake
36
+ rdoc
37
+ json (1.8.1)
38
+ jwt (1.0.0)
39
+ mini_portile (0.6.0)
40
+ multi_json (1.10.1)
41
+ multi_xml (0.5.5)
42
+ multipart-post (2.0.0)
43
+ nokogiri (1.6.3.1)
44
+ mini_portile (= 0.6.0)
45
+ oauth2 (1.0.0)
46
+ faraday (>= 0.8, < 0.10)
47
+ jwt (~> 1.0)
48
+ multi_json (~> 1.3)
49
+ multi_xml (~> 0.5)
50
+ rack (~> 1.2)
51
+ rack (1.5.2)
52
+ rake (10.3.2)
53
+ rdoc (4.1.2)
54
+ json (~> 1.4)
55
+ rspec (2.99.0)
56
+ rspec-core (~> 2.99.0)
57
+ rspec-expectations (~> 2.99.0)
58
+ rspec-mocks (~> 2.99.0)
59
+ rspec-core (2.99.2)
60
+ rspec-expectations (2.99.2)
61
+ diff-lcs (>= 1.1.3, < 2.0)
62
+ rspec-mocks (2.99.2)
63
+ slop (3.6.0)
64
+ thread_safe (0.3.4)
65
+
66
+ PLATFORMS
67
+ ruby
68
+
69
+ DEPENDENCIES
70
+ byebug
71
+ jeweler
72
+ rspec (>= 2.99)
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 David Huie
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1 @@
1
+ # corleone
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'jeweler'
4
+
5
+ Jeweler::Tasks.new do |gem|
6
+ gem.name = 'corleone'
7
+ gem.homepage = 'http://github.com/DavidHuie/corleone'
8
+ gem.license = 'MIT'
9
+ gem.summary = 'A toolkit for distributing tasks among workers'
10
+ gem.description = 'A toolkit for distributing tasks among workers'
11
+ gem.email = 'dahuie@gmail.com'
12
+ gem.authors = ['David Huie']
13
+ end
14
+
15
+ Jeweler::RubygemsDotOrgTasks.new
16
+
17
+ require 'rspec/core'
18
+ require 'rspec/core/rake_task'
19
+
20
+ RSpec::Core::RakeTask.new(:spec) do |spec|
21
+ spec.pattern = FileList['spec/**/*_spec.rb']
22
+ end
23
+
24
+ task default: :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.5
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'corleone'
4
+ require 'corleone/rspec'
5
+
6
+ Corleone.logger.level = Logger::INFO
7
+
8
+ if ENV['DEBUG']
9
+ Corleone.logger.level = Logger::DEBUG
10
+ end
11
+
12
+ SERVER_URI = ENV['SERVER_URI'] || 'druby://0.0.0.0:7000'
13
+
14
+ # start server
15
+ collector = Corleone::Collector::RSpec.new
16
+ emitter = Corleone::Emitter::RSpec.new(ARGV, (ENV['WORKERS'] || 1).to_i)
17
+ server = Corleone::Server.new(emitter, collector, SERVER_URI)
18
+ server.start
19
+
20
+ # run loop
21
+ loop { server.alive? ? Kernel.sleep(1) : break }
22
+ server.summarize
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Thread.abort_on_exception = true
4
+
5
+ require 'corleone'
6
+ require 'corleone/rspec'
7
+
8
+ server_uri = ENV['SERVER_URI'] || "druby://127.0.0.1:7000"
9
+
10
+ worker = Corleone::Worker.new(Corleone::Runner::RSpec, server_uri)
11
+ worker.block_until_server_ready
12
+ worker.start
@@ -0,0 +1,75 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: corleone 0.0.5 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "corleone"
9
+ s.version = "0.0.5"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["David Huie"]
14
+ s.date = "2014-11-21"
15
+ s.description = "A toolkit for distributing tasks among workers"
16
+ s.email = "dahuie@gmail.com"
17
+ s.executables = ["corleone_rspec", "corleone_rspec_worker"]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE.txt",
20
+ "README.md"
21
+ ]
22
+ s.files = [
23
+ ".document",
24
+ ".rspec",
25
+ ".ruby-gemset",
26
+ "Gemfile",
27
+ "Gemfile.lock",
28
+ "LICENSE.txt",
29
+ "README.md",
30
+ "Rakefile",
31
+ "VERSION",
32
+ "bin/corleone_rspec",
33
+ "bin/corleone_rspec_worker",
34
+ "corleone.gemspec",
35
+ "lib/corleone.rb",
36
+ "lib/corleone/collector/rspec.rb",
37
+ "lib/corleone/emitter/rspec.rb",
38
+ "lib/corleone/message.rb",
39
+ "lib/corleone/pool.rb",
40
+ "lib/corleone/registry.rb",
41
+ "lib/corleone/rspec.rb",
42
+ "lib/corleone/runner/rspec.rb",
43
+ "lib/corleone/server.rb",
44
+ "lib/corleone/worker.rb",
45
+ "spec/spec_helper.rb",
46
+ "test_spec/example2_spec.rb",
47
+ "test_spec/example3_spec.rb",
48
+ "test_spec/example_spec.rb",
49
+ "test_spec/spec_helper.rb",
50
+ "test_spec/spec_image/runner.sh"
51
+ ]
52
+ s.homepage = "http://github.com/DavidHuie/corleone"
53
+ s.licenses = ["MIT"]
54
+ s.rubygems_version = "2.2.2"
55
+ s.summary = "A toolkit for distributing tasks among workers"
56
+
57
+ if s.respond_to? :specification_version then
58
+ s.specification_version = 4
59
+
60
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
61
+ s.add_runtime_dependency(%q<rspec>, [">= 2.99"])
62
+ s.add_development_dependency(%q<byebug>, [">= 0"])
63
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
64
+ else
65
+ s.add_dependency(%q<rspec>, [">= 2.99"])
66
+ s.add_dependency(%q<byebug>, [">= 0"])
67
+ s.add_dependency(%q<jeweler>, [">= 0"])
68
+ end
69
+ else
70
+ s.add_dependency(%q<rspec>, [">= 2.99"])
71
+ s.add_dependency(%q<byebug>, [">= 0"])
72
+ s.add_dependency(%q<jeweler>, [">= 0"])
73
+ end
74
+ end
75
+
@@ -0,0 +1,19 @@
1
+ require 'base64'
2
+ require 'drb/drb'
3
+ require 'logger'
4
+ require 'securerandom'
5
+ require 'set'
6
+
7
+ module Corleone
8
+
9
+ def self.logger
10
+ @logger ||= Logger.new(STDOUT)
11
+ end
12
+
13
+ end
14
+
15
+ require 'corleone/server'
16
+ require 'corleone/message'
17
+ require 'corleone/worker'
18
+ require 'corleone/registry'
19
+ require 'corleone/pool'
@@ -0,0 +1,16 @@
1
+ module Corleone::Collector
2
+
3
+ class RSpec
4
+
5
+ def initialize
6
+ end
7
+
8
+ def process_result(result)
9
+ end
10
+
11
+ def summarize
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,52 @@
1
+ require 'stringio'
2
+
3
+ module Corleone::Emitter
4
+
5
+ class RSpec
6
+
7
+ def initialize(dir, workers)
8
+ @dir = dir
9
+ @workers = workers
10
+
11
+ process_items
12
+ end
13
+
14
+ def spec_files
15
+ Dir.glob(File.join(@dir, '**/*spec.rb'))
16
+ end
17
+
18
+ def spec_groups
19
+ groups = @workers.times.map { [] }
20
+
21
+ spec_files.shuffle.each_with_index do |item, i|
22
+ groups[i % @workers] << item
23
+ end
24
+
25
+ groups
26
+ end
27
+
28
+ def item_queue
29
+ @item_queue ||= Queue.new
30
+ end
31
+
32
+ def pop
33
+ Corleone::Message::Item.new(item_queue.pop)
34
+ end
35
+
36
+ def process_items
37
+ spec_groups.each do |group|
38
+ item_queue << Corleone::Message::Item.new(group)
39
+ end
40
+ end
41
+
42
+ def empty?
43
+ item_queue.empty?
44
+ end
45
+
46
+ def runner_args
47
+ Corleone::Message::RunnerArgs.new(nil)
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,21 @@
1
+ module Corleone
2
+
3
+ class Message
4
+
5
+ attr_accessor :payload
6
+
7
+ def initialize(payload = nil)
8
+ @payload = payload
9
+ end
10
+
11
+ class Error < Message; end
12
+ class Finished < Message; end
13
+ class Item < Message; end
14
+ class Result < Message; end
15
+ class RunnerArgs < Message; end
16
+ class Stop < Message; end
17
+ class ZeroItems < Message; end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,24 @@
1
+ class Corleone::Pool
2
+
3
+ def initialize(&block)
4
+ @initializer = block
5
+ @pool = []
6
+ @m = Mutex.new
7
+ end
8
+
9
+ def get
10
+ @m.lock
11
+ return @pool.pop if @pool.length > 0
12
+ @initializer.call
13
+ ensure
14
+ @m.unlock
15
+ end
16
+
17
+ def return(value)
18
+ @m.lock
19
+ @pool << value
20
+ ensure
21
+ @m.unlock
22
+ end
23
+
24
+ end
@@ -0,0 +1,27 @@
1
+ class Corleone::Registry
2
+
3
+ def initialize
4
+ @started = false
5
+ @names = Set.new
6
+ @m = Mutex.new
7
+ end
8
+
9
+ def check_in(name)
10
+ @m.lock
11
+ @names << name
12
+ @m.unlock
13
+
14
+ @started = true
15
+ end
16
+
17
+ def remove(name)
18
+ @m.lock
19
+ @names.delete(name)
20
+ @m.unlock
21
+ end
22
+
23
+ def finished?
24
+ (@names.length == 0) && @started
25
+ end
26
+
27
+ end
@@ -0,0 +1,3 @@
1
+ require 'corleone/emitter/rspec'
2
+ require 'corleone/collector/rspec'
3
+ require 'corleone/runner/rspec'
@@ -0,0 +1,33 @@
1
+ require 'stringio'
2
+ require 'rspec/core'
3
+
4
+ module Corleone::Runner
5
+
6
+ class RSpec
7
+
8
+ def initialize(payload, logger)
9
+ @payload = payload
10
+ @logger = logger
11
+ end
12
+
13
+ def command(msg)
14
+ files = msg.payload.join(' ')
15
+ "rspec #{files}"
16
+ end
17
+
18
+ def run_each(input_queue, output_queue)
19
+ loop do
20
+ example = input_queue.pop
21
+ @logger.debug("rspec examples received: #{example}")
22
+
23
+ break if example.instance_of?(Corleone::Message::Stop)
24
+
25
+ system(command(example))
26
+
27
+ output_queue << Corleone::Message::Finished.new
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,83 @@
1
+ class Corleone::Server
2
+
3
+ attr_accessor :config_file, :thread
4
+
5
+ def initialize(emitter, collector, uri)
6
+ @emitter = emitter
7
+ @collector = collector
8
+ @uri = uri
9
+ @runner_args = @emitter.runner_args
10
+ @registry = Corleone::Registry.new
11
+ end
12
+
13
+ def logger
14
+ Corleone.logger
15
+ end
16
+
17
+ def log(type, message)
18
+ logger.send(type, message)
19
+ return
20
+ end
21
+
22
+ def check_in(name)
23
+ logger.debug("worker checking in: #{name}")
24
+ @registry.check_in(name)
25
+ end
26
+
27
+ def check_out(name)
28
+ logger.debug("worker checking out: #{name}")
29
+ @registry.remove(name)
30
+ end
31
+
32
+ def get_runner_args
33
+ if @runner_args
34
+ logger.debug("emitting runner args message: #{@runner_args.payload}")
35
+ end
36
+
37
+ @runner_args
38
+ end
39
+
40
+ def get_item
41
+ return Corleone::Message::ZeroItems.new if @emitter.empty?
42
+ message = @emitter.pop
43
+ logger.debug("emitting item message: #{message.payload}")
44
+ message
45
+ end
46
+
47
+ def return_result(result)
48
+ if result.instance_of?(Corleone::Message::Result)
49
+ logger.debug("result message received: #{result.payload}")
50
+ @collector.process_result(result.payload)
51
+ return
52
+ end
53
+
54
+ raise "result error: #{result}"
55
+ end
56
+
57
+ def finished?
58
+ @emitter.empty? && @registry.finished?
59
+ end
60
+
61
+ def kill
62
+ @thread.kill
63
+ end
64
+
65
+ def alive?
66
+ kill if finished?
67
+ value = @thread.alive?
68
+ value
69
+ end
70
+
71
+ def start
72
+ logger.info("starting server")
73
+ DRb.start_service(@uri, self)
74
+ @thread = DRb.thread
75
+ end
76
+
77
+ def summarize
78
+ @collector.summarize
79
+ end
80
+
81
+ def ping; end
82
+
83
+ end
@@ -0,0 +1,120 @@
1
+ class Corleone::Worker
2
+
3
+ def initialize(runner_class, server_uri)
4
+ @name = `hostname`.strip + '-' + SecureRandom.hex
5
+ @runner_class = runner_class
6
+ @input_queue = Queue.new
7
+ @output_queue = Queue.new
8
+ @pool = Corleone::Pool.new do
9
+ DRbObject.new_with_uri(server_uri)
10
+ end
11
+ end
12
+
13
+ MAX_RETRIES = 50
14
+
15
+ def block_until_server_ready
16
+ loop do
17
+ begin
18
+ conn = @pool.get
19
+ conn.ping
20
+ break
21
+ rescue DRb::DRbConnError
22
+ Kernel.sleep(5)
23
+ end
24
+ end
25
+ end
26
+
27
+ def logger
28
+ @logger ||= RemoteServerLogger.new("WORKER #{@name}", @pool.get)
29
+ end
30
+
31
+ def start_runner
32
+ @runner_thread = Thread.new { @runner.run_each(@input_queue, @output_queue) }
33
+ end
34
+
35
+ def handle_message(message)
36
+ case message
37
+ when Corleone::Message::Item
38
+ handle_example(message)
39
+ when Corleone::Message::ZeroItems
40
+ handle_zero_items
41
+ when Corleone::Message::RunnerArgs
42
+ handle_runner_args(message.payload)
43
+ else
44
+ logger.warn("invalid received message: #{message}")
45
+ end
46
+ end
47
+
48
+ def handle_example(message)
49
+ @input_queue << message.payload
50
+
51
+ loop do
52
+ result = @output_queue.pop
53
+ break if result.instance_of?(Corleone::Message::Finished)
54
+ publish_result(result)
55
+ end
56
+ end
57
+
58
+ def handle_runner_args(payload)
59
+ logger.debug("runner_args arguments: #{payload}")
60
+ @runner = @runner_class.new(payload, logger)
61
+ start_runner
62
+ end
63
+
64
+ def handle_zero_items
65
+ @quit = true
66
+ @input_queue << Corleone::Message::Stop.new
67
+ @runner_thread.join
68
+ end
69
+
70
+ def publish_result(result)
71
+ conn = @pool.get
72
+ conn.return_result(result)
73
+ ensure
74
+ @pool.return(conn)
75
+ end
76
+
77
+ def start
78
+ logger.info("starting worker")
79
+ conn = @pool.get
80
+
81
+ conn.check_in(@name)
82
+ runner_args = conn.get_runner_args
83
+ handle_message(runner_args)
84
+
85
+ loop do
86
+ message = conn.get_item
87
+ handle_message(message)
88
+ break if @quit
89
+ end
90
+
91
+ conn.check_out(@name)
92
+ rescue StandardError => e
93
+ logger.warn("exception raised: #{e}")
94
+ e.backtrace.each do |line|
95
+ logger.warn(" #{line}")
96
+ end
97
+ ensure
98
+ @pool.return(conn)
99
+ end
100
+
101
+ class RemoteServerLogger
102
+
103
+ def initialize(prefix, conn)
104
+ @prefix = prefix
105
+ @conn = conn
106
+ end
107
+
108
+ def wrapped_message(msg)
109
+ "#{@prefix} - #{msg}"
110
+ end
111
+
112
+ [:debug, :info, :warn].each do |name|
113
+ define_method(name) do |msg|
114
+ @conn.log(name, wrapped_message(msg))
115
+ end
116
+ end
117
+
118
+ end
119
+
120
+ end
@@ -0,0 +1,7 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'rspec'
5
+ require 'corleone'
6
+
7
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ EXAMPLES = 20
4
+ SLEEP = 0.01
5
+
6
+ EXAMPLES.times do |n|
7
+
8
+ describe "passing example #{n}" do
9
+
10
+ it 'should do something' do
11
+ sleep(SLEEP)
12
+ expect(1).to eq(1)
13
+ end
14
+
15
+ 2.times do |n|
16
+
17
+ describe "failing example #{n}" do
18
+
19
+ it 'should do something' do
20
+ sleep(SLEEP)
21
+ expect(1).to eq(2)
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ EXAMPLES = 20
4
+ SLEEP = 0.01
5
+
6
+ EXAMPLES.times do |n|
7
+
8
+ describe "passing example #{n}" do
9
+
10
+ it 'should do something' do
11
+ sleep(SLEEP)
12
+ expect(1).to eq(1)
13
+ end
14
+
15
+ 2.times do |n|
16
+
17
+ describe "failing example #{n}" do
18
+
19
+ it 'should do something' do
20
+ sleep(SLEEP)
21
+ expect(1).to eq(2)
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ EXAMPLES = 20
4
+ SLEEP = 0.01
5
+
6
+ EXAMPLES.times do |n|
7
+
8
+ describe "passing example #{n}" do
9
+
10
+ it 'should do something' do
11
+ sleep(SLEEP)
12
+ expect(1).to eq(1)
13
+ end
14
+
15
+ 2.times do |n|
16
+
17
+ describe "failing example #{n}" do
18
+
19
+ it 'should do something' do
20
+ sleep(SLEEP)
21
+ expect(1).to eq(2)
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'rspec'
5
+ require 'corleone'
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -x -e
4
+
5
+ cd /corleone
6
+ bundle install
7
+ sudo -u app bundle exec $@
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: corleone
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - David Huie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.99'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '2.99'
27
+ - !ruby/object:Gem::Dependency
28
+ name: byebug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jeweler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A toolkit for distributing tasks among workers
56
+ email: dahuie@gmail.com
57
+ executables:
58
+ - corleone_rspec
59
+ - corleone_rspec_worker
60
+ extensions: []
61
+ extra_rdoc_files:
62
+ - LICENSE.txt
63
+ - README.md
64
+ files:
65
+ - ".document"
66
+ - ".rspec"
67
+ - ".ruby-gemset"
68
+ - Gemfile
69
+ - Gemfile.lock
70
+ - LICENSE.txt
71
+ - README.md
72
+ - Rakefile
73
+ - VERSION
74
+ - bin/corleone_rspec
75
+ - bin/corleone_rspec_worker
76
+ - corleone.gemspec
77
+ - lib/corleone.rb
78
+ - lib/corleone/collector/rspec.rb
79
+ - lib/corleone/emitter/rspec.rb
80
+ - lib/corleone/message.rb
81
+ - lib/corleone/pool.rb
82
+ - lib/corleone/registry.rb
83
+ - lib/corleone/rspec.rb
84
+ - lib/corleone/runner/rspec.rb
85
+ - lib/corleone/server.rb
86
+ - lib/corleone/worker.rb
87
+ - spec/spec_helper.rb
88
+ - test_spec/example2_spec.rb
89
+ - test_spec/example3_spec.rb
90
+ - test_spec/example_spec.rb
91
+ - test_spec/spec_helper.rb
92
+ - test_spec/spec_image/runner.sh
93
+ homepage: http://github.com/DavidHuie/corleone
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.2.2
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: A toolkit for distributing tasks among workers
117
+ test_files: []