sneakers 0.1.0.pre → 0.1.1.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -1
- data/CHANGELOG.md +1 -1
- data/examples/benchmark_worker.rb +0 -1
- data/examples/metrics_worker.rb +1 -1
- data/examples/profiling_worker.rb +35 -21
- data/examples/workflow_worker.rb +0 -1
- data/lib/sneakers.rb +0 -5
- data/lib/sneakers/metrics/statsd_metrics.rb +1 -1
- data/lib/sneakers/publisher.rb +4 -6
- data/lib/sneakers/support/utils.rb +1 -1
- data/lib/sneakers/tasks.rb +1 -1
- data/lib/sneakers/version.rb +1 -1
- data/lib/sneakers/worker.rb +11 -5
- data/sneakers.gemspec +2 -2
- data/spec/sneakers/publisher_spec.rb +25 -8
- data/spec/sneakers/queue_spec.rb +1 -1
- data/spec/sneakers/sneakers_spec.rb +0 -12
- data/spec/sneakers/support/utils_spec.rb +44 -0
- data/spec/sneakers/worker_spec.rb +21 -7
- metadata +6 -6
- data/Gemfile.lock +0 -153
- data/lib/sneakers/support/queue_name.rb +0 -14
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
+ Allow binding of multiple routing keys (@SebastianEdwards)
|
9
9
|
+ added work_with_params for advanced handling of work items with amqp
|
10
10
|
headers. (#12)
|
11
|
-
+
|
11
|
+
+ Sneakers.not_environmental! will no disable auto-environment discovery.
|
12
12
|
(#15)
|
13
13
|
|
14
14
|
|
data/examples/metrics_worker.rb
CHANGED
@@ -19,7 +19,7 @@ class MetricsWorker
|
|
19
19
|
end
|
20
20
|
|
21
21
|
|
22
|
-
Sneakers.configure(
|
22
|
+
Sneakers.configure(:metrics => Sneakers::Metrics::LoggingMetrics.new)
|
23
23
|
r = Sneakers::Runner.new([ MetricsWorker ])
|
24
24
|
r.run
|
25
25
|
|
@@ -1,25 +1,38 @@
|
|
1
1
|
$: << File.expand_path('../lib', File.dirname(__FILE__))
|
2
2
|
require 'sneakers'
|
3
3
|
require 'sneakers/runner'
|
4
|
-
require '
|
4
|
+
require 'logger'
|
5
5
|
|
6
6
|
|
7
|
+
profiling = ARGV[0]
|
8
|
+
messages = 100_000
|
9
|
+
|
10
|
+
|
11
|
+
if profiling
|
12
|
+
require 'ruby-prof'
|
13
|
+
messages /= 100 # profiling makes everything much slower (around 300req/s)
|
14
|
+
end
|
15
|
+
|
16
|
+
Sneakers.configure
|
17
|
+
Sneakers.logger.level = Logger::ERROR
|
18
|
+
|
19
|
+
Sneakers::Worker.configure_logger(Logger.new('/dev/null'))
|
20
|
+
|
7
21
|
puts "feeding messages in"
|
8
|
-
|
22
|
+
messages.times {
|
9
23
|
Sneakers.publish("{}", :to_queue => 'downloads')
|
24
|
+
}
|
10
25
|
puts "done"
|
11
26
|
|
12
27
|
|
13
28
|
class ProfilingWorker
|
14
29
|
include Sneakers::Worker
|
15
30
|
from_queue 'downloads',
|
16
|
-
:env => '',
|
17
|
-
:durable => false,
|
18
31
|
:ack => true,
|
19
32
|
:threads => 50,
|
20
33
|
:prefetch => 50,
|
21
34
|
:timeout_job_after => 1,
|
22
|
-
:exchange => '
|
35
|
+
:exchange => 'sneakers',
|
23
36
|
:heartbeat => 5
|
24
37
|
def work(msg)
|
25
38
|
ack!
|
@@ -28,28 +41,29 @@ end
|
|
28
41
|
|
29
42
|
|
30
43
|
|
31
|
-
r = Sneakers::Runner.new
|
32
|
-
Sneakers::Worker.configure_logger(Logger.new('/dev/null'))
|
44
|
+
r = Sneakers::Runner.new([ProfilingWorker])
|
33
45
|
|
34
46
|
# ctrl-c and Ruby 2.0 breaks signal handling
|
35
47
|
# Sidekiq has same issues
|
36
48
|
# https://github.com/mperham/sidekiq/issues/728
|
37
49
|
#
|
38
50
|
# so we use a timeout and a thread that kills profiling
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
51
|
+
if profiling
|
52
|
+
puts "profiling start"
|
53
|
+
RubyProf.start
|
54
|
+
|
55
|
+
|
56
|
+
Thread.new do
|
57
|
+
sleep 10
|
58
|
+
puts "stopping profiler"
|
59
|
+
result = RubyProf.stop
|
60
|
+
|
61
|
+
# Print a flat profile to text
|
62
|
+
printer = RubyProf::FlatPrinter.new(result)
|
63
|
+
printer.print(STDOUT)
|
64
|
+
exit(0)
|
65
|
+
end
|
52
66
|
end
|
53
67
|
|
54
|
-
r.run
|
68
|
+
r.run
|
55
69
|
|
data/examples/workflow_worker.rb
CHANGED
data/lib/sneakers.rb
CHANGED
@@ -34,7 +34,6 @@ module Sneakers
|
|
34
34
|
:timeout_job_after => 5,
|
35
35
|
:prefetch => 10,
|
36
36
|
:threads => 10,
|
37
|
-
:env => ENV['RACK_ENV'],
|
38
37
|
:durable => true,
|
39
38
|
:ack => true,
|
40
39
|
:heartbeat => 2,
|
@@ -65,10 +64,6 @@ module Sneakers
|
|
65
64
|
@configured = false
|
66
65
|
end
|
67
66
|
|
68
|
-
def self.not_environmental!
|
69
|
-
Config[:env] = nil
|
70
|
-
end
|
71
|
-
|
72
67
|
def self.daemonize!(loglevel=Logger::INFO)
|
73
68
|
Config[:log] = 'sneakers.log'
|
74
69
|
Config[:daemonize] = true
|
data/lib/sneakers/publisher.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'sneakers/support/queue_name'
|
2
|
-
|
3
1
|
module Sneakers
|
4
2
|
class Publisher
|
5
3
|
attr_accessor :exchange
|
@@ -13,18 +11,18 @@ module Sneakers
|
|
13
11
|
@mutex.synchronize do
|
14
12
|
ensure_connection! unless connected?
|
15
13
|
end
|
16
|
-
Sneakers.logger.info("publishing <#{msg}> to [#{
|
17
|
-
@exchange.publish(msg, :routing_key =>
|
14
|
+
Sneakers.logger.info("publishing <#{msg}> to [#{routing[:to_queue]}]")
|
15
|
+
@exchange.publish(msg, :routing_key => routing[:to_queue])
|
18
16
|
end
|
19
17
|
|
20
18
|
|
21
19
|
private
|
22
20
|
|
23
21
|
def ensure_connection!
|
24
|
-
@bunny = Bunny.new(:heartbeat => @opts[:heartbeat])
|
22
|
+
@bunny = Bunny.new(@opts[:amqp], :heartbeat => @opts[:heartbeat])
|
25
23
|
@bunny.start
|
26
24
|
@channel = @bunny.create_channel
|
27
|
-
@exchange = @channel.exchange(@opts[:exchange], :type => :
|
25
|
+
@exchange = @channel.exchange(@opts[:exchange], :type => @opts[:exchange_type], :durable => @opts[:durable])
|
28
26
|
end
|
29
27
|
|
30
28
|
def connected?
|
data/lib/sneakers/tasks.rb
CHANGED
data/lib/sneakers/version.rb
CHANGED
data/lib/sneakers/worker.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'sneakers/queue'
|
2
2
|
require 'sneakers/support/utils'
|
3
|
-
require 'sneakers/support/queue_name'
|
4
3
|
require 'timeout'
|
5
4
|
|
6
5
|
module Sneakers
|
@@ -15,11 +14,8 @@ module Sneakers
|
|
15
14
|
def initialize(queue=nil, pool=nil, opts=nil)
|
16
15
|
opts = self.class.queue_opts
|
17
16
|
queue_name = self.class.queue_name
|
18
|
-
|
19
17
|
opts = Sneakers::Config.merge(opts)
|
20
18
|
|
21
|
-
queue_name = Support::QueueName.new(queue_name, opts).to_s
|
22
|
-
|
23
19
|
@should_ack = opts[:ack]
|
24
20
|
@timeout_after = opts[:timeout_job_after]
|
25
21
|
@pool = pool || Thread.pool(opts[:threads]) # XXX config threads
|
@@ -40,7 +36,7 @@ module Sneakers
|
|
40
36
|
|
41
37
|
def publish(msg, routing)
|
42
38
|
return unless routing[:to_queue]
|
43
|
-
@queue.exchange.publish(msg, :routing_key =>
|
39
|
+
@queue.exchange.publish(msg, :routing_key => routing[:to_queue])
|
44
40
|
end
|
45
41
|
|
46
42
|
def do_work(hdr, props, msg, handler)
|
@@ -120,6 +116,16 @@ module Sneakers
|
|
120
116
|
@queue_name = q.to_s
|
121
117
|
@queue_opts = opts
|
122
118
|
end
|
119
|
+
|
120
|
+
def enqueue(msg)
|
121
|
+
publisher.publish(msg, :to_queue => @queue_name)
|
122
|
+
end
|
123
|
+
|
124
|
+
private
|
125
|
+
|
126
|
+
def publisher
|
127
|
+
@publisher ||= Sneakers::Publisher.new
|
128
|
+
end
|
123
129
|
end
|
124
130
|
end
|
125
131
|
end
|
data/sneakers.gemspec
CHANGED
@@ -12,12 +12,12 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.summary = %q{Fast background processing framework for Ruby and RabbitMQ}
|
13
13
|
gem.homepage = ""
|
14
14
|
|
15
|
-
gem.files = `git ls-files`.split($/)
|
15
|
+
gem.files = `git ls-files`.split($/).reject{|f| f == 'Gemfile.lock'}
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
gem.add_dependency "serverengine"
|
20
|
-
gem.add_dependency "bunny", "~> 1.
|
20
|
+
gem.add_dependency "bunny", "~> 1.1.3"
|
21
21
|
gem.add_dependency "thread"
|
22
22
|
gem.add_dependency "thor"
|
23
23
|
|
@@ -3,14 +3,10 @@ require 'sneakers'
|
|
3
3
|
|
4
4
|
|
5
5
|
describe Sneakers::Publisher do
|
6
|
-
before do
|
7
|
-
Sneakers.configure(:env => 'test')
|
8
|
-
end
|
9
|
-
|
10
6
|
describe "#publish" do
|
11
7
|
it "should publish a message to an exchange" do
|
12
8
|
xchg = Object.new
|
13
|
-
mock(xchg).publish("test msg", :routing_key => "
|
9
|
+
mock(xchg).publish("test msg", :routing_key => "downloads")
|
14
10
|
|
15
11
|
p = Sneakers::Publisher.new
|
16
12
|
p.exchange = xchg
|
@@ -21,7 +17,7 @@ describe Sneakers::Publisher do
|
|
21
17
|
|
22
18
|
it "should not reconnect if already connected" do
|
23
19
|
xchg = Object.new
|
24
|
-
mock(xchg).publish("test msg", :routing_key => "
|
20
|
+
mock(xchg).publish("test msg", :routing_key => "downloads")
|
25
21
|
|
26
22
|
p = Sneakers::Publisher.new
|
27
23
|
p.exchange = xchg
|
@@ -30,8 +26,29 @@ describe Sneakers::Publisher do
|
|
30
26
|
|
31
27
|
p.publish("test msg", :to_queue => 'downloads')
|
32
28
|
end
|
33
|
-
end
|
34
29
|
|
30
|
+
it "should connect to rabbitmq configured on Sneakers.configure" do
|
31
|
+
Sneakers.configure(
|
32
|
+
:amqp => "amqp://someuser:somepassword@somehost:5672",
|
33
|
+
:heartbeat => 1, :exchange => 'another_exchange',
|
34
|
+
:exchange_type => :topic,
|
35
|
+
:durable => false)
|
35
36
|
|
36
|
-
|
37
|
+
channel = Object.new
|
38
|
+
mock(channel).exchange("another_exchange", :type => :topic, :durable => false) {
|
39
|
+
mock(Object.new).publish("test msg", :routing_key => "downloads")
|
40
|
+
}
|
37
41
|
|
42
|
+
bunny = Object.new
|
43
|
+
mock(bunny).start
|
44
|
+
mock(bunny).create_channel { channel }
|
45
|
+
|
46
|
+
mock(Bunny).new("amqp://someuser:somepassword@somehost:5672", :heartbeat => 1 ) { bunny }
|
47
|
+
|
48
|
+
p = Sneakers::Publisher.new
|
49
|
+
|
50
|
+
p.publish("test msg", :to_queue => 'downloads')
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/sneakers/queue_spec.rb
CHANGED
@@ -40,18 +40,6 @@ describe Sneakers do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
describe '.not_environmental!' do
|
44
|
-
it 'should ignore environment (RACK_ENV) for all workers' do
|
45
|
-
Sneakers.configure(:env => 'production')
|
46
|
-
Sneakers.not_environmental!
|
47
|
-
EnvWorker.new.queue.name.must_equal('defaults')
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'should ignore environment (RACK_ENV) for all workers' do
|
51
|
-
Sneakers.configure(:env => 'production')
|
52
|
-
EnvWorker.new.queue.name.must_equal('defaults_production')
|
53
|
-
end
|
54
|
-
end
|
55
43
|
|
56
44
|
describe '.clear!' do
|
57
45
|
it 'must reset dirty configuration to default' do
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'sneakers'
|
3
|
+
|
4
|
+
describe Sneakers::Utils do
|
5
|
+
describe '::parse_workers' do
|
6
|
+
before(:all) do
|
7
|
+
class Foo; end
|
8
|
+
class Bar; end
|
9
|
+
class Baz
|
10
|
+
class Quux; end
|
11
|
+
class Corge; end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'given a single class name' do
|
16
|
+
describe 'without namespace' do
|
17
|
+
it 'returns the worker class name' do
|
18
|
+
Sneakers::Utils.parse_workers('Foo').must_equal([[Foo],[]])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'with namespace' do
|
23
|
+
it 'returns the worker class name' do
|
24
|
+
Sneakers::Utils.parse_workers('Baz::Quux').must_equal([[Baz::Quux],[]])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'given a list of class names' do
|
30
|
+
describe 'without namespaces' do
|
31
|
+
it 'returns all worker class names' do
|
32
|
+
Sneakers::Utils.parse_workers('Foo,Bar').must_equal([[Foo,Bar],[]])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'with namespaces' do
|
37
|
+
it 'returns all worker class names' do
|
38
|
+
workers = Sneakers::Utils.parse_workers('Baz::Quux,Baz::Corge')
|
39
|
+
workers.must_equal([[Baz::Quux,Baz::Corge],[]])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -6,7 +6,6 @@ require 'timeout'
|
|
6
6
|
class DummyWorker
|
7
7
|
include Sneakers::Worker
|
8
8
|
from_queue 'downloads',
|
9
|
-
:env => 'test',
|
10
9
|
:durable => false,
|
11
10
|
:ack => false,
|
12
11
|
:threads => 50,
|
@@ -139,11 +138,26 @@ describe Sneakers::Worker do
|
|
139
138
|
stub(@queue).opts { {} }
|
140
139
|
stub(@queue).exchange { @exchange }
|
141
140
|
|
142
|
-
Sneakers.configure(:
|
141
|
+
Sneakers.configure(:daemonize => true, :log => 'sneakers.log')
|
143
142
|
Sneakers::Worker.configure_logger(Logger.new('/dev/null'))
|
144
143
|
Sneakers::Worker.configure_metrics
|
145
144
|
end
|
146
145
|
|
146
|
+
describe ".enqueue" do
|
147
|
+
it "publishes a message to the class queue" do
|
148
|
+
message = "my message"
|
149
|
+
mock = MiniTest::Mock.new
|
150
|
+
|
151
|
+
mock.expect(:publish, true) do |msg, opts|
|
152
|
+
msg.must_equal(message)
|
153
|
+
opts.must_equal(:to_queue => "defaults")
|
154
|
+
end
|
155
|
+
|
156
|
+
stub(Sneakers::Publisher).new { mock }
|
157
|
+
DefaultsWorker.enqueue(message)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
147
161
|
describe "#initialize" do
|
148
162
|
describe "builds an internal queue" do
|
149
163
|
before do
|
@@ -152,16 +166,16 @@ describe Sneakers::Worker do
|
|
152
166
|
end
|
153
167
|
|
154
168
|
it "should build a queue with correct configuration given defaults" do
|
155
|
-
@defaults_q.name.must_equal('
|
169
|
+
@defaults_q.name.must_equal('defaults')
|
156
170
|
@defaults_q.opts.must_equal(
|
157
|
-
{:runner_config_file=>nil, :metrics=>nil, :daemonize=>true, :start_worker_delay=>0.2, :workers=>4, :log=>"sneakers.log", :pid_path=>"sneakers.pid", :timeout_job_after=>5, :prefetch=>10, :threads=>10, :
|
171
|
+
{:runner_config_file=>nil, :metrics=>nil, :daemonize=>true, :start_worker_delay=>0.2, :workers=>4, :log=>"sneakers.log", :pid_path=>"sneakers.pid", :timeout_job_after=>5, :prefetch=>10, :threads=>10, :durable=>true, :ack=>true, :amqp=>"amqp://guest:guest@localhost:5672", :vhost=>"/", :exchange=>"sneakers", :exchange_type=>:direct, :hooks=>{}, :handler=>Sneakers::Handlers::Oneshot, :heartbeat => 2}
|
158
172
|
)
|
159
173
|
end
|
160
174
|
|
161
175
|
it "should build a queue with given configuration" do
|
162
|
-
@dummy_q.name.must_equal('
|
176
|
+
@dummy_q.name.must_equal('downloads')
|
163
177
|
@dummy_q.opts.must_equal(
|
164
|
-
{:runner_config_file=>nil, :metrics=>nil, :daemonize=>true, :start_worker_delay=>0.2, :workers=>4, :log=>"sneakers.log", :pid_path=>"sneakers.pid", :timeout_job_after=>1, :prefetch=>40, :threads=>50, :
|
178
|
+
{:runner_config_file=>nil, :metrics=>nil, :daemonize=>true, :start_worker_delay=>0.2, :workers=>4, :log=>"sneakers.log", :pid_path=>"sneakers.pid", :timeout_job_after=>1, :prefetch=>40, :threads=>50, :durable=>false, :ack=>false, :amqp=>"amqp://guest:guest@localhost:5672", :vhost=>"/", :exchange=>"dummy", :exchange_type=>:direct, :hooks=>{}, :handler=>Sneakers::Handlers::Oneshot, :heartbeat =>5}
|
165
179
|
)
|
166
180
|
end
|
167
181
|
end
|
@@ -287,7 +301,7 @@ describe Sneakers::Worker do
|
|
287
301
|
describe 'publish' do
|
288
302
|
it 'should be able to publish a message from working context' do
|
289
303
|
w = PublishingWorker.new(@queue, TestPool.new)
|
290
|
-
mock(@exchange).publish('msg', :routing_key => '
|
304
|
+
mock(@exchange).publish('msg', :routing_key => 'target').once
|
291
305
|
w.do_work(nil, nil, 'msg', nil)
|
292
306
|
end
|
293
307
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sneakers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1.pre
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-03-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: serverengine
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 1.
|
37
|
+
version: 1.1.3
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.
|
45
|
+
version: 1.1.3
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: thread
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,7 +214,6 @@ files:
|
|
214
214
|
- .gitignore
|
215
215
|
- CHANGELOG.md
|
216
216
|
- Gemfile
|
217
|
-
- Gemfile.lock
|
218
217
|
- Guardfile
|
219
218
|
- LICENSE.txt
|
220
219
|
- README.md
|
@@ -240,7 +239,6 @@ files:
|
|
240
239
|
- lib/sneakers/queue.rb
|
241
240
|
- lib/sneakers/runner.rb
|
242
241
|
- lib/sneakers/support/production_formatter.rb
|
243
|
-
- lib/sneakers/support/queue_name.rb
|
244
242
|
- lib/sneakers/support/utils.rb
|
245
243
|
- lib/sneakers/tasks.rb
|
246
244
|
- lib/sneakers/version.rb
|
@@ -254,6 +252,7 @@ files:
|
|
254
252
|
- spec/sneakers/publisher_spec.rb
|
255
253
|
- spec/sneakers/queue_spec.rb
|
256
254
|
- spec/sneakers/sneakers_spec.rb
|
255
|
+
- spec/sneakers/support/utils_spec.rb
|
257
256
|
- spec/sneakers/worker_spec.rb
|
258
257
|
- spec/spec_helper.rb
|
259
258
|
homepage: ''
|
@@ -288,5 +287,6 @@ test_files:
|
|
288
287
|
- spec/sneakers/publisher_spec.rb
|
289
288
|
- spec/sneakers/queue_spec.rb
|
290
289
|
- spec/sneakers/sneakers_spec.rb
|
290
|
+
- spec/sneakers/support/utils_spec.rb
|
291
291
|
- spec/sneakers/worker_spec.rb
|
292
292
|
- spec/spec_helper.rb
|
data/Gemfile.lock
DELETED
@@ -1,153 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
sneakers (0.1.0)
|
5
|
-
bunny (~> 1.0.7)
|
6
|
-
serverengine
|
7
|
-
thor
|
8
|
-
thread
|
9
|
-
|
10
|
-
GEM
|
11
|
-
remote: https://rubygems.org/
|
12
|
-
specs:
|
13
|
-
activesupport (3.2.15)
|
14
|
-
i18n (~> 0.6, >= 0.6.4)
|
15
|
-
multi_json (~> 1.0)
|
16
|
-
amq-protocol (1.9.2)
|
17
|
-
arrayfields (4.9.0)
|
18
|
-
awesome_print (1.2.0)
|
19
|
-
bluff (0.1.0)
|
20
|
-
bunny (1.0.7)
|
21
|
-
amq-protocol (>= 1.9.2)
|
22
|
-
cane (2.6.0)
|
23
|
-
parallel
|
24
|
-
celluloid (0.15.2)
|
25
|
-
timers (~> 1.1.0)
|
26
|
-
chronic (0.10.2)
|
27
|
-
churn (0.0.34)
|
28
|
-
chronic (>= 0.2.3)
|
29
|
-
hirb
|
30
|
-
json_pure
|
31
|
-
main
|
32
|
-
ruby_parser (~> 3.0)
|
33
|
-
sexp_processor (~> 4.1)
|
34
|
-
code_analyzer (0.4.3)
|
35
|
-
sexp_processor
|
36
|
-
code_metrics (0.1.1)
|
37
|
-
coderay (1.0.9)
|
38
|
-
colored (1.2)
|
39
|
-
erubis (2.7.0)
|
40
|
-
fattr (2.2.1)
|
41
|
-
ffi (1.9.0)
|
42
|
-
flay (2.4.0)
|
43
|
-
ruby_parser (~> 3.0)
|
44
|
-
sexp_processor (~> 4.0)
|
45
|
-
flog (4.1.2)
|
46
|
-
ruby_parser (~> 3.1, > 3.1.0)
|
47
|
-
sexp_processor (~> 4.0)
|
48
|
-
formatador (0.2.4)
|
49
|
-
guard (2.1.0)
|
50
|
-
formatador (>= 0.2.4)
|
51
|
-
listen (~> 2.1)
|
52
|
-
lumberjack (~> 1.0)
|
53
|
-
pry (>= 0.9.12)
|
54
|
-
thor (>= 0.18.1)
|
55
|
-
guard-minitest (2.0.0)
|
56
|
-
guard (~> 2.0)
|
57
|
-
minitest (>= 3.0)
|
58
|
-
hirb (0.7.1)
|
59
|
-
i18n (0.6.5)
|
60
|
-
json_pure (1.8.0)
|
61
|
-
listen (2.1.1)
|
62
|
-
celluloid (>= 0.15.2)
|
63
|
-
rb-fsevent (>= 0.9.3)
|
64
|
-
rb-inotify (>= 0.9)
|
65
|
-
lumberjack (1.0.4)
|
66
|
-
main (5.2.0)
|
67
|
-
arrayfields (>= 4.7.4)
|
68
|
-
chronic (>= 0.6.2)
|
69
|
-
fattr (>= 2.2.0)
|
70
|
-
map (>= 5.1.0)
|
71
|
-
map (6.5.1)
|
72
|
-
method_source (0.8.2)
|
73
|
-
metric_fu (4.4.4)
|
74
|
-
bluff
|
75
|
-
cane (~> 2.5, >= 2.5.2)
|
76
|
-
churn (~> 0.0.28)
|
77
|
-
code_metrics (~> 0.1)
|
78
|
-
coderay
|
79
|
-
flay (~> 2.1, >= 2.0.1)
|
80
|
-
flog (~> 4.1, >= 4.1.1)
|
81
|
-
metric_fu-Saikuro (>= 1.1.1.0)
|
82
|
-
multi_json
|
83
|
-
rails_best_practices (~> 1.14, >= 1.14.3)
|
84
|
-
redcard
|
85
|
-
reek (~> 1.3, >= 1.3.3)
|
86
|
-
roodi (~> 3.1)
|
87
|
-
metric_fu-Saikuro (1.1.1.0)
|
88
|
-
mini_portile (0.5.1)
|
89
|
-
minitest (5.0.8)
|
90
|
-
multi_json (1.8.2)
|
91
|
-
nokogiri (1.6.0)
|
92
|
-
mini_portile (~> 0.5.0)
|
93
|
-
parallel (0.9.0)
|
94
|
-
pry (0.9.12.2)
|
95
|
-
coderay (~> 1.0.5)
|
96
|
-
method_source (~> 0.8)
|
97
|
-
slop (~> 3.4)
|
98
|
-
rails_best_practices (1.14.4)
|
99
|
-
activesupport
|
100
|
-
awesome_print
|
101
|
-
code_analyzer (>= 0.4.3)
|
102
|
-
colored
|
103
|
-
erubis
|
104
|
-
i18n
|
105
|
-
require_all
|
106
|
-
ruby-progressbar
|
107
|
-
rake (10.1.0)
|
108
|
-
rb-fsevent (0.9.3)
|
109
|
-
rb-inotify (0.9.2)
|
110
|
-
ffi (>= 0.5.0)
|
111
|
-
redcard (1.1.0)
|
112
|
-
reek (1.3.4)
|
113
|
-
ruby2ruby (~> 2.0.2)
|
114
|
-
ruby_parser (~> 3.2)
|
115
|
-
sexp_processor
|
116
|
-
require_all (1.3.1)
|
117
|
-
roodi (3.1.1)
|
118
|
-
ruby_parser (~> 3.2, >= 3.2.2)
|
119
|
-
rr (1.1.2)
|
120
|
-
ruby-prof (0.13.0)
|
121
|
-
ruby-progressbar (1.2.0)
|
122
|
-
ruby2ruby (2.0.6)
|
123
|
-
ruby_parser (~> 3.1)
|
124
|
-
sexp_processor (~> 4.0)
|
125
|
-
ruby_parser (3.2.2)
|
126
|
-
sexp_processor (~> 4.1)
|
127
|
-
serverengine (1.5.7)
|
128
|
-
sigdump (~> 0.2.2)
|
129
|
-
sexp_processor (4.3.0)
|
130
|
-
sigdump (0.2.2)
|
131
|
-
simplecov (0.7.1)
|
132
|
-
multi_json (~> 1.0)
|
133
|
-
simplecov-html (~> 0.7.1)
|
134
|
-
simplecov-html (0.7.1)
|
135
|
-
simplecov-rcov-text (0.0.2)
|
136
|
-
slop (3.4.6)
|
137
|
-
thor (0.18.1)
|
138
|
-
thread (0.1.3)
|
139
|
-
timers (1.1.0)
|
140
|
-
|
141
|
-
PLATFORMS
|
142
|
-
ruby
|
143
|
-
|
144
|
-
DEPENDENCIES
|
145
|
-
guard-minitest
|
146
|
-
metric_fu
|
147
|
-
nokogiri
|
148
|
-
rake
|
149
|
-
rr
|
150
|
-
ruby-prof
|
151
|
-
simplecov
|
152
|
-
simplecov-rcov-text
|
153
|
-
sneakers!
|