active_worker 0.50.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.
Files changed (55) hide show
  1. data/.document +5 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +22 -0
  4. data/Gemfile.lock +77 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +46 -0
  8. data/VERSION +1 -0
  9. data/active_worker.gemspec +108 -0
  10. data/lib/active_worker.rb +29 -0
  11. data/lib/active_worker/behavior/acts_as_root_object.rb +80 -0
  12. data/lib/active_worker/behavior/can_be_notified.rb +23 -0
  13. data/lib/active_worker/behavior/create_from_error.rb +21 -0
  14. data/lib/active_worker/behavior/execute_concurrently.rb +142 -0
  15. data/lib/active_worker/behavior/has_modes.rb +44 -0
  16. data/lib/active_worker/behavior/has_root_object.rb +50 -0
  17. data/lib/active_worker/behavior/hashable.rb +79 -0
  18. data/lib/active_worker/configuration.rb +143 -0
  19. data/lib/active_worker/controller.rb +112 -0
  20. data/lib/active_worker/event.rb +68 -0
  21. data/lib/active_worker/expandable.rb +77 -0
  22. data/lib/active_worker/failure_event.rb +16 -0
  23. data/lib/active_worker/finished_event.rb +9 -0
  24. data/lib/active_worker/host_information.rb +13 -0
  25. data/lib/active_worker/job_queue/job_executer.rb +52 -0
  26. data/lib/active_worker/job_queue/queue_manager.rb +46 -0
  27. data/lib/active_worker/job_queue/run_remotely.rb +52 -0
  28. data/lib/active_worker/modes_map.rb +37 -0
  29. data/lib/active_worker/notification_event.rb +9 -0
  30. data/lib/active_worker/parent_event.rb +5 -0
  31. data/lib/active_worker/started_event.rb +10 -0
  32. data/lib/active_worker/templatable.rb +46 -0
  33. data/lib/active_worker/template.rb +41 -0
  34. data/lib/active_worker/termination_event.rb +21 -0
  35. data/test/mongoid.yml +28 -0
  36. data/test/test_acts_as_root_object.rb +123 -0
  37. data/test/test_can_be_notified.rb +44 -0
  38. data/test/test_configuration.rb +281 -0
  39. data/test/test_controller.rb +205 -0
  40. data/test/test_event.rb +75 -0
  41. data/test/test_execute_concurrently.rb +134 -0
  42. data/test/test_expandable.rb +113 -0
  43. data/test/test_failure_event.rb +69 -0
  44. data/test/test_finished_event.rb +35 -0
  45. data/test/test_has_modes.rb +56 -0
  46. data/test/test_helper.rb +120 -0
  47. data/test/test_integration.rb +56 -0
  48. data/test/test_job_executer.rb +65 -0
  49. data/test/test_queue_manager.rb +106 -0
  50. data/test/test_run_remotely.rb +63 -0
  51. data/test/test_started_event.rb +23 -0
  52. data/test/test_templatable.rb +45 -0
  53. data/test/test_template.rb +29 -0
  54. data/test/test_termination_event.rb +28 -0
  55. metadata +201 -0
@@ -0,0 +1,63 @@
1
+ require_relative "test_helper"
2
+ module ActiveWorker
3
+ module JobQueue
4
+ class RunRemotelyTest < ActiveSupport::TestCase
5
+
6
+ class TestClass
7
+ extend RunRemotely
8
+
9
+ def self.test_method(param1, param2)
10
+ end
11
+
12
+ end
13
+
14
+ setup do
15
+ RunRemotely.worker_mode = RunRemotely::RESQUE
16
+ end
17
+
18
+ test "correctly enqueues jobs with no host" do
19
+ param1 = 1
20
+ param2 = 2
21
+
22
+ class_name = TestClass.to_s
23
+ method = "test_method"
24
+ params = [param1,param2]
25
+
26
+ args = {}
27
+ args["class_name"] = class_name
28
+ args["method"] = method
29
+ args["params"] = params
30
+
31
+ Resque.expects(:enqueue).with(JobExecuter,args)
32
+
33
+ TestClass.run_remotely.test_method(param1,param2)
34
+ end
35
+
36
+
37
+
38
+ test "can set worker mode to threaded" do
39
+ param1 = 1
40
+ param2 = 2
41
+
42
+ class_name = TestClass.to_s
43
+ method = "test_method"
44
+ params = [param1,param2]
45
+
46
+ args = {}
47
+ args["class_name"] = class_name
48
+ args["method"] = method
49
+ args["params"] = params
50
+
51
+ RunRemotely.worker_mode = RunRemotely::THREADED
52
+
53
+ TestClass.expects(:test_method)
54
+
55
+ thread = TestClass.run_remotely.test_method(param1,param2)
56
+ thread.join
57
+ end
58
+
59
+
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,23 @@
1
+ require_relative "test_helper"
2
+
3
+ module ActiveWorker
4
+ class StartedEventTest < ActiveSupport::TestCase
5
+
6
+ test "can create started event on a configuration" do
7
+ configuration = Configuration.create
8
+
9
+ event = StartedEvent.create(configuration: configuration)
10
+ found_events = StartedEvent.where(configuration_id: configuration.id)
11
+
12
+ assert_equal 1, found_events.size
13
+ assert_equal event, found_events.first
14
+ end
15
+
16
+ test "started message" do
17
+ configuration = Configuration.create
18
+ event = StartedEvent.create(configuration: configuration)
19
+ assert_match /started/, event.message
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,45 @@
1
+ require_relative "test_helper"
2
+
3
+ module ActiveWorker
4
+ class TemplatableTest < ActiveSupport::TestCase
5
+
6
+ test "can get input string with empty template_name" do
7
+ config = TemplatableTopConfig.create template_name: ""
8
+ string = "New Name"
9
+
10
+ assert_not_nil config.template_name
11
+ assert_equal "", config.template_name
12
+ assert_equal string, config.template_name_or(string)
13
+ end
14
+
15
+ test "can get template_name" do
16
+ config = TemplatableTopConfig.create template_name: "Template Name"
17
+ string = "New Name"
18
+
19
+ assert_equal "Template Name", config.template_name_or(string)
20
+ end
21
+
22
+ test "can have duplicate child template" do
23
+ top_config = TemplatableTopConfig.create template_name: "top", top_field: "top_field"
24
+ child_config1 = TemplatableChildConfig.create child_field: "same", parent_configuration: top_config
25
+ child_config2 = TemplatableChildConfig.create child_field: "same", parent_configuration: top_config
26
+
27
+ assert_equal 2, top_config.configurations.count
28
+
29
+ template = top_config.find_template
30
+
31
+ assert_equal "top_field", template.top_field
32
+
33
+ assert_equal 2, template.child_template_ids.size
34
+ assert_equal 2, template.child_template_ids.count
35
+
36
+ assert_equal 1, template.child_templates.size
37
+
38
+
39
+ # Makes new Configurations, does not put them in the database
40
+ new_config = template.build_configuration
41
+ assert_equal 2, new_config.configurations.size
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ require_relative "test_helper"
2
+
3
+ module ActiveWorker
4
+ class TestTemplate < ActiveSupport::TestCase
5
+
6
+ test "can find all with name" do
7
+ Template.create(configuration_type: Configuration.name)
8
+ Template.create name: "template", configuration_type: Configuration.name
9
+
10
+ assert_equal 1, ActiveWorker::Template.with_names(Configuration).count
11
+ end
12
+
13
+ test "can create nested templates" do
14
+ top_temp = Template.create(configuration_type: Configuration.name)
15
+
16
+ child_template = Template.create(configuration_type: Configuration.name, foo: "Bar")
17
+
18
+
19
+ top_temp.child_templates << child_template
20
+ top_temp.child_templates << child_template
21
+
22
+ assert_equal 1, top_temp.child_templates.count, "Mongoid No Longer De-Dupes Relationships"
23
+ assert_equal 1, top_temp.child_template_ids.count
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,28 @@
1
+ require_relative "test_helper"
2
+
3
+ module ActiveWorker
4
+ class TerminationEventTest < ActiveSupport::TestCase
5
+
6
+ test "expands for threads" do
7
+ config = ExpandableConfig.create number_of_threads: 2
8
+
9
+ config.expand_for_threads
10
+
11
+ events = TerminationEvent.from_termination(config)
12
+
13
+ assert_equal 2, events.size
14
+ end
15
+
16
+ test "expands for threads unless completed" do
17
+ config = ExpandableConfig.create number_of_threads: 2
18
+
19
+ config.expand_for_threads
20
+
21
+ config.finished
22
+
23
+ events = TerminationEvent.from_termination(config)
24
+
25
+ assert_equal 1, events.size
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_worker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.50.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - perf
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mongoid
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bson_ext
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: resque
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '3.12'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '3.12'
78
+ - !ruby/object:Gem::Dependency
79
+ name: bundler
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: jeweler
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.8.3
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.8.3
110
+ description: Uses a Configuration/Controller pattern to allow easy implementation
111
+ and organziation of multi-tier distributed workloads.
112
+ email: perf@skarven.net
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files:
116
+ - LICENSE.txt
117
+ - README.rdoc
118
+ files:
119
+ - .document
120
+ - .rvmrc
121
+ - Gemfile
122
+ - Gemfile.lock
123
+ - LICENSE.txt
124
+ - README.rdoc
125
+ - Rakefile
126
+ - VERSION
127
+ - active_worker.gemspec
128
+ - lib/active_worker.rb
129
+ - lib/active_worker/behavior/acts_as_root_object.rb
130
+ - lib/active_worker/behavior/can_be_notified.rb
131
+ - lib/active_worker/behavior/create_from_error.rb
132
+ - lib/active_worker/behavior/execute_concurrently.rb
133
+ - lib/active_worker/behavior/has_modes.rb
134
+ - lib/active_worker/behavior/has_root_object.rb
135
+ - lib/active_worker/behavior/hashable.rb
136
+ - lib/active_worker/configuration.rb
137
+ - lib/active_worker/controller.rb
138
+ - lib/active_worker/event.rb
139
+ - lib/active_worker/expandable.rb
140
+ - lib/active_worker/failure_event.rb
141
+ - lib/active_worker/finished_event.rb
142
+ - lib/active_worker/host_information.rb
143
+ - lib/active_worker/job_queue/job_executer.rb
144
+ - lib/active_worker/job_queue/queue_manager.rb
145
+ - lib/active_worker/job_queue/run_remotely.rb
146
+ - lib/active_worker/modes_map.rb
147
+ - lib/active_worker/notification_event.rb
148
+ - lib/active_worker/parent_event.rb
149
+ - lib/active_worker/started_event.rb
150
+ - lib/active_worker/templatable.rb
151
+ - lib/active_worker/template.rb
152
+ - lib/active_worker/termination_event.rb
153
+ - test/mongoid.yml
154
+ - test/test_acts_as_root_object.rb
155
+ - test/test_can_be_notified.rb
156
+ - test/test_configuration.rb
157
+ - test/test_controller.rb
158
+ - test/test_event.rb
159
+ - test/test_execute_concurrently.rb
160
+ - test/test_expandable.rb
161
+ - test/test_failure_event.rb
162
+ - test/test_finished_event.rb
163
+ - test/test_has_modes.rb
164
+ - test/test_helper.rb
165
+ - test/test_integration.rb
166
+ - test/test_job_executer.rb
167
+ - test/test_queue_manager.rb
168
+ - test/test_run_remotely.rb
169
+ - test/test_started_event.rb
170
+ - test/test_templatable.rb
171
+ - test/test_template.rb
172
+ - test/test_termination_event.rb
173
+ homepage: http://github.com/ryanmcgarvey/active_worker
174
+ licenses:
175
+ - MIT
176
+ post_install_message:
177
+ rdoc_options: []
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ segments:
187
+ - 0
188
+ hash: 925198168714930655
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ none: false
191
+ requirements:
192
+ - - ! '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ requirements: []
196
+ rubyforge_project:
197
+ rubygems_version: 1.8.24
198
+ signing_key:
199
+ specification_version: 3
200
+ summary: Framework for making class distributable on a queueing system.
201
+ test_files: []