did_workling 0.0.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 (46) hide show
  1. data/README.markdown +382 -0
  2. data/lib/rude_q/client.rb +11 -0
  3. data/lib/workling.rb +150 -0
  4. data/lib/workling/base.rb +59 -0
  5. data/lib/workling/clients/amqp_client.rb +40 -0
  6. data/lib/workling/clients/base.rb +54 -0
  7. data/lib/workling/clients/memcache_queue_client.rb +82 -0
  8. data/lib/workling/discovery.rb +14 -0
  9. data/lib/workling/remote.rb +42 -0
  10. data/lib/workling/remote/invokers/base.rb +124 -0
  11. data/lib/workling/remote/invokers/basic_poller.rb +41 -0
  12. data/lib/workling/remote/invokers/eventmachine_subscriber.rb +37 -0
  13. data/lib/workling/remote/invokers/threaded_poller.rb +149 -0
  14. data/lib/workling/remote/runners/backgroundjob_runner.rb +35 -0
  15. data/lib/workling/remote/runners/base.rb +42 -0
  16. data/lib/workling/remote/runners/client_runner.rb +45 -0
  17. data/lib/workling/remote/runners/not_remote_runner.rb +23 -0
  18. data/lib/workling/remote/runners/spawn_runner.rb +38 -0
  19. data/lib/workling/remote/runners/starling_runner.rb +13 -0
  20. data/lib/workling/return/store/base.rb +37 -0
  21. data/lib/workling/return/store/memory_return_store.rb +26 -0
  22. data/lib/workling/return/store/starling_return_store.rb +31 -0
  23. data/lib/workling/routing/base.rb +13 -0
  24. data/lib/workling/routing/class_and_method_routing.rb +55 -0
  25. data/test/class_and_method_routing_test.rb +18 -0
  26. data/test/clients/memory_queue_client.rb +36 -0
  27. data/test/discovery_test.rb +13 -0
  28. data/test/invoker_basic_poller_test.rb +29 -0
  29. data/test/invoker_eventmachine_subscription_test.rb +26 -0
  30. data/test/invoker_threaded_poller_test.rb +34 -0
  31. data/test/memcachequeue_client_test.rb +36 -0
  32. data/test/memory_return_store_test.rb +23 -0
  33. data/test/mocks/client.rb +9 -0
  34. data/test/mocks/logger.rb +5 -0
  35. data/test/mocks/spawn.rb +5 -0
  36. data/test/not_remote_runner_test.rb +11 -0
  37. data/test/remote_runner_test.rb +50 -0
  38. data/test/return_store_test.rb +18 -0
  39. data/test/runners/thread_runner.rb +22 -0
  40. data/test/spawn_runner_test.rb +10 -0
  41. data/test/starling_return_store_test.rb +29 -0
  42. data/test/starling_runner_test.rb +8 -0
  43. data/test/test_helper.rb +48 -0
  44. data/test/workers/analytics/invites.rb +10 -0
  45. data/test/workers/util.rb +15 -0
  46. metadata +132 -0
@@ -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,48 @@
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 "workling"
21
+ require "workling/base"
22
+
23
+ Workling.try_load_a_memcache_client
24
+
25
+ require "workling/discovery"
26
+ require "workling/routing/class_and_method_routing"
27
+ require "workling/remote/invokers/basic_poller"
28
+ require "workling/remote/invokers/threaded_poller"
29
+ require "workling/remote/invokers/eventmachine_subscriber"
30
+ require "workling/remote"
31
+ require "workling/remote/runners/not_remote_runner"
32
+ require "workling/remote/runners/spawn_runner"
33
+ require "workling/remote/runners/starling_runner"
34
+ require "workling/remote/runners/client_runner"
35
+ require "workling/remote/runners/backgroundjob_runner"
36
+ require "workling/return/store/memory_return_store"
37
+ require "workling/return/store/starling_return_store"
38
+ require "mocks/client"
39
+ require "clients/memory_queue_client"
40
+ require "runners/thread_runner"
41
+
42
+ # worklings are in here.
43
+ Workling.load_path = ["#{ plugin_root }/test/workers"]
44
+ Workling::Return::Store.instance = Workling::Return::Store::MemoryReturnStore.new
45
+ Workling::Discovery.discover!
46
+
47
+ # make this behave like production code
48
+ Workling.raise_exceptions = false
@@ -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,15 @@
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
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: did_workling
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Rany Keddo
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-02-14 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Workling gives your Rails App a simple API that you can use to make code run in the background, outside of the your request.
23
+ email:
24
+ - didier@nocoffee.fr
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files:
30
+ - README.markdown
31
+ files:
32
+ - lib/rude_q/client.rb
33
+ - lib/workling.rb
34
+ - lib/workling/base.rb
35
+ - lib/workling/clients/amqp_client.rb
36
+ - lib/workling/clients/base.rb
37
+ - lib/workling/clients/memcache_queue_client.rb
38
+ - lib/workling/discovery.rb
39
+ - lib/workling/remote.rb
40
+ - lib/workling/remote/invokers/base.rb
41
+ - lib/workling/remote/invokers/basic_poller.rb
42
+ - lib/workling/remote/invokers/eventmachine_subscriber.rb
43
+ - lib/workling/remote/invokers/threaded_poller.rb
44
+ - lib/workling/remote/runners/backgroundjob_runner.rb
45
+ - lib/workling/remote/runners/base.rb
46
+ - lib/workling/remote/runners/client_runner.rb
47
+ - lib/workling/remote/runners/not_remote_runner.rb
48
+ - lib/workling/remote/runners/spawn_runner.rb
49
+ - lib/workling/remote/runners/starling_runner.rb
50
+ - lib/workling/return/store/base.rb
51
+ - lib/workling/return/store/memory_return_store.rb
52
+ - lib/workling/return/store/starling_return_store.rb
53
+ - lib/workling/routing/base.rb
54
+ - lib/workling/routing/class_and_method_routing.rb
55
+ - README.markdown
56
+ - test/class_and_method_routing_test.rb
57
+ - test/clients/memory_queue_client.rb
58
+ - test/discovery_test.rb
59
+ - test/invoker_basic_poller_test.rb
60
+ - test/invoker_eventmachine_subscription_test.rb
61
+ - test/invoker_threaded_poller_test.rb
62
+ - test/memcachequeue_client_test.rb
63
+ - test/memory_return_store_test.rb
64
+ - test/mocks/client.rb
65
+ - test/mocks/logger.rb
66
+ - test/mocks/spawn.rb
67
+ - test/not_remote_runner_test.rb
68
+ - test/remote_runner_test.rb
69
+ - test/return_store_test.rb
70
+ - test/runners/thread_runner.rb
71
+ - test/spawn_runner_test.rb
72
+ - test/starling_return_store_test.rb
73
+ - test/starling_runner_test.rb
74
+ - test/test_helper.rb
75
+ - test/workers/analytics/invites.rb
76
+ - test/workers/util.rb
77
+ has_rdoc: true
78
+ homepage: https://github.com/purzelrakete/workling
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options:
83
+ - --charset=UTF-8
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 3
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ requirements: []
105
+
106
+ rubyforge_project:
107
+ rubygems_version: 1.4.2
108
+ signing_key:
109
+ specification_version: 3
110
+ summary: easily do background work in rails, without commiting to a particular runner. comes with starling, bj and spawn runners.
111
+ test_files:
112
+ - test/class_and_method_routing_test.rb
113
+ - test/clients/memory_queue_client.rb
114
+ - test/discovery_test.rb
115
+ - test/invoker_basic_poller_test.rb
116
+ - test/invoker_eventmachine_subscription_test.rb
117
+ - test/invoker_threaded_poller_test.rb
118
+ - test/memcachequeue_client_test.rb
119
+ - test/memory_return_store_test.rb
120
+ - test/mocks/client.rb
121
+ - test/mocks/logger.rb
122
+ - test/mocks/spawn.rb
123
+ - test/not_remote_runner_test.rb
124
+ - test/remote_runner_test.rb
125
+ - test/return_store_test.rb
126
+ - test/runners/thread_runner.rb
127
+ - test/spawn_runner_test.rb
128
+ - test/starling_return_store_test.rb
129
+ - test/starling_runner_test.rb
130
+ - test/test_helper.rb
131
+ - test/workers/analytics/invites.rb
132
+ - test/workers/util.rb