elecnix-workling 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/CHANGES.markdown +72 -0
- data/README.markdown +386 -0
- data/TODO.markdown +27 -0
- data/VERSION.yml +4 -0
- data/lib/rude_q/client.rb +11 -0
- data/lib/workling/base.rb +71 -0
- data/lib/workling/clients/amqp_client.rb +56 -0
- data/lib/workling/clients/base.rb +57 -0
- data/lib/workling/clients/memcache_queue_client.rb +83 -0
- data/lib/workling/discovery.rb +14 -0
- data/lib/workling/remote/invokers/base.rb +124 -0
- data/lib/workling/remote/invokers/basic_poller.rb +41 -0
- data/lib/workling/remote/invokers/eventmachine_subscriber.rb +41 -0
- data/lib/workling/remote/invokers/threaded_poller.rb +140 -0
- data/lib/workling/remote/runners/backgroundjob_runner.rb +35 -0
- data/lib/workling/remote/runners/base.rb +42 -0
- data/lib/workling/remote/runners/client_runner.rb +45 -0
- data/lib/workling/remote/runners/not_remote_runner.rb +23 -0
- data/lib/workling/remote/runners/rudeq_runner.rb +23 -0
- data/lib/workling/remote/runners/spawn_runner.rb +38 -0
- data/lib/workling/remote/runners/starling_runner.rb +13 -0
- data/lib/workling/remote.rb +42 -0
- data/lib/workling/return/store/base.rb +42 -0
- data/lib/workling/return/store/iterator.rb +24 -0
- data/lib/workling/return/store/memory_return_store.rb +26 -0
- data/lib/workling/return/store/rudeq_return_store.rb +24 -0
- data/lib/workling/return/store/starling_return_store.rb +31 -0
- data/lib/workling/routing/base.rb +13 -0
- data/lib/workling/routing/class_and_method_routing.rb +55 -0
- data/lib/workling/rudeq/client.rb +17 -0
- data/lib/workling/rudeq/poller.rb +116 -0
- data/lib/workling/rudeq.rb +7 -0
- data/lib/workling.rb +150 -0
- data/test/class_and_method_routing_test.rb +18 -0
- data/test/clients/memory_queue_client.rb +36 -0
- data/test/discovery_test.rb +13 -0
- data/test/invoker_basic_poller_test.rb +29 -0
- data/test/invoker_eventmachine_subscription_test.rb +26 -0
- data/test/invoker_threaded_poller_test.rb +34 -0
- data/test/memcachequeue_client_test.rb +36 -0
- data/test/memory_return_store_test.rb +32 -0
- data/test/mocks/client.rb +9 -0
- data/test/mocks/logger.rb +5 -0
- data/test/mocks/rude_queue.rb +9 -0
- data/test/mocks/spawn.rb +5 -0
- data/test/not_remote_runner_test.rb +11 -0
- data/test/remote_runner_test.rb +58 -0
- data/test/rescue_test.rb +24 -0
- data/test/return_store_test.rb +24 -0
- data/test/rudeq_client_test.rb +30 -0
- data/test/rudeq_poller_test.rb +14 -0
- data/test/rudeq_return_store_test.rb +20 -0
- data/test/rudeq_runner_test.rb +22 -0
- data/test/runners/thread_runner.rb +22 -0
- data/test/spawn_runner_test.rb +10 -0
- data/test/starling_return_store_test.rb +29 -0
- data/test/starling_runner_test.rb +8 -0
- data/test/test_helper.rb +50 -0
- data/test/workers/analytics/invites.rb +10 -0
- data/test/workers/util.rb +25 -0
- metadata +129 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
|
|
3
|
+
context "the RudeQ return store" do
|
|
4
|
+
|
|
5
|
+
def get_store
|
|
6
|
+
Workling::Return::Store::RudeqReturnStore.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
specify "should defer :get to the RudeQueue" do
|
|
10
|
+
RudeQueue.expects(:get).with(:abc)
|
|
11
|
+
store = get_store
|
|
12
|
+
store.get(:abc)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
specify "should defer :set to the RudeQueue" do
|
|
16
|
+
RudeQueue.expects(:set).with(:abc, "some value")
|
|
17
|
+
store = get_store
|
|
18
|
+
store.set(:abc, "some value")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
|
+
|
|
3
|
+
context "the RudeQ runner" do
|
|
4
|
+
setup do
|
|
5
|
+
@before = Workling::Remote.dispatcher
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
specify "should set up a RudeQ client" do
|
|
9
|
+
Workling::Remote.dispatcher = Workling::Remote::Runners::RudeqRunner.new
|
|
10
|
+
Workling::Remote.dispatcher.client.should.not.equal nil
|
|
11
|
+
Workling::Remote.dispatcher.client.queue.should.equal RudeQueue
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
specify ":run should use Starling routing" do
|
|
15
|
+
RudeQueue.expects(:set).with("utils__echo", "hello")
|
|
16
|
+
Workling::Remote::Runners::RudeqRunner.new.run(Util, :echo, "hello")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
teardown do
|
|
20
|
+
Workling::Remote.dispatcher = @before
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'workling/remote/runners/base'
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Spawns a Thread. Used for Tests only, to simulate a remote runner more realistically.
|
|
5
|
+
#
|
|
6
|
+
module Workling
|
|
7
|
+
module Remote
|
|
8
|
+
module Runners
|
|
9
|
+
class ThreadRunner < Workling::Remote::Runners::Base
|
|
10
|
+
|
|
11
|
+
# spawns a thread.
|
|
12
|
+
def run(clazz, method, options = {})
|
|
13
|
+
Thread.new {
|
|
14
|
+
dispatch!(clazz, method, options)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return nil
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
|
+
|
|
3
|
+
context "the spawn runner" do
|
|
4
|
+
specify "should invoke work that is delegated to it" do
|
|
5
|
+
old_dispatcher = Workling::Remote.dispatcher
|
|
6
|
+
Workling::Remote.dispatcher = Workling::Remote::Runners::SpawnRunner.new
|
|
7
|
+
Workling::Remote.run(:util, :echo)
|
|
8
|
+
Workling::Remote.dispatcher = old_dispatcher
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
|
|
3
|
+
context "the starling return store" do
|
|
4
|
+
setup do
|
|
5
|
+
# the memoryreturnstore behaves exactly like memcache.
|
|
6
|
+
MemCache.expects(:new).at_least(0).returns Workling::Return::Store::MemoryReturnStore.new
|
|
7
|
+
Workling::Clients::MemcacheQueueClient.expects(:connection).at_least(0).returns Workling::Return::Store::MemoryReturnStore.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
specify "should be able to store a value with a key, and then retrieve that same value with the same key." do
|
|
11
|
+
store = Workling::Return::Store::StarlingReturnStore.new
|
|
12
|
+
key, value = :gender, :undecided
|
|
13
|
+
store.set(key, value)
|
|
14
|
+
store.get(key).should.equal(value)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
specify "should delete values in the store once they have been get()tted." do
|
|
18
|
+
store = Workling::Return::Store::StarlingReturnStore.new
|
|
19
|
+
key, value = :gender, :undecided
|
|
20
|
+
store.set(key, value)
|
|
21
|
+
store.get(key)
|
|
22
|
+
store.get(key).should.equal nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
specify "should return nothing for a key that is not in the store" do
|
|
26
|
+
store = Workling::Return::Store::StarlingReturnStore.new
|
|
27
|
+
store.get(:bollocks).should.equal nil
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
|
2
|
+
|
|
3
|
+
context "the starling runner" do
|
|
4
|
+
specify "should set up a starling client" do
|
|
5
|
+
Workling::Remote.dispatcher = Workling::Remote::Runners::StarlingRunner.new
|
|
6
|
+
Workling::Remote.dispatcher.client.should.not.equal nil
|
|
7
|
+
end
|
|
8
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
plugin_test = File.dirname(__FILE__)
|
|
2
|
+
plugin_root = File.join plugin_test, '..'
|
|
3
|
+
plugin_lib = File.join plugin_root, 'lib'
|
|
4
|
+
|
|
5
|
+
require 'rubygems'
|
|
6
|
+
require 'active_support'
|
|
7
|
+
require 'active_record'
|
|
8
|
+
require 'test/spec'
|
|
9
|
+
require 'mocha'
|
|
10
|
+
|
|
11
|
+
$:.unshift plugin_lib, plugin_test
|
|
12
|
+
|
|
13
|
+
RAILS_ENV = "test"
|
|
14
|
+
RAILS_ROOT = File.dirname(__FILE__) + "/.." # fake the rails root directory.
|
|
15
|
+
RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
|
|
16
|
+
RAILS_DEFAULT_LOGGER.level = Logger::WARN
|
|
17
|
+
|
|
18
|
+
require "mocks/spawn"
|
|
19
|
+
require "mocks/logger"
|
|
20
|
+
require "mocks/rude_queue"
|
|
21
|
+
require "workling"
|
|
22
|
+
require "workling/base"
|
|
23
|
+
|
|
24
|
+
Workling.try_load_a_memcache_client
|
|
25
|
+
|
|
26
|
+
require "workling/discovery"
|
|
27
|
+
require "workling/routing/class_and_method_routing"
|
|
28
|
+
require "workling/remote/invokers/basic_poller"
|
|
29
|
+
require "workling/remote/invokers/threaded_poller"
|
|
30
|
+
require "workling/remote/invokers/eventmachine_subscriber"
|
|
31
|
+
require "workling/rudeq/poller"
|
|
32
|
+
require "workling/remote"
|
|
33
|
+
require "workling/remote/runners/not_remote_runner"
|
|
34
|
+
require "workling/remote/runners/spawn_runner"
|
|
35
|
+
require "workling/remote/runners/rudeq_runner"
|
|
36
|
+
require "workling/remote/runners/starling_runner"
|
|
37
|
+
require "workling/remote/runners/client_runner"
|
|
38
|
+
require "workling/remote/runners/backgroundjob_runner"
|
|
39
|
+
require "workling/return/store/memory_return_store"
|
|
40
|
+
require "workling/return/store/starling_return_store"
|
|
41
|
+
require "workling/return/store/rudeq_return_store"
|
|
42
|
+
require "workling/return/store/iterator"
|
|
43
|
+
require "mocks/client"
|
|
44
|
+
require "clients/memory_queue_client"
|
|
45
|
+
require "runners/thread_runner"
|
|
46
|
+
|
|
47
|
+
# worklings are in here.
|
|
48
|
+
Workling.load_path = ["#{ plugin_root }/test/workers"]
|
|
49
|
+
Workling::Return::Store.instance = Workling::Return::Store::MemoryReturnStore.new
|
|
50
|
+
Workling::Discovery.discover!
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'workling/base'
|
|
2
|
+
|
|
3
|
+
class Util < Workling::Base
|
|
4
|
+
def echo(*args)
|
|
5
|
+
# shout!
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def faulty(args)
|
|
9
|
+
raise Exception.new("this is pretty faulty.")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def stuffing(contents)
|
|
13
|
+
# expects contents.
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def broken(*args)
|
|
17
|
+
raise "Broken"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
cattr_reader :on_error_call_count
|
|
21
|
+
@@on_error_call_count = 0
|
|
22
|
+
def on_error(e)
|
|
23
|
+
@@on_error_call_count += 1
|
|
24
|
+
end
|
|
25
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: elecnix-workling
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.3.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Rany Keddo
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-02-25 00:00:00 -08:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description: easily do background work in rails, without commiting to a particular runner. comes with starling, bj and spawn runners.
|
|
17
|
+
email: nicolas@marchildon.net
|
|
18
|
+
executables: []
|
|
19
|
+
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files: []
|
|
23
|
+
|
|
24
|
+
files:
|
|
25
|
+
- CHANGES.markdown
|
|
26
|
+
- VERSION.yml
|
|
27
|
+
- README.markdown
|
|
28
|
+
- TODO.markdown
|
|
29
|
+
- lib/workling.rb
|
|
30
|
+
- lib/rude_q
|
|
31
|
+
- lib/rude_q/client.rb
|
|
32
|
+
- lib/tasks
|
|
33
|
+
- lib/workling
|
|
34
|
+
- lib/workling/remote.rb
|
|
35
|
+
- lib/workling/rudeq.rb
|
|
36
|
+
- lib/workling/remote
|
|
37
|
+
- lib/workling/remote/runners
|
|
38
|
+
- lib/workling/remote/runners/rudeq_runner.rb
|
|
39
|
+
- lib/workling/remote/runners/not_remote_runner.rb
|
|
40
|
+
- lib/workling/remote/runners/backgroundjob_runner.rb
|
|
41
|
+
- lib/workling/remote/runners/base.rb
|
|
42
|
+
- lib/workling/remote/runners/starling_runner.rb
|
|
43
|
+
- lib/workling/remote/runners/client_runner.rb
|
|
44
|
+
- lib/workling/remote/runners/spawn_runner.rb
|
|
45
|
+
- lib/workling/remote/invokers
|
|
46
|
+
- lib/workling/remote/invokers/base.rb
|
|
47
|
+
- lib/workling/remote/invokers/basic_poller.rb
|
|
48
|
+
- lib/workling/remote/invokers/eventmachine_subscriber.rb
|
|
49
|
+
- lib/workling/remote/invokers/threaded_poller.rb
|
|
50
|
+
- lib/workling/rudeq
|
|
51
|
+
- lib/workling/rudeq/client.rb
|
|
52
|
+
- lib/workling/rudeq/poller.rb
|
|
53
|
+
- lib/workling/routing
|
|
54
|
+
- lib/workling/routing/base.rb
|
|
55
|
+
- lib/workling/routing/class_and_method_routing.rb
|
|
56
|
+
- lib/workling/base.rb
|
|
57
|
+
- lib/workling/discovery.rb
|
|
58
|
+
- lib/workling/clients
|
|
59
|
+
- lib/workling/clients/memcache_queue_client.rb
|
|
60
|
+
- lib/workling/clients/base.rb
|
|
61
|
+
- lib/workling/clients/amqp_client.rb
|
|
62
|
+
- lib/workling/return
|
|
63
|
+
- lib/workling/return/store
|
|
64
|
+
- lib/workling/return/store/iterator.rb
|
|
65
|
+
- lib/workling/return/store/starling_return_store.rb
|
|
66
|
+
- lib/workling/return/store/base.rb
|
|
67
|
+
- lib/workling/return/store/memory_return_store.rb
|
|
68
|
+
- lib/workling/return/store/rudeq_return_store.rb
|
|
69
|
+
- test/invoker_eventmachine_subscription_test.rb
|
|
70
|
+
- test/discovery_test.rb
|
|
71
|
+
- test/spawn_runner_test.rb
|
|
72
|
+
- test/starling_runner_test.rb
|
|
73
|
+
- test/not_remote_runner_test.rb
|
|
74
|
+
- test/starling_return_store_test.rb
|
|
75
|
+
- test/rudeq_client_test.rb
|
|
76
|
+
- test/mocks
|
|
77
|
+
- test/mocks/logger.rb
|
|
78
|
+
- test/mocks/spawn.rb
|
|
79
|
+
- test/mocks/client.rb
|
|
80
|
+
- test/mocks/rude_queue.rb
|
|
81
|
+
- test/runners
|
|
82
|
+
- test/runners/thread_runner.rb
|
|
83
|
+
- test/clients
|
|
84
|
+
- test/clients/memory_queue_client.rb
|
|
85
|
+
- test/invoker_basic_poller_test.rb
|
|
86
|
+
- test/rudeq_poller_test.rb
|
|
87
|
+
- test/remote_runner_test.rb
|
|
88
|
+
- test/test_helper.rb
|
|
89
|
+
- test/workers
|
|
90
|
+
- test/workers/analytics
|
|
91
|
+
- test/workers/analytics/invites.rb
|
|
92
|
+
- test/workers/util.rb
|
|
93
|
+
- test/memcachequeue_client_test.rb
|
|
94
|
+
- test/rescue_test.rb
|
|
95
|
+
- test/class_and_method_routing_test.rb
|
|
96
|
+
- test/rudeq_return_store_test.rb
|
|
97
|
+
- test/invoker_threaded_poller_test.rb
|
|
98
|
+
- test/return_store_test.rb
|
|
99
|
+
- test/memory_return_store_test.rb
|
|
100
|
+
- test/rudeq_runner_test.rb
|
|
101
|
+
has_rdoc: true
|
|
102
|
+
homepage: http://github.com/elecnix/workling
|
|
103
|
+
post_install_message:
|
|
104
|
+
rdoc_options:
|
|
105
|
+
- --inline-source
|
|
106
|
+
- --charset=UTF-8
|
|
107
|
+
require_paths:
|
|
108
|
+
- lib
|
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
|
+
requirements:
|
|
111
|
+
- - ">="
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
version: "0"
|
|
114
|
+
version:
|
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
|
+
requirements:
|
|
117
|
+
- - ">="
|
|
118
|
+
- !ruby/object:Gem::Version
|
|
119
|
+
version: "0"
|
|
120
|
+
version:
|
|
121
|
+
requirements: []
|
|
122
|
+
|
|
123
|
+
rubyforge_project:
|
|
124
|
+
rubygems_version: 1.2.0
|
|
125
|
+
signing_key:
|
|
126
|
+
specification_version: 2
|
|
127
|
+
summary: easily do background work in rails, without commiting to a particular runner. comes with starling, bj and spawn runners.
|
|
128
|
+
test_files: []
|
|
129
|
+
|