belated 0.3.0 → 0.4.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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/.rubocop.yml +3 -0
  4. data/CHANGELOG.md +17 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +17 -1
  7. data/README.md +21 -9
  8. data/belated.gemspec +1 -1
  9. data/lib/belated.rb +39 -14
  10. data/lib/belated/client.rb +15 -2
  11. data/lib/belated/job.rb +1 -0
  12. data/lib/belated/queue.rb +37 -0
  13. data/lib/belated/version.rb +1 -1
  14. data/lib/belated/worker.rb +8 -5
  15. metadata +4 -69
  16. data/dummy/Rakefile +0 -8
  17. data/dummy/app/assets/config/manifest.js +0 -3
  18. data/dummy/app/assets/images/.keep +0 -0
  19. data/dummy/app/assets/stylesheets/application.css +0 -15
  20. data/dummy/app/channels/application_cable/channel.rb +0 -6
  21. data/dummy/app/channels/application_cable/connection.rb +0 -6
  22. data/dummy/app/controllers/application_controller.rb +0 -5
  23. data/dummy/app/controllers/concerns/.keep +0 -0
  24. data/dummy/app/helpers/application_helper.rb +0 -4
  25. data/dummy/app/javascript/packs/application.js +0 -15
  26. data/dummy/app/jobs/application_job.rb +0 -9
  27. data/dummy/app/mailers/application_mailer.rb +0 -6
  28. data/dummy/app/models/application_record.rb +0 -5
  29. data/dummy/app/models/concerns/.keep +0 -0
  30. data/dummy/app/models/user.rb +0 -2
  31. data/dummy/app/views/application/index.html.erb +0 -4
  32. data/dummy/app/views/layouts/application.html.erb +0 -15
  33. data/dummy/app/views/layouts/mailer.html.erb +0 -13
  34. data/dummy/app/views/layouts/mailer.text.erb +0 -1
  35. data/dummy/bin/rails +0 -6
  36. data/dummy/bin/rake +0 -6
  37. data/dummy/bin/setup +0 -35
  38. data/dummy/config.ru +0 -8
  39. data/dummy/config/application.rb +0 -23
  40. data/dummy/config/boot.rb +0 -7
  41. data/dummy/config/cable.yml +0 -10
  42. data/dummy/config/credentials.yml.enc +0 -1
  43. data/dummy/config/database.yml +0 -25
  44. data/dummy/config/environment.rb +0 -7
  45. data/dummy/config/environments/development.rb +0 -78
  46. data/dummy/config/environments/production.rb +0 -122
  47. data/dummy/config/environments/test.rb +0 -51
  48. data/dummy/config/initializers/application_controller_renderer.rb +0 -9
  49. data/dummy/config/initializers/backtrace_silencers.rb +0 -10
  50. data/dummy/config/initializers/content_security_policy.rb +0 -29
  51. data/dummy/config/initializers/cookies_serializer.rb +0 -7
  52. data/dummy/config/initializers/filter_parameter_logging.rb +0 -8
  53. data/dummy/config/initializers/inflections.rb +0 -17
  54. data/dummy/config/initializers/mime_types.rb +0 -5
  55. data/dummy/config/initializers/permissions_policy.rb +0 -12
  56. data/dummy/config/initializers/wrap_parameters.rb +0 -16
  57. data/dummy/config/locales/en.yml +0 -33
  58. data/dummy/config/master.key +0 -1
  59. data/dummy/config/puma.rb +0 -45
  60. data/dummy/config/routes.rb +0 -5
  61. data/dummy/config/storage.yml +0 -34
  62. data/dummy/db/migrate/20210613015406_create_users.rb +0 -10
  63. data/dummy/db/production.sqlite3 +0 -0
  64. data/dummy/db/schema.rb +0 -20
  65. data/dummy/db/test.sqlite3 +0 -0
  66. data/dummy/lib/assets/.keep +0 -0
  67. data/dummy/log/.keep +0 -0
  68. data/dummy/log/development.log +0 -0
  69. data/dummy/log/production.log +0 -3
  70. data/dummy/log/test.log +0 -2110
  71. data/dummy/public/404.html +0 -67
  72. data/dummy/public/422.html +0 -67
  73. data/dummy/public/500.html +0 -66
  74. data/dummy/public/apple-touch-icon-precomposed.png +0 -0
  75. data/dummy/public/apple-touch-icon.png +0 -0
  76. data/dummy/public/favicon.ico +0 -0
  77. data/dummy/storage/.keep +0 -0
  78. data/dummy/tmp/.keep +0 -0
  79. data/dummy/tmp/development_secret.txt +0 -1
  80. data/dummy/tmp/pids/.keep +0 -0
  81. data/dummy/tmp/storage/.keep +0 -0
  82. data/hard_worker_dump +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0967c77874d3cfccf82411af59b4f1555c32edbbaf346dda078b710b4ed2232
4
- data.tar.gz: 6336d152b4beb80c037d28ac6335a6018270f65d563195d74022c167e0cbeac8
3
+ metadata.gz: 3264ca317aa687386cf4f87b45a358b25197e0a8442d79c28116abbdf373cd5c
4
+ data.tar.gz: fc520d4de51b80b7ec87622f7ef66fd17a60423800a72a402fde7f7361e52a2e
5
5
  SHA512:
6
- metadata.gz: 84b35ef9e1b317c9250960f90c377e5d8e45261cb8de8f71ed431418dd90ebdfd72625e9c85959b3b30db68131fd5f8ba0ebc10790a1651d334437f38610ef7e
7
- data.tar.gz: 29c835bf366eb3f9d6304e12a85cef12e3fa13574c0502ba71aee5322bc9e0426f6ae2b8179dd26f8e7d544a4649cb30c0840633a257e62e030aef50fe2bcbfc
6
+ metadata.gz: 5512108388bf979973d471f9107b8f11f1af79320029324053ca748eeac3940635efdbff744410305e185e781de6732fa003ca7251d5d26be1c706e59818f960
7
+ data.tar.gz: 25045c09fbd423b0169cc4eda7a01a4cbf1e93c6a3ee13d0b574f24fabfd3fae9a58768eb6bef962b8613536c3585fb542e02151950eda82d6867c34a0d6e85f
data/.gitignore CHANGED
@@ -11,4 +11,7 @@
11
11
  .rspec_status
12
12
  .byebug_history
13
13
  /dummy/tmp/cache/
14
- belated_dump
14
+ /dummy/log/
15
+ /dummy/log/test.log
16
+ belated_dump
17
+ stackprof*
data/.rubocop.yml CHANGED
@@ -41,5 +41,8 @@ Metrics/BlockLength:
41
41
  Metrics/ClassLength:
42
42
  Max: 200
43
43
 
44
+ Metrics/MethodLength:
45
+ Max: 15
46
+
44
47
  Security/YAMLLoad:
45
48
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.4.0] - 2021-08-03
4
+
5
+ - Now you can enqueue jobs to be done at a later time. Just pass an `at:` keyword param to the client.
6
+ - Does not save the jobs when you quit.
7
+
8
+ ## [0.3.3] - 2021-08-01
9
+
10
+ - Shutdown trapped signal thread, make sure :shutdown is not recorded as a job.
11
+
12
+ ## [0.3.2] - 2021-07-31
13
+
14
+ - Trap INT and TERM, so now the shutdown is a little bit more graceful.
15
+
16
+ ## [0.3.1] - 2021-07-29
17
+
18
+ - Remove dummy app from gem... size should go down quite a bit.
19
+
3
20
  ## [0.3.0] - 2021-07-29
4
21
 
5
22
  - Now there is logging! By default logs to stdout, but you can configure the logger by setting a different one through `Belated.config.logger`.
data/Gemfile CHANGED
@@ -11,5 +11,8 @@ gem 'rspec', '~> 3.0'
11
11
 
12
12
  gem 'rubocop', '~> 1.7'
13
13
 
14
+ gem 'database_cleaner-active_record'
14
15
  gem 'rails', '>= 6.1.3'
16
+ gem 'rspec-rails'
15
17
  gem 'sqlite3'
18
+ gem 'stackprof'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- belated (0.3.0)
4
+ belated (0.4.0)
5
5
  drb
6
6
  dry-configurable
7
7
 
@@ -72,6 +72,10 @@ GEM
72
72
  byebug (11.1.3)
73
73
  concurrent-ruby (1.1.9)
74
74
  crass (1.0.6)
75
+ database_cleaner-active_record (2.0.1)
76
+ activerecord (>= 5.a)
77
+ database_cleaner-core (~> 2.0.0)
78
+ database_cleaner-core (2.0.1)
75
79
  diff-lcs (1.4.4)
76
80
  drb (2.0.4)
77
81
  dry-configurable (0.12.1)
@@ -145,6 +149,14 @@ GEM
145
149
  rspec-mocks (3.10.2)
146
150
  diff-lcs (>= 1.2.0, < 2.0)
147
151
  rspec-support (~> 3.10.0)
152
+ rspec-rails (5.0.1)
153
+ actionpack (>= 5.2)
154
+ activesupport (>= 5.2)
155
+ railties (>= 5.2)
156
+ rspec-core (~> 3.10)
157
+ rspec-expectations (~> 3.10)
158
+ rspec-mocks (~> 3.10)
159
+ rspec-support (~> 3.10)
148
160
  rspec-support (3.10.2)
149
161
  rubocop (1.18.3)
150
162
  parallel (~> 1.10)
@@ -166,6 +178,7 @@ GEM
166
178
  activesupport (>= 4.0)
167
179
  sprockets (>= 3.0.0)
168
180
  sqlite3 (1.4.2)
181
+ stackprof (0.2.16)
169
182
  thor (1.1.0)
170
183
  tzinfo (2.0.4)
171
184
  concurrent-ruby (~> 1.0)
@@ -181,11 +194,14 @@ PLATFORMS
181
194
  DEPENDENCIES
182
195
  belated!
183
196
  byebug
197
+ database_cleaner-active_record
184
198
  rails (>= 6.1.3)
185
199
  rake (~> 13.0)
186
200
  rspec (~> 3.0)
201
+ rspec-rails
187
202
  rubocop (~> 1.7)
188
203
  sqlite3
204
+ stackprof
189
205
 
190
206
  BUNDLED WITH
191
207
  2.2.17
data/README.md CHANGED
@@ -10,19 +10,25 @@ It uses dRuby to do the communication! Which is absolute great. No need for Redi
10
10
 
11
11
  TODO LIST:
12
12
 
13
- - ~~Marshal the job queue into a file so you don't lose all progress~~
14
- (Ended up using YAML)
15
13
  - Catch SIGTERM and friends
16
- - ~~Support Rails~~ (Supported!)
17
- - ~~Parse options from command line, eg. `--workers 10`~~(Done!)
14
+ - Now supports it, partly.
18
15
  - Don't crash on errors (Partially done)
19
- - ~~Add a logger~~
20
- - Make it possible to schedule jobs
16
+ - Save jobs enqueued at a future date too when quitting (now it only saves the jobs in the queue)
17
+ - Have multiple queues?
21
18
  - Maybe support ActiveJob?
22
19
  - Have a web UI
23
20
  - Do some performance testing
24
21
  - Add a section telling people to use Sidekiq if they can
25
22
 
23
+ DONE
24
+
25
+ - ~~Make it possible to schedule jobs~~
26
+ - ~~Marshal the job queue into a file so you don't lose all progress~~
27
+ (Ended up using YAML)
28
+ - ~~Add a logger~~
29
+ - ~~Support Rails~~ (Supported!)
30
+ - ~~Parse options from command line, eg. `--workers 10`~~(Done!)
31
+
26
32
  ## Installation
27
33
 
28
34
  Add this line to your application's Gemfile:
@@ -94,6 +100,12 @@ client.perform_belated(job)
94
100
 
95
101
  If you want to pass a job to Belated.
96
102
 
103
+ If you don't want the job to run right away, you can also pass it a keyword param `at:` like so:
104
+
105
+ ```ruby
106
+ client.perform_belated(job, Time.now + 1.month)
107
+ ```
108
+
97
109
  # Settings
98
110
 
99
111
  Configuring Belated:
@@ -109,15 +121,15 @@ end
109
121
 
110
122
  From command line:
111
123
 
112
- $ bundle exec belated --rails=true
124
+ $ bundle exec belated --rails=true
113
125
 
114
126
  Use Rails or not.
115
127
 
116
- $ bundle exec belated --rails_path=/my_rails_project
128
+ $ bundle exec belated --rails_path=/my_rails_project
117
129
 
118
130
  Path to Rails project.
119
131
 
120
- $ bundle exec belated --workers=10
132
+ $ bundle exec belated --workers=10
121
133
 
122
134
  Number of workers.
123
135
 
data/belated.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  # Specify which files should be added to the gem when it is released.
25
25
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
26
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
27
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
27
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|dummy|spec|features)/}) }
28
28
  end
29
29
  spec.bindir = 'bin'
30
30
  spec.executables = ['belated']
data/lib/belated.rb CHANGED
@@ -9,6 +9,7 @@ require 'singleton'
9
9
  require 'dry-configurable'
10
10
  require 'belated/client'
11
11
  require 'logger'
12
+ require 'belated/queue'
12
13
 
13
14
  # Belated is a pure Ruby job backend.
14
15
  # It has limited functionality, as it only accepts
@@ -22,7 +23,7 @@ class Belated
22
23
  include Singleton unless $TESTING
23
24
  URI = 'druby://localhost:8788'
24
25
  FILE_NAME = 'belated_dump'
25
- @@queue = Queue.new
26
+ @@queue = Belated::Queue.new
26
27
 
27
28
  setting :rails, true
28
29
  setting :rails_path, '.'
@@ -36,17 +37,17 @@ class Belated
36
37
  # Aliased for testing purposes.
37
38
  # This is only run from the bin file.
38
39
  def start
39
- boot_app
40
- load_jobs
40
+ boot_app && load_jobs
41
41
  @worker_list = []
42
- Belated.config.workers.times do |_i|
43
- @worker_list << Thread.new { Worker.new }
42
+ Belated.config.workers.times do |i|
43
+ @worker_list << Thread.new { Worker.new(number: i.next) }
44
44
  end
45
45
  return unless Belated.config.connect
46
46
 
47
47
  connect!
48
48
  banner_and_info
49
- DRb.thread.join
49
+ trap_signals
50
+ enqueue_future_jobs
50
51
  end
51
52
  alias initialize start
52
53
 
@@ -55,10 +56,19 @@ class Belated
55
56
  DRb.start_service(URI, @@queue, verbose: true)
56
57
  rescue DRb::DRbConnError, Errno::EADDRINUSE
57
58
  Belated.logger.error 'Could not connect to DRb server.'
58
- uri = "druby://localhost:#{Array.new(4) { rand(10) }.join}"
59
- self.class.send(:remove_const, 'URI')
60
- self.class.const_set('URI', uri)
61
- retry
59
+ end
60
+
61
+ def trap_signals
62
+ %w[INT TERM].each do |signal|
63
+ Signal.trap(signal) do
64
+ @worker_list.length.times do
65
+ @@queue.push(:shutdown)
66
+ end
67
+ Thread.new { stop_workers }
68
+ sleep 0.1 until @@queue.empty? || $TESTING
69
+ exit
70
+ end
71
+ end
62
72
  end
63
73
 
64
74
  def boot_app
@@ -74,6 +84,19 @@ class Belated
74
84
  Belated.config.rails
75
85
  end
76
86
 
87
+ def enqueue_future_jobs
88
+ log 'starting future jobs thread'
89
+ loop do
90
+ @@queue.future_jobs.each_with_index do |job, i|
91
+ if job[:at] <= Time.now.utc
92
+ log @@queue.future_jobs.delete_at(i)
93
+ @@queue.push(job[:klass])
94
+ end
95
+ end
96
+ sleep 0.01
97
+ end
98
+ end
99
+
77
100
  def load_jobs
78
101
  log "reloading... if file exists #{File.exist?(Belated::FILE_NAME)}"
79
102
  return unless File.exist?(Belated::FILE_NAME)
@@ -92,15 +115,17 @@ class Belated
92
115
 
93
116
  def stop_workers
94
117
  @worker_list&.each do |worker|
118
+ sleep 0.1 if worker.alive?
95
119
  Thread.kill(worker)
96
120
  end
97
121
  class_array = []
98
- @@queue.size.times do |_i|
99
- next if (klass = @@queue.pop).instance_of?(Proc)
100
-
101
- class_array << klass
122
+ @@queue.length.times do |_i|
123
+ unless (klass = @@queue.pop).instance_of?(Proc) || klass == :shutdown
124
+ class_array << klass
125
+ end
102
126
  end
103
127
  pp File.open(FILE_NAME, 'wb') { |f| f.write(YAML.dump(class_array)) }
128
+ exit unless $TESTING
104
129
  end
105
130
 
106
131
  def banner
@@ -1,7 +1,16 @@
1
1
  class Belated
2
+ # The client class is responsible for managing the connection to the
3
+ # DRb server.
4
+ # You can enqueue jobs to be processed by the server.
5
+ # Example:
6
+ # client = Belated::Client.new
7
+ # client.enqueue(JubJub.new, at: Time.now + 5.seconds)
2
8
  class Client
3
9
  attr_accessor :queue
4
10
 
11
+ # Starts up the client.
12
+ # Connects to the queue through DRb.
13
+ # @return [void]
5
14
  def initialize
6
15
  server_uri = Belated::URI
7
16
  # @bank =
@@ -9,8 +18,12 @@ class Belated
9
18
  self.queue = DRbObject.new_with_uri(server_uri)
10
19
  end
11
20
 
12
- def perform(job)
13
- queue.push(job)
21
+ # The method that pushes the jobs to the queue.
22
+ # @param job [Object] - The the job to be pushed.
23
+ # @param at [Date] - The time at which the job should be executed.
24
+ # @return [Object] - The job that was pushed.
25
+ def perform(job, at: nil)
26
+ queue.push(job, at: at)
14
27
  end
15
28
  alias perform_belated perform
16
29
  alias perform_later perform
@@ -0,0 +1 @@
1
+ Job = Struct.new(:klass, :at)
@@ -0,0 +1,37 @@
1
+ require 'belated/job'
2
+
3
+ class Belated
4
+ class Queue
5
+ attr_accessor :future_jobs
6
+
7
+ def initialize(queue: Thread::Queue.new, future_jobs: [])
8
+ @queue = queue
9
+ self.future_jobs = future_jobs
10
+ end
11
+
12
+ def push(job, at: nil)
13
+ if at.nil?
14
+ @queue.push(job)
15
+ else
16
+ @future_jobs << Job.new(job, at)
17
+ end
18
+ end
19
+
20
+ def pop
21
+ @queue.pop
22
+ end
23
+
24
+ def clear
25
+ @queue.clear
26
+ self.future_jobs = []
27
+ end
28
+
29
+ def empty?
30
+ @queue.empty?
31
+ end
32
+
33
+ def length
34
+ @queue.length
35
+ end
36
+ end
37
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Belated
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -1,21 +1,24 @@
1
1
  require_relative 'logging'
2
2
  class Belated
3
3
  # The worker class that actually gets the jobs from the queue
4
- # and calls them. Expects the jobs to be procs.
4
+ # and calls them. Expects the jobs to be procs or
5
+ # classes that have a perform method.
5
6
  class Worker
6
7
  include Logging
7
8
 
8
- def initialize
9
+ def initialize(number: 1)
10
+ @number = number
9
11
  start_working
10
12
  end
11
13
 
12
14
  def start_working
13
15
  loop do
14
- job = Belated.fetch_job
15
- next unless job
16
+ log "Worker #{@number} fetching jobs!"
17
+ next unless (job = Belated.fetch_job)
18
+
19
+ break if job == :shutdown
16
20
 
17
21
  log call_job(job)
18
- log 'fetching jobs...'
19
22
  end
20
23
  end
21
24
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: belated
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sampo Kuokkanen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-29 00:00:00.000000000 Z
11
+ date: 2021-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: drb
@@ -78,76 +78,11 @@ files:
78
78
  - bin/bundle
79
79
  - bin/console
80
80
  - bin/setup
81
- - dummy/Rakefile
82
- - dummy/app/assets/config/manifest.js
83
- - dummy/app/assets/images/.keep
84
- - dummy/app/assets/stylesheets/application.css
85
- - dummy/app/channels/application_cable/channel.rb
86
- - dummy/app/channels/application_cable/connection.rb
87
- - dummy/app/controllers/application_controller.rb
88
- - dummy/app/controllers/concerns/.keep
89
- - dummy/app/helpers/application_helper.rb
90
- - dummy/app/javascript/packs/application.js
91
- - dummy/app/jobs/application_job.rb
92
- - dummy/app/mailers/application_mailer.rb
93
- - dummy/app/models/application_record.rb
94
- - dummy/app/models/concerns/.keep
95
- - dummy/app/models/user.rb
96
- - dummy/app/views/application/index.html.erb
97
- - dummy/app/views/layouts/application.html.erb
98
- - dummy/app/views/layouts/mailer.html.erb
99
- - dummy/app/views/layouts/mailer.text.erb
100
- - dummy/bin/rails
101
- - dummy/bin/rake
102
- - dummy/bin/setup
103
- - dummy/config.ru
104
- - dummy/config/application.rb
105
- - dummy/config/boot.rb
106
- - dummy/config/cable.yml
107
- - dummy/config/credentials.yml.enc
108
- - dummy/config/database.yml
109
- - dummy/config/environment.rb
110
- - dummy/config/environments/development.rb
111
- - dummy/config/environments/production.rb
112
- - dummy/config/environments/test.rb
113
- - dummy/config/initializers/application_controller_renderer.rb
114
- - dummy/config/initializers/backtrace_silencers.rb
115
- - dummy/config/initializers/content_security_policy.rb
116
- - dummy/config/initializers/cookies_serializer.rb
117
- - dummy/config/initializers/filter_parameter_logging.rb
118
- - dummy/config/initializers/inflections.rb
119
- - dummy/config/initializers/mime_types.rb
120
- - dummy/config/initializers/permissions_policy.rb
121
- - dummy/config/initializers/wrap_parameters.rb
122
- - dummy/config/locales/en.yml
123
- - dummy/config/master.key
124
- - dummy/config/puma.rb
125
- - dummy/config/routes.rb
126
- - dummy/config/storage.yml
127
- - dummy/db/migrate/20210613015406_create_users.rb
128
- - dummy/db/production.sqlite3
129
- - dummy/db/schema.rb
130
- - dummy/db/test.sqlite3
131
- - dummy/lib/assets/.keep
132
- - dummy/log/.keep
133
- - dummy/log/development.log
134
- - dummy/log/production.log
135
- - dummy/log/test.log
136
- - dummy/public/404.html
137
- - dummy/public/422.html
138
- - dummy/public/500.html
139
- - dummy/public/apple-touch-icon-precomposed.png
140
- - dummy/public/apple-touch-icon.png
141
- - dummy/public/favicon.ico
142
- - dummy/storage/.keep
143
- - dummy/tmp/.keep
144
- - dummy/tmp/development_secret.txt
145
- - dummy/tmp/pids/.keep
146
- - dummy/tmp/storage/.keep
147
- - hard_worker_dump
148
81
  - lib/belated.rb
149
82
  - lib/belated/client.rb
83
+ - lib/belated/job.rb
150
84
  - lib/belated/logging.rb
85
+ - lib/belated/queue.rb
151
86
  - lib/belated/rails.rb
152
87
  - lib/belated/version.rb
153
88
  - lib/belated/worker.rb