resque-remote-namespace 0.1.0

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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in resque-remote.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,45 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ resque-remote-namespace (0.1.0)
5
+ resque (~> 1.0)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ multi_json (1.5.0)
12
+ rack (1.4.1)
13
+ rack-protection (1.3.2)
14
+ rack
15
+ redis (3.0.2)
16
+ redis-namespace (1.2.1)
17
+ redis (~> 3.0.0)
18
+ resque (1.23.0)
19
+ multi_json (~> 1.0)
20
+ redis-namespace (~> 1.0)
21
+ sinatra (>= 0.9.2)
22
+ vegas (~> 0.1.2)
23
+ rspec (2.8.0)
24
+ rspec-core (~> 2.8.0)
25
+ rspec-expectations (~> 2.8.0)
26
+ rspec-mocks (~> 2.8.0)
27
+ rspec-core (2.8.0)
28
+ rspec-expectations (2.8.0)
29
+ diff-lcs (~> 1.1.2)
30
+ rspec-mocks (2.8.0)
31
+ sinatra (1.3.3)
32
+ rack (~> 1.3, >= 1.3.6)
33
+ rack-protection (~> 1.2)
34
+ tilt (~> 1.3, >= 1.3.3)
35
+ tilt (1.3.3)
36
+ vegas (0.1.11)
37
+ rack (>= 1.0.0)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ bundler (~> 1.0)
44
+ resque-remote-namespace!
45
+ rspec (~> 2.8)
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ `resque-remote-namespace` is a fork of the [remote-namespace gem](https://github.com/localshred/resque-remote) that allows for remote enqueueing and dequeueing of jobs on different redis namespaces.
2
+
3
+ # Installation
4
+
5
+ **Note: You must have a version of Resque installed or added to your Gemfile for `resque-remote-namespace` to work. Resque Version 0.10.0 has been tested to work with the current release of `resque-remote-namespace`.**
6
+
7
+ Add it to your Bundler `Gemfile`:
8
+
9
+ # Gemfile
10
+ gem 'resque', '0.10.0'
11
+ gem 'resque-remote-namespace', :git => 'git://github.com/lafave/resque-remote-namespace.git'
12
+
13
+ And then run a `bundle install`.
14
+
15
+ # Usage
16
+
17
+ ## Enqueueing
18
+ ```ruby
19
+ # Enqueues TestJob to the "default" queue on the "resque:foo" redis namespace with "foo" as its sole argument.
20
+ Resque.remote_enqueue_to 'default', 'resque:foo', 'TestJob', 'foo'
21
+ ```
22
+
23
+ ## Dequeueing
24
+ ```ruby
25
+ # Dequeues TestJob from the "default" queue on the "resque:foo" redis namespace with "foo" as its sole argument
26
+ Resque.remote_dequeue_from 'default', 'resque:foo', 'TestJob', 'foo'
27
+ ```
28
+
29
+ ## Worker Processing
30
+
31
+ The job you are remotely enqueueing does not need to exist in the application you are in enqueueing it from, however if `Resque.inline` is set to `true` (as is often the case in a development or test environment) then Resque may attempt to execute the job in the current application, depending on which version of Resque you are using. This will cause a `NameError` to be raised.
32
+
33
+ To fix this, just create a stub of the job you are remote enqueueing. Ex:
34
+ ```ruby
35
+ # Stub of TestJob. Actual implementation is located in X.
36
+ class TestJob
37
+ def self.perform(param1) end
38
+ end
39
+ ```
40
+
41
+ Note that the actual implementation of the remote job does not need to have its `@queue` defined.
42
+
43
+ ```ruby
44
+ class TestJob
45
+ # no queue needed
46
+
47
+ def self.perform(param1)
48
+ ...
49
+ end
50
+ end
51
+ ```
52
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,2 @@
1
+ require 'resque'
2
+ require 'resque-remote-namespace/remote_namespace'
@@ -0,0 +1,41 @@
1
+ module Resque
2
+ module Plugins
3
+ module RemoteNamespace
4
+
5
+ # Remote enqueue of a job by temporarily changing the Resque redis
6
+ # namespace.
7
+ #
8
+ # @param [ String ] queue The queue to enqueue the job to.
9
+ # @param [ String ] namespace The namespace to enqueue the job to.
10
+ # @param [ String ] klass The class name of the job to enqueue.
11
+ # @param [ Array ] args The arguments to the job being remotely enqueued.
12
+ def remote_enqueue_to(queue, namespace, klass, *args)
13
+ original_namespace = Resque.redis.namespace
14
+ Resque.redis.namespace = namespace
15
+
16
+ Resque::Job.create(queue.to_sym, klass, *args)
17
+ ensure
18
+ Resque.redis.namespace = original_namespace
19
+ end
20
+
21
+ # Remote dequeue of a job by temporarily changin gthe Resque redis
22
+ # namespace.
23
+ #
24
+ # @param [ String ] queue The queue to dequeue the job from.
25
+ # @param [ String ] namespace The namespace to dequeue the job from.
26
+ # @param [ String ] klass The class name of the job to enqueue.
27
+ # @param [ Array ] args The arguments to the job being remotely dequeued.
28
+ def remote_dequeue_from(queue, namespace, klass, *args)
29
+ original_namespace = Resque.redis.namespace
30
+ Resque.redis.namespace = namespace
31
+
32
+ Resque::Job.destroy(queue.to_sym, klass, *args)
33
+ ensure
34
+ Resque.redis.namespace = original_namespace
35
+ end
36
+ end
37
+ end
38
+
39
+ # Pull the remote methods into the Resque module
40
+ extend Plugins::RemoteNamespace
41
+ end
@@ -0,0 +1,7 @@
1
+ module Resque
2
+ module Plugins
3
+ module RemoteNamespace
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/resque-remote-namespace/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'resque-remote-namespace'
6
+ s.version = Resque::Plugins::RemoteNamespace::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ['BJ Neilsen', 'Adam LaFave']
9
+ s.email = ['bj.neilsen@gmail.com', 'lafave.adam@gmail.com']
10
+ s.homepage = 'http://github.com/lafave/resque-remote-namespace'
11
+ s.summary = %Q{
12
+ Resque plugin to allow remote enqueueing and dequeueing of jobs across
13
+ different namespaces.
14
+ }
15
+ s.description = %Q{
16
+ Remotely enqueueing and dequeueing jobs across Redis namespaces should
17
+ be simpler. BJ Neilsen laid a solid foundation for this gem, which is
18
+ forked off of his gem resque-remote. That said, these two gems provide a
19
+ different set of methods for remote enqueueing and dequeueing.
20
+
21
+ If all you need is remote enqueueing within the same namespace, use
22
+ resque-remote.
23
+ }
24
+
25
+ s.required_rubygems_version = '>= 1.3.6'
26
+ s.rubyforge_project = 'resque-remote-namespace'
27
+
28
+ s.add_dependency 'resque', '~> 1.0'
29
+
30
+ s.add_development_dependency 'bundler', '~> 1.0'
31
+ s.add_development_dependency 'rspec', '~> 2.8'
32
+
33
+ s.files = `git ls-files`.split("\n")
34
+ s.require_path = 'lib'
35
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Resque::Plugins::RemoteNamespace do
4
+ let(:queue) { :default }
5
+ let(:remote_namespace) { 'resque:bar' }
6
+
7
+ before :each do
8
+ from_namespace remote_namespace do
9
+ Resque.remove_queue(queue)
10
+ end
11
+ end
12
+
13
+ it 'passes resque lint' do
14
+ lambda {
15
+ Resque::Plugin.lint(Resque::Plugins::RemoteNamespace)
16
+ }.should_not raise_error
17
+ end
18
+
19
+ it 'response to remote_enqueue_to' do
20
+ Resque.should respond_to :remote_enqueue_to
21
+ end
22
+
23
+ it 'response to remote_dequeue_from' do
24
+ Resque.should respond_to :remote_dequeue_from
25
+ end
26
+
27
+ describe '#remote_enqueue_to' do
28
+ subject { Resque.remote_enqueue_to queue, remote_namespace, 'TestJob', 'foo' }
29
+
30
+ it 'temporarily changes Resque.redis.namespace' do
31
+ Resque.redis.should_receive(:namespace=)
32
+ .with('resque:foo')
33
+ .once
34
+
35
+ Resque.redis.should_receive(:namespace=)
36
+ .with('resque:bar')
37
+ .once
38
+
39
+ subject
40
+ end
41
+
42
+ it 'enqueues a job' do
43
+ expect {
44
+ subject
45
+ }.to change {
46
+ from_namespace remote_namespace do
47
+ Resque.size(queue)
48
+ end
49
+ }.from(0).to(1)
50
+ end
51
+ end
52
+
53
+ describe '#remote_dequeue_from' do
54
+ subject { Resque.remote_dequeue_from queue, remote_namespace, 'TestJob', 'foo' }
55
+
56
+ it 'temporarily changes Resque.redis.namespace' do
57
+ Resque.redis.should_receive(:namespace=)
58
+ .with('resque:foo')
59
+ .once
60
+
61
+ Resque.redis.should_receive(:namespace=)
62
+ .with('resque:bar')
63
+ .once
64
+
65
+ subject
66
+ end
67
+
68
+ it 'dequeues a job' do
69
+ Resque.remote_enqueue_to queue, remote_namespace, 'TestJob', 'foo'
70
+
71
+ expect {
72
+ subject
73
+ }.to change {
74
+ from_namespace remote_namespace do
75
+ Resque.size(queue)
76
+ end
77
+ }.from(1).to(0)
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rspec'
4
+
5
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
6
+
7
+ require 'resque-remote-namespace'
8
+
9
+ Resque.redis.namespace = 'resque:foo'
10
+
11
+ # Run a block of code from a different namespace.
12
+ #
13
+ # @param [ String ] namespace The namespace to execute the block of code from.
14
+ # @param [ Proc ] block The block of code to execute from a different
15
+ # namespace.
16
+ def from_namespace(namespace, &block)
17
+ original_namespace = Resque.redis.namespace
18
+ Resque.redis.namespace = namespace
19
+
20
+ yield if block_given?
21
+ ensure
22
+ Resque.redis.namespace = original_namespace
23
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resque-remote-namespace
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - BJ Neilsen
9
+ - Adam LaFave
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-03-12 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: resque
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '1.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '1.0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: bundler
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: '1.0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.8'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '2.8'
63
+ description: ! "\n Remotely enqueueing and dequeueing jobs across Redis namespaces
64
+ should\n be simpler. BJ Neilsen laid a solid foundation for this gem, which is\n
65
+ \ forked off of his gem resque-remote. That said, these two gems provide a\n different
66
+ set of methods for remote enqueueing and dequeueing.\n\n If all you need is remote
67
+ enqueueing within the same namespace, use\n resque-remote.\n "
68
+ email:
69
+ - bj.neilsen@gmail.com
70
+ - lafave.adam@gmail.com
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - .gitignore
76
+ - Gemfile
77
+ - Gemfile.lock
78
+ - README.md
79
+ - Rakefile
80
+ - lib/resque-remote-namespace.rb
81
+ - lib/resque-remote-namespace/remote_namespace.rb
82
+ - lib/resque-remote-namespace/version.rb
83
+ - resque-remote-namespace.gemspec
84
+ - spec/remote_spec.rb
85
+ - spec/spec_helper.rb
86
+ homepage: http://github.com/lafave/resque-remote-namespace
87
+ licenses: []
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.3.6
104
+ requirements: []
105
+ rubyforge_project: resque-remote-namespace
106
+ rubygems_version: 1.8.23
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: Resque plugin to allow remote enqueueing and dequeueing of jobs across different
110
+ namespaces.
111
+ test_files: []