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.
Files changed (61) hide show
  1. data/CHANGES.markdown +72 -0
  2. data/README.markdown +386 -0
  3. data/TODO.markdown +27 -0
  4. data/VERSION.yml +4 -0
  5. data/lib/rude_q/client.rb +11 -0
  6. data/lib/workling/base.rb +71 -0
  7. data/lib/workling/clients/amqp_client.rb +56 -0
  8. data/lib/workling/clients/base.rb +57 -0
  9. data/lib/workling/clients/memcache_queue_client.rb +83 -0
  10. data/lib/workling/discovery.rb +14 -0
  11. data/lib/workling/remote/invokers/base.rb +124 -0
  12. data/lib/workling/remote/invokers/basic_poller.rb +41 -0
  13. data/lib/workling/remote/invokers/eventmachine_subscriber.rb +41 -0
  14. data/lib/workling/remote/invokers/threaded_poller.rb +140 -0
  15. data/lib/workling/remote/runners/backgroundjob_runner.rb +35 -0
  16. data/lib/workling/remote/runners/base.rb +42 -0
  17. data/lib/workling/remote/runners/client_runner.rb +45 -0
  18. data/lib/workling/remote/runners/not_remote_runner.rb +23 -0
  19. data/lib/workling/remote/runners/rudeq_runner.rb +23 -0
  20. data/lib/workling/remote/runners/spawn_runner.rb +38 -0
  21. data/lib/workling/remote/runners/starling_runner.rb +13 -0
  22. data/lib/workling/remote.rb +42 -0
  23. data/lib/workling/return/store/base.rb +42 -0
  24. data/lib/workling/return/store/iterator.rb +24 -0
  25. data/lib/workling/return/store/memory_return_store.rb +26 -0
  26. data/lib/workling/return/store/rudeq_return_store.rb +24 -0
  27. data/lib/workling/return/store/starling_return_store.rb +31 -0
  28. data/lib/workling/routing/base.rb +13 -0
  29. data/lib/workling/routing/class_and_method_routing.rb +55 -0
  30. data/lib/workling/rudeq/client.rb +17 -0
  31. data/lib/workling/rudeq/poller.rb +116 -0
  32. data/lib/workling/rudeq.rb +7 -0
  33. data/lib/workling.rb +150 -0
  34. data/test/class_and_method_routing_test.rb +18 -0
  35. data/test/clients/memory_queue_client.rb +36 -0
  36. data/test/discovery_test.rb +13 -0
  37. data/test/invoker_basic_poller_test.rb +29 -0
  38. data/test/invoker_eventmachine_subscription_test.rb +26 -0
  39. data/test/invoker_threaded_poller_test.rb +34 -0
  40. data/test/memcachequeue_client_test.rb +36 -0
  41. data/test/memory_return_store_test.rb +32 -0
  42. data/test/mocks/client.rb +9 -0
  43. data/test/mocks/logger.rb +5 -0
  44. data/test/mocks/rude_queue.rb +9 -0
  45. data/test/mocks/spawn.rb +5 -0
  46. data/test/not_remote_runner_test.rb +11 -0
  47. data/test/remote_runner_test.rb +58 -0
  48. data/test/rescue_test.rb +24 -0
  49. data/test/return_store_test.rb +24 -0
  50. data/test/rudeq_client_test.rb +30 -0
  51. data/test/rudeq_poller_test.rb +14 -0
  52. data/test/rudeq_return_store_test.rb +20 -0
  53. data/test/rudeq_runner_test.rb +22 -0
  54. data/test/runners/thread_runner.rb +22 -0
  55. data/test/spawn_runner_test.rb +10 -0
  56. data/test/starling_return_store_test.rb +29 -0
  57. data/test/starling_runner_test.rb +8 -0
  58. data/test/test_helper.rb +50 -0
  59. data/test/workers/analytics/invites.rb +10 -0
  60. data/test/workers/util.rb +25 -0
  61. 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
@@ -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,10 @@
1
+ require 'workling/base'
2
+
3
+ module Analytics
4
+ class Invites < ::Workling::Base
5
+
6
+ def sent(*args)
7
+ logger.info("nice")
8
+ end
9
+ end
10
+ end
@@ -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
+