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 CHANGED
@@ -1,5 +1,5 @@
1
1
  sneakers.yaml
2
- sneakers.log
2
+ *.log
3
3
  sneakers.pid
4
4
  pkg/
5
5
  coverage/
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
- + Bunny.not_environmental! will no disable auto-environment discovery.
11
+ + Sneakers.not_environmental! will no disable auto-environment discovery.
12
12
  (#15)
13
13
 
14
14
 
@@ -4,7 +4,6 @@ require 'sneakers'
4
4
  class BenchmarkWorker
5
5
  include Sneakers::Worker
6
6
  from_queue 'downloads',
7
- :env => 'test',
8
7
  :durable => false,
9
8
  :ack => true,
10
9
  :threads => 50,
@@ -19,7 +19,7 @@ class MetricsWorker
19
19
  end
20
20
 
21
21
 
22
- Sneakers.configure( :daemonize => false, :log => STDOUT, :metrics => Sneakers::Metrics::LoggingMetrics.new)
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 'ruby-prof'
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
- 1000.times {
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 => 'dummy',
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
- puts "profiling start"
40
- RubyProf.start
41
-
42
- Thread.new do
43
- sleep 10
44
- puts "stopping profiler"
45
- result = RubyProf.stop
46
-
47
- # Print a flat profile to text
48
- printer = RubyProf::FlatPrinter.new(result)
49
- printer.print(STDOUT)
50
- r.stop
51
- exit(0)
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([ ProfilingWorker ])
68
+ r.run
55
69
 
@@ -4,7 +4,6 @@ require 'sneakers'
4
4
  class WorkflowWorker
5
5
  include Sneakers::Worker
6
6
  from_queue 'downloads',
7
- :env => 'test',
8
7
  :durable => false,
9
8
  :ack => true,
10
9
  :threads => 50,
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
@@ -6,7 +6,7 @@ module Sneakers
6
6
  end
7
7
 
8
8
  def increment(metric)
9
- @connection.incrememnt(metric)
9
+ @connection.increment(metric)
10
10
  end
11
11
 
12
12
  def timing(metric, &block)
@@ -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 [#{Support::QueueName.new(routing[:to_queue], @opts).to_s}]")
17
- @exchange.publish(msg, :routing_key => Support::QueueName.new(routing[:to_queue], @opts).to_s)
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 => :direct, :durable => @opts[:durable])
25
+ @exchange = @channel.exchange(@opts[:exchange], :type => @opts[:exchange_type], :durable => @opts[:durable])
28
26
  end
29
27
 
30
28
  def connected?
@@ -6,7 +6,7 @@ class Sneakers::Utils
6
6
  missing_workers = []
7
7
  workers = (workerstring || '').split(',').map do |k|
8
8
  begin
9
- w = Object.const_get(k)
9
+ w = k.split('::').inject(Kernel){|s, c| s.const_get(c)}
10
10
  rescue
11
11
  missing_workers << k
12
12
  end
@@ -21,7 +21,7 @@ Error: No workers found.
21
21
  Please set the classes of the workers you want to run like so:
22
22
 
23
23
  $ export WORKERS=MyWorker,FooWorker
24
- $ rake sneakers:work
24
+ $ rake sneakers:run
25
25
 
26
26
  EOF
27
27
  exit(1)
@@ -1,3 +1,3 @@
1
1
  module Sneakers
2
- VERSION = "0.1.0.pre"
2
+ VERSION = "0.1.1.pre"
3
3
  end
@@ -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 => Support::QueueName.new(routing[:to_queue], @opts).to_s)
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.0.7"
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 => "downloads_test")
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 => "downloads_test")
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
- end
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
@@ -5,7 +5,7 @@ require 'sneakers'
5
5
 
6
6
  describe Sneakers::Queue do
7
7
  before do
8
- Sneakers.configure(:env => 'test')
8
+ Sneakers.configure
9
9
  end
10
10
 
11
11
  describe "#subscribe" do
@@ -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(:env => 'test', :daemonize => true, :log => 'sneakers.log')
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('defaults_test')
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, :env=>"test", :durable=>true, :ack=>true, :amqp=>"amqp://guest:guest@localhost:5672", :vhost=>"/", :exchange=>"sneakers", :exchange_type=>:direct, :hooks=>{}, :handler=>Sneakers::Handlers::Oneshot, :heartbeat => 2}
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('downloads_test')
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, :env=>"test", :durable=>false, :ack=>false, :amqp=>"amqp://guest:guest@localhost:5672", :vhost=>"/", :exchange=>"dummy", :exchange_type=>:direct, :hooks=>{}, :handler=>Sneakers::Handlers::Oneshot, :heartbeat =>5}
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 => 'target_test').once
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.0.pre
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-01-30 00:00:00.000000000 Z
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.0.7
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.0.7
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!
@@ -1,14 +0,0 @@
1
- module Sneakers
2
- module Support
3
- class QueueName
4
- def initialize(queue, opts)
5
- @queue = queue
6
- @opts = opts
7
- end
8
-
9
- def to_s
10
- [@queue, @opts[:env]].compact.join('_')
11
- end
12
- end
13
- end
14
- end