chore-core 1.5.2

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 (59) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +260 -0
  4. data/Rakefile +32 -0
  5. data/bin/chore +34 -0
  6. data/chore-core.gemspec +46 -0
  7. data/lib/chore/cli.rb +232 -0
  8. data/lib/chore/configuration.rb +13 -0
  9. data/lib/chore/consumer.rb +52 -0
  10. data/lib/chore/duplicate_detector.rb +56 -0
  11. data/lib/chore/fetcher.rb +31 -0
  12. data/lib/chore/hooks.rb +25 -0
  13. data/lib/chore/job.rb +103 -0
  14. data/lib/chore/json_encoder.rb +18 -0
  15. data/lib/chore/manager.rb +47 -0
  16. data/lib/chore/publisher.rb +29 -0
  17. data/lib/chore/queues/filesystem/consumer.rb +128 -0
  18. data/lib/chore/queues/filesystem/filesystem_queue.rb +49 -0
  19. data/lib/chore/queues/filesystem/publisher.rb +45 -0
  20. data/lib/chore/queues/sqs/consumer.rb +121 -0
  21. data/lib/chore/queues/sqs/publisher.rb +55 -0
  22. data/lib/chore/queues/sqs.rb +38 -0
  23. data/lib/chore/railtie.rb +18 -0
  24. data/lib/chore/signal.rb +175 -0
  25. data/lib/chore/strategies/consumer/batcher.rb +76 -0
  26. data/lib/chore/strategies/consumer/single_consumer_strategy.rb +34 -0
  27. data/lib/chore/strategies/consumer/threaded_consumer_strategy.rb +81 -0
  28. data/lib/chore/strategies/worker/forked_worker_strategy.rb +221 -0
  29. data/lib/chore/strategies/worker/single_worker_strategy.rb +39 -0
  30. data/lib/chore/tasks/queues.task +11 -0
  31. data/lib/chore/unit_of_work.rb +17 -0
  32. data/lib/chore/util.rb +18 -0
  33. data/lib/chore/version.rb +9 -0
  34. data/lib/chore/worker.rb +117 -0
  35. data/lib/chore-core.rb +1 -0
  36. data/lib/chore.rb +218 -0
  37. data/spec/chore/cli_spec.rb +182 -0
  38. data/spec/chore/consumer_spec.rb +36 -0
  39. data/spec/chore/duplicate_detector_spec.rb +62 -0
  40. data/spec/chore/fetcher_spec.rb +38 -0
  41. data/spec/chore/hooks_spec.rb +44 -0
  42. data/spec/chore/job_spec.rb +80 -0
  43. data/spec/chore/json_encoder_spec.rb +11 -0
  44. data/spec/chore/manager_spec.rb +39 -0
  45. data/spec/chore/queues/filesystem/filesystem_consumer_spec.rb +71 -0
  46. data/spec/chore/queues/sqs/consumer_spec.rb +136 -0
  47. data/spec/chore/queues/sqs/publisher_spec.rb +74 -0
  48. data/spec/chore/queues/sqs_spec.rb +37 -0
  49. data/spec/chore/signal_spec.rb +244 -0
  50. data/spec/chore/strategies/consumer/batcher_spec.rb +93 -0
  51. data/spec/chore/strategies/consumer/single_consumer_strategy_spec.rb +23 -0
  52. data/spec/chore/strategies/consumer/threaded_consumer_strategy_spec.rb +105 -0
  53. data/spec/chore/strategies/worker/forked_worker_strategy_spec.rb +281 -0
  54. data/spec/chore/strategies/worker/single_worker_strategy_spec.rb +36 -0
  55. data/spec/chore/worker_spec.rb +134 -0
  56. data/spec/chore_spec.rb +108 -0
  57. data/spec/spec_helper.rb +58 -0
  58. data/spec/test_job.rb +7 -0
  59. metadata +194 -0
@@ -0,0 +1,58 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'timecop'
5
+ require 'chore'
6
+ require 'test_job'
7
+
8
+ # Requires supporting files with custom matchers and macros, etc,
9
+ # in ./support/ and its subdirectories.
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
11
+
12
+ class FakePublisher < Chore::Publisher
13
+ def publish(job)
14
+ self.class.queue.push(encode_job(job))
15
+ end
16
+
17
+ ## Test methods
18
+ class << self
19
+ def queue
20
+ @@queue ||= []
21
+ end
22
+
23
+ def reset!
24
+ @@queue = nil
25
+ end
26
+ end
27
+ end
28
+
29
+ TestMessage = Struct.new(:handle,:queue_name,:body,:receive_count) do
30
+ def empty?
31
+ false
32
+ end
33
+
34
+ # Structs define a to_a behavior that is not compatible with array splatting. Remove it so that
35
+ # [*message] on a struct will behave the same as on a string.
36
+ undef_method :to_a
37
+ end
38
+
39
+
40
+ RSpec.configure do |config|
41
+ config.before do
42
+ Chore.configure do |c|
43
+ c.aws_access_key = ""
44
+ c.aws_secret_key = ""
45
+ end
46
+ Chore.logger = double('logger').as_null_object
47
+
48
+ # Reset CLI singleton
49
+ Singleton.send(:__init__, Chore::CLI)
50
+
51
+ # Reset configuration
52
+ Chore.instance_eval { @config = nil }
53
+ end
54
+
55
+ config.after(:each) do
56
+ FakePublisher.reset!
57
+ end
58
+ end
data/spec/test_job.rb ADDED
@@ -0,0 +1,7 @@
1
+ class TestJob
2
+ include Chore::Job
3
+ queue_options :name => 'test', :publisher => Chore::Publisher
4
+
5
+ def perform(*args)
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chore-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.5.2
5
+ platform: ruby
6
+ authors:
7
+ - Tapjoy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.12'
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: 1.12.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '1.12'
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.12.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: thread
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.1.3
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: 0.1.3
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 2.12.0
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ version: 2.12.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: rdoc
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ~>
80
+ - !ruby/object:Gem::Version
81
+ version: '3.12'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: '3.12'
89
+ - !ruby/object:Gem::Dependency
90
+ name: bundler
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ description: Job processing with pluggable backends and strategies
104
+ email: eng-group-arch@tapjoy.com
105
+ executables:
106
+ - chore
107
+ extensions: []
108
+ extra_rdoc_files:
109
+ - LICENSE.txt
110
+ - README.md
111
+ files:
112
+ - LICENSE.txt
113
+ - README.md
114
+ - Rakefile
115
+ - bin/chore
116
+ - chore-core.gemspec
117
+ - lib/chore-core.rb
118
+ - lib/chore.rb
119
+ - lib/chore/cli.rb
120
+ - lib/chore/configuration.rb
121
+ - lib/chore/consumer.rb
122
+ - lib/chore/duplicate_detector.rb
123
+ - lib/chore/fetcher.rb
124
+ - lib/chore/hooks.rb
125
+ - lib/chore/job.rb
126
+ - lib/chore/json_encoder.rb
127
+ - lib/chore/manager.rb
128
+ - lib/chore/publisher.rb
129
+ - lib/chore/queues/filesystem/consumer.rb
130
+ - lib/chore/queues/filesystem/filesystem_queue.rb
131
+ - lib/chore/queues/filesystem/publisher.rb
132
+ - lib/chore/queues/sqs.rb
133
+ - lib/chore/queues/sqs/consumer.rb
134
+ - lib/chore/queues/sqs/publisher.rb
135
+ - lib/chore/railtie.rb
136
+ - lib/chore/signal.rb
137
+ - lib/chore/strategies/consumer/batcher.rb
138
+ - lib/chore/strategies/consumer/single_consumer_strategy.rb
139
+ - lib/chore/strategies/consumer/threaded_consumer_strategy.rb
140
+ - lib/chore/strategies/worker/forked_worker_strategy.rb
141
+ - lib/chore/strategies/worker/single_worker_strategy.rb
142
+ - lib/chore/tasks/queues.task
143
+ - lib/chore/unit_of_work.rb
144
+ - lib/chore/util.rb
145
+ - lib/chore/version.rb
146
+ - lib/chore/worker.rb
147
+ - spec/chore/cli_spec.rb
148
+ - spec/chore/consumer_spec.rb
149
+ - spec/chore/duplicate_detector_spec.rb
150
+ - spec/chore/fetcher_spec.rb
151
+ - spec/chore/hooks_spec.rb
152
+ - spec/chore/job_spec.rb
153
+ - spec/chore/json_encoder_spec.rb
154
+ - spec/chore/manager_spec.rb
155
+ - spec/chore/queues/filesystem/filesystem_consumer_spec.rb
156
+ - spec/chore/queues/sqs/consumer_spec.rb
157
+ - spec/chore/queues/sqs/publisher_spec.rb
158
+ - spec/chore/queues/sqs_spec.rb
159
+ - spec/chore/signal_spec.rb
160
+ - spec/chore/strategies/consumer/batcher_spec.rb
161
+ - spec/chore/strategies/consumer/single_consumer_strategy_spec.rb
162
+ - spec/chore/strategies/consumer/threaded_consumer_strategy_spec.rb
163
+ - spec/chore/strategies/worker/forked_worker_strategy_spec.rb
164
+ - spec/chore/strategies/worker/single_worker_strategy_spec.rb
165
+ - spec/chore/worker_spec.rb
166
+ - spec/chore_spec.rb
167
+ - spec/spec_helper.rb
168
+ - spec/test_job.rb
169
+ homepage: http://github.com/Tapjoy/chore
170
+ licenses:
171
+ - MIT
172
+ metadata: {}
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ requirements: []
188
+ rubyforge_project:
189
+ rubygems_version: 2.2.2
190
+ signing_key:
191
+ specification_version: 4
192
+ summary: Job processing... for the future!
193
+ test_files: []
194
+ has_rdoc: