corleone 0.0.5

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