chore-core 1.5.2

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