did_workling 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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