rock-queue 0.3.0 → 0.3.1

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.
data/Rakefile CHANGED
@@ -7,56 +7,49 @@ $LOAD_PATH.unshift 'lib'
7
7
  require 'rock-queue/tasks'
8
8
 
9
9
  GEM = "rock-queue"
10
- GEM_VERSION = "0.3.0"
11
- AUTHOR = "Grzegorz Kazulak"
10
+ GEM_VERSION = "0.3.1"
11
+ SUMMARY = "A unified interface for various messaging queues"
12
+ AUTHORS = ["Grzegorz Kazulak", "Wojtek Mach", "Piotr Chmolowski", "Daniel Chrusciak"]
12
13
  EMAIL = "gregorz.kazulak@gmail.com"
13
14
  HOMEPAGE = "http://github.com/grzegorzkazulak/rock-queue"
14
- SUMMARY = "A unified interface for various messaging queues"
15
-
16
- spec = Gem::Specification.new do |s|
17
- s.name = GEM
18
- s.version = GEM_VERSION
19
- s.platform = Gem::Platform::RUBY
20
- s.has_rdoc = true
21
- s.extra_rdoc_files = ["LICENSE"]
22
- s.summary = SUMMARY
23
- s.description = s.summary
24
- s.author = AUTHOR
25
- s.email = EMAIL
26
- s.homepage = HOMEPAGE
27
-
28
- s.require_path = 'lib'
29
- s.autorequire = GEM
30
- s.files = %w(LICENSE Rakefile) + Dir.glob("{lib,specs}/**/*")
31
- end
32
-
33
- Rake::GemPackageTask.new(spec) do |pkg|
34
- pkg.gem_spec = spec
15
+
16
+ begin
17
+ gem 'jeweler', '~> 1.4'
18
+ require 'jeweler'
19
+ Jeweler::Tasks.new do |gem|
20
+ gem.name = GEM
21
+ gem.version = GEM_VERSION
22
+ gem.summary = SUMMARY
23
+ gem.description = SUMMARY
24
+ gem.email = EMAIL
25
+ gem.homepage = HOMEPAGE
26
+ gem.authors = AUTHORS
27
+
28
+ # Dependencies
29
+ gem.add_development_dependency "rspec", ">= 1.2.9"
30
+ gem.add_dependency "resque", ">= 1.9.9"
31
+ gem.add_dependency "mail", ">= 2.2.5"
32
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
33
+
34
+ gem.require_path = 'lib'
35
+ gem.autorequire = GEM
36
+ gem.files = %w(LICENSE Rakefile) + Dir.glob("{lib,specs}/**/*")
37
+ gem.platform = Gem::Platform::RUBY
38
+ gem.has_rdoc = true
39
+ gem.extra_rdoc_files = ["LICENSE"]
40
+ end
41
+ Jeweler::GemcutterTasks.new
42
+ FileList['tasks/**/*.rake'].each { |task| import task }
43
+ rescue LoadError
44
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
35
45
  end
36
-
46
+
37
47
  task :default => :spec
38
48
 
39
49
  desc "install the gem locally"
40
50
  task :install => [:package] do
41
51
  sh %{sudo gem install pkg/#{GEM}-#{GEM_VERSION}}
42
52
  end
43
-
44
- desc "create a gemspec file"
45
- task :make_spec do
46
- File.open("#{GEM}.gemspec", "w") do |file|
47
- file.puts spec.to_ruby
48
- end
49
- end
50
-
51
- desc "Run tests"
52
- task :test do
53
- # Don't use the rake/testtask because it loads a new
54
- # Ruby interpreter - we want to run tests with the current
55
- # `rake` so our library manager still works
56
- Dir['test/*_test.rb'].each do |f|
57
- require f
58
- end
59
- end
60
53
 
61
54
  desc "Run all examples"
62
55
  Spec::Rake::SpecTask.new('spec') do |t|
@@ -71,3 +64,13 @@ Spec::Rake::SpecTask.new('spec:rcov') do |t|
71
64
  t.spec_files = FileList['spec/**/*_spec.rb']
72
65
  t.rcov_opts = ['--exclude spec,/home']
73
66
  end
67
+
68
+ require 'rake/rdoctask'
69
+ Rake::RDocTask.new do |rdoc|
70
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
71
+
72
+ rdoc.rdoc_dir = 'rdoc'
73
+ rdoc.title = "rock-queue #{version}"
74
+ rdoc.rdoc_files.include('README*')
75
+ rdoc.rdoc_files.include('lib/**/*.rb')
76
+ end
@@ -29,7 +29,7 @@ module RockQueue
29
29
  end
30
30
 
31
31
  def clear
32
- system "pkill beanstalkd"
32
+ system "killall beanstalkd"
33
33
  system "beanstalkd -d -p #{@options[:port]}"
34
34
  end
35
35
 
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ RockQueue.setup(
4
+ :adapter => :resque,
5
+ :server => 'localhost',
6
+ :port => 6379
7
+ )
8
+
9
+ describe "Object with ActiveRecordHelper" do
10
+ before(:each) do
11
+ @post = Post.create(:title => "Test")
12
+ RockQueue.clear
13
+ end
14
+
15
+ it "class responds to .perform" do
16
+ @post.class.perform([@post.id, :title]).should == "Test"
17
+ end
18
+
19
+ it "calls a method asynchronously" do
20
+ @post.async(:archive)
21
+ RockQueue.pop(:default).should == [Post, [[@post.id, "archive"]]]
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "Beanstalkd" do
4
+ before(:each) do
5
+ @adapter = RockQueue::Beanstalkd.new(:server => 'localhost', :port => 11300)
6
+ @adapter.clear
7
+ end
8
+
9
+ it_should_behave_like "RockQueue adapter"
10
+ end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ require 'mail'
4
+
5
+ describe "EmailNotifier" do
6
+ before do
7
+ config = {
8
+ :from => "joe@localhost",
9
+ :to => "mike@localhost"
10
+ }
11
+ @notifier = RockQueue::EmailNotifier.new(config)
12
+
13
+ Mail.defaults do
14
+ delivery_method :test
15
+ end
16
+ end
17
+
18
+ it "sends an email" do
19
+ err = nil
20
+ begin
21
+ raise Exception, "Failure"
22
+ rescue Exception => e
23
+ err = e
24
+ end
25
+ @notifier.update(err)
26
+ email = Mail::TestMailer.deliveries.first
27
+ email.subject.should == "Processing error - 'Failure'"
28
+ end
29
+ end
@@ -0,0 +1,40 @@
1
+ require 'active_record'
2
+
3
+ ActiveRecord::Base.establish_connection(
4
+ :adapter => 'sqlite3',
5
+ :database => ':memory:'
6
+ )
7
+
8
+ class Post < ActiveRecord::Base
9
+ include RockQueue::ActiveRecordHelper
10
+
11
+ def archive
12
+ @archived = true
13
+ end
14
+
15
+ def archived?
16
+ @archived == true
17
+ end
18
+ end
19
+
20
+ ActiveRecord::Schema.define(:version => 1) do
21
+ create_table :posts do |t|
22
+ t.string :title
23
+ end
24
+ end
25
+
26
+ Post.create!(:title => "Post 1")
27
+ Post.create!(:title => "Post 2")
28
+ Post.create!(:title => "Post 3")
29
+ Post.create!(:title => "Post 4")
30
+
31
+ class TestJob
32
+ def self.perform
33
+ end
34
+ end
35
+
36
+ class BadJob
37
+ def self.perform
38
+ fail
39
+ end
40
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "QueueObject" do
4
+ before(:each) do
5
+ @qo = RockQueue::QueueObject.new(nil, [])
6
+ end
7
+
8
+ it "should have no fails" do
9
+ @qo.fails.should be_empty
10
+ end
11
+
12
+ it "returns 1 as sleep time" do
13
+ @qo.get_sleep_time.should == 1
14
+ end
15
+
16
+ describe "after 2 fails" do
17
+ before(:each) do
18
+ 2.times { @qo.add_fail Exception.new("Failure") }
19
+ end
20
+
21
+ it "returns 4 as sleep time" do
22
+ @qo.get_sleep_time.should == 4
23
+ end
24
+
25
+ it "sends a notification after another fail" do
26
+ notifiers_mock = mock("Notifiers")
27
+ notifiers_mock.should_receive(:notify)
28
+ RockQueue::Notifiers.stub(:instance).and_return(notifiers_mock)
29
+ @qo.add_fail Exception.new("Failure")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "ResqueQueue" do
4
+ before(:each) do
5
+ @adapter = RockQueue::ResqueQueue.new(:server => 'localhost', :port => 6379)
6
+ @adapter.clear
7
+ end
8
+
9
+ it_should_behave_like "RockQueue adapter"
10
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "RockQueue" do
4
+ it "should setup Resque adapter" do
5
+ RockQueue.setup :adapter => :resque,
6
+ :server => 'localhost',
7
+ :port => 6379
8
+ RockQueue.adapter.kind_of? RockQueue::ResqueQueue
9
+ end
10
+
11
+ it "should setup Beanstalkd adapter" do
12
+ RockQueue.setup :adapter => :beanstalkd,
13
+ :server => 'localhost',
14
+ :port => 11300
15
+ RockQueue.adapter.kind_of? RockQueue::Beanstalkd
16
+ end
17
+
18
+ it "should setup DelayedJob adapter" do
19
+ RockQueue.setup :adapter => :delayed_job
20
+ RockQueue.adapter.kind_of? RockQueue::DelayedJob
21
+ end
22
+
23
+ it "should fail with unsupported adapter" do
24
+ lambda {
25
+ RockQueue.setup :adapter => :bad
26
+ }.should raise_error
27
+ end
28
+
29
+ it "should fail whe not connected" do
30
+ RockQueue.disconnect
31
+ lambda { RockQueue.adapter }.should raise_error
32
+ end
33
+ end
@@ -0,0 +1,37 @@
1
+ shared_examples_for "RockQueue adapter" do
2
+ it "pushes a job" do
3
+ @adapter.push(:default, TestJob, 1).should_not be_nil
4
+ end
5
+
6
+ it "pops a job" do
7
+ @adapter.push(:default, TestJob, 1)
8
+ @adapter.pop(:default).should == [TestJob, [1]]
9
+ end
10
+
11
+ it "returns number of jobs in queue" do
12
+ @adapter.push(:queue1, TestJob, 1)
13
+ @adapter.push(:queue1, TestJob, 2)
14
+ @adapter.push(:queue2, TestJob, 3)
15
+
16
+ @adapter.size(:queue1).should == 2
17
+ @adapter.size(:queue2).should == 1
18
+ end
19
+
20
+ it "clears job queues" do
21
+ @adapter.push(:queue1, TestJob, 1)
22
+ @adapter.push(:queue1, TestJob, 2)
23
+ @adapter.clear
24
+ @adapter.queues.should == [:default]
25
+ end
26
+
27
+ it "always have default queue" do
28
+ @adapter.clear
29
+ @adapter.queues.should == [:default]
30
+ end
31
+
32
+ it "returns queue names" do
33
+ @adapter.push(:queue1, TestJob, 1)
34
+ @adapter.push(:queue2, TestJob, 2)
35
+ @adapter.queues.should == [:default, :queue1, :queue2]
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ $:.push File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'rubygems'
4
+ require 'rock-queue'
5
+
6
+ require File.dirname(__FILE__) + '/fixtures'
7
+ require File.dirname(__FILE__) + '/shared'
@@ -0,0 +1,64 @@
1
+ require File.dirname(__FILE__ ) + '/spec_helper'
2
+
3
+ describe "Worker" do
4
+ before(:each) do
5
+ RockQueue.setup :adapter => :resque,
6
+ :server => 'localhost',
7
+ :port => 6379
8
+ RockQueue.clear
9
+ end
10
+
11
+ it "processes default queue when no is specified" do
12
+ @worker = RockQueue::Worker.new
13
+ @worker.queues.should == [:default]
14
+ end
15
+
16
+ it "works" do
17
+ @worker = RockQueue::Worker.new(:default)
18
+ post_mock = mock("Post")
19
+
20
+ Post.stub!(:find).and_return(post_mock)
21
+ RockQueue.push :default, Post, 1, :archive
22
+ post_mock.should_receive(:archive)
23
+ @worker.work(0)
24
+ end
25
+
26
+ it "should retry a failed job 3 times" do
27
+ RockQueue.push :default, BadJob
28
+ @worker = RockQueue::Worker.new(:default)
29
+ @worker.work(0)
30
+ end
31
+
32
+ it "processes multiple jobs" do
33
+ RockQueue.push :default, TestJob
34
+ RockQueue.push :default, TestJob
35
+ RockQueue.push :default, TestJob
36
+
37
+ @worker = RockQueue::Worker.new(:default)
38
+ @worker.work(0)
39
+ RockQueue.size(:default).should == 0
40
+ end
41
+
42
+ it "works on multiple queues" do
43
+ RockQueue.push :queue1, TestJob
44
+ RockQueue.push :queue1, TestJob
45
+ RockQueue.push :queue2, TestJob
46
+
47
+ @worker = RockQueue::Worker.new(:queue1, :queue2)
48
+ @worker.work(0)
49
+ RockQueue.size(:queue1).should == 0
50
+ RockQueue.size(:queue2).should == 0
51
+ end
52
+
53
+ it "works on all queues" do
54
+ RockQueue.push :queue1, TestJob
55
+ RockQueue.push :queue2, TestJob
56
+ RockQueue.push :queue3, TestJob
57
+
58
+ @worker = RockQueue::Worker.new("*")
59
+ @worker.work(0)
60
+ RockQueue.size(:queue1).should == 0
61
+ RockQueue.size(:queue2).should == 0
62
+ RockQueue.size(:queue3).should == 0
63
+ end
64
+ end
metadata CHANGED
@@ -1,23 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rock-queue
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 17
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 3
8
- - 0
9
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Grzegorz Kazulak
14
+ - Wojtek Mach
15
+ - Piotr Chmolowski
16
+ - Daniel Chrusciak
13
17
  autorequire: rock-queue
14
18
  bindir: bin
15
19
  cert_chain: []
16
20
 
17
- date: 2010-05-28 00:00:00 +02:00
21
+ date: 2010-07-30 00:00:00 +02:00
18
22
  default_executable:
19
- dependencies: []
20
-
23
+ dependencies:
24
+ - !ruby/object:Gem::Dependency
25
+ name: rspec
26
+ prerelease: false
27
+ requirement: &id001 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ hash: 13
33
+ segments:
34
+ - 1
35
+ - 2
36
+ - 9
37
+ version: 1.2.9
38
+ type: :development
39
+ version_requirements: *id001
40
+ - !ruby/object:Gem::Dependency
41
+ name: resque
42
+ prerelease: false
43
+ requirement: &id002 !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 33
49
+ segments:
50
+ - 1
51
+ - 9
52
+ - 9
53
+ version: 1.9.9
54
+ type: :runtime
55
+ version_requirements: *id002
56
+ - !ruby/object:Gem::Dependency
57
+ name: mail
58
+ prerelease: false
59
+ requirement: &id003 !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 13
65
+ segments:
66
+ - 2
67
+ - 2
68
+ - 5
69
+ version: 2.2.5
70
+ type: :runtime
71
+ version_requirements: *id003
21
72
  description: A unified interface for various messaging queues
22
73
  email: gregorz.kazulak@gmail.com
23
74
  executables: []
@@ -29,50 +80,73 @@ extra_rdoc_files:
29
80
  files:
30
81
  - LICENSE
31
82
  - Rakefile
83
+ - lib/rock-queue.rb
32
84
  - lib/rock-queue/active_record_helper.rb
33
85
  - lib/rock-queue/adapters/beanstalkd.rb
34
86
  - lib/rock-queue/adapters/delayed_job.rb
35
87
  - lib/rock-queue/adapters/resque.rb
36
88
  - lib/rock-queue/config.rb
37
89
  - lib/rock-queue/errors.rb
90
+ - lib/rock-queue/notifiers.rb
38
91
  - lib/rock-queue/notifiers/abstract_notifier.rb
39
92
  - lib/rock-queue/notifiers/email_notifier.rb
40
- - lib/rock-queue/notifiers.rb
41
93
  - lib/rock-queue/queue_object.rb
42
94
  - lib/rock-queue/tasks.rb
43
- - lib/rock-queue/web/views/dashboard.erb
44
95
  - lib/rock-queue/web.rb
96
+ - lib/rock-queue/web/views/dashboard.erb
45
97
  - lib/rock-queue/worker.rb
46
- - lib/rock-queue.rb
98
+ - spec/active_record_helper_spec.rb
99
+ - spec/beanstalkd_spec.rb
100
+ - spec/email_notifier_spec.rb
101
+ - spec/fixtures.rb
102
+ - spec/queue_object_spec.rb
103
+ - spec/resque_queue_spec.rb
104
+ - spec/rock_queue_spec.rb
105
+ - spec/shared.rb
106
+ - spec/spec_helper.rb
107
+ - spec/worker_spec.rb
47
108
  has_rdoc: true
48
109
  homepage: http://github.com/grzegorzkazulak/rock-queue
49
110
  licenses: []
50
111
 
51
112
  post_install_message:
52
- rdoc_options: []
53
-
113
+ rdoc_options:
114
+ - --charset=UTF-8
54
115
  require_paths:
55
116
  - lib
56
117
  required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
57
119
  requirements:
58
120
  - - ">="
59
121
  - !ruby/object:Gem::Version
122
+ hash: 3
60
123
  segments:
61
124
  - 0
62
125
  version: "0"
63
126
  required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
64
128
  requirements:
65
129
  - - ">="
66
130
  - !ruby/object:Gem::Version
131
+ hash: 3
67
132
  segments:
68
133
  - 0
69
134
  version: "0"
70
135
  requirements: []
71
136
 
72
137
  rubyforge_project:
73
- rubygems_version: 1.3.6
138
+ rubygems_version: 1.3.7
74
139
  signing_key:
75
140
  specification_version: 3
76
141
  summary: A unified interface for various messaging queues
77
- test_files: []
78
-
142
+ test_files:
143
+ - spec/active_record_helper_spec.rb
144
+ - spec/beanstalkd_spec.rb
145
+ - spec/email_notifier_spec.rb
146
+ - spec/fixtures.rb
147
+ - spec/queue_object_spec.rb
148
+ - spec/resque_queue_spec.rb
149
+ - spec/rock_queue_spec.rb
150
+ - spec/shared.rb
151
+ - spec/spec_helper.rb
152
+ - spec/worker_spec.rb