belated 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/main.yml +16 -0
  3. data/.gitignore +14 -0
  4. data/.rake_tasks~ +10 -0
  5. data/.rspec +4 -0
  6. data/.rubocop.yml +42 -0
  7. data/CHANGELOG.md +25 -0
  8. data/CODE_OF_CONDUCT.md +84 -0
  9. data/Gemfile +15 -0
  10. data/Gemfile.lock +191 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +135 -0
  13. data/Rakefile +12 -0
  14. data/belated.gemspec +40 -0
  15. data/bin/belated +38 -0
  16. data/bin/bundle +3 -0
  17. data/bin/console +15 -0
  18. data/bin/setup +8 -0
  19. data/dummy/Rakefile +8 -0
  20. data/dummy/app/assets/config/manifest.js +3 -0
  21. data/dummy/app/assets/images/.keep +0 -0
  22. data/dummy/app/assets/stylesheets/application.css +15 -0
  23. data/dummy/app/channels/application_cable/channel.rb +6 -0
  24. data/dummy/app/channels/application_cable/connection.rb +6 -0
  25. data/dummy/app/controllers/application_controller.rb +5 -0
  26. data/dummy/app/controllers/concerns/.keep +0 -0
  27. data/dummy/app/helpers/application_helper.rb +4 -0
  28. data/dummy/app/javascript/packs/application.js +15 -0
  29. data/dummy/app/jobs/application_job.rb +9 -0
  30. data/dummy/app/mailers/application_mailer.rb +6 -0
  31. data/dummy/app/models/application_record.rb +5 -0
  32. data/dummy/app/models/concerns/.keep +0 -0
  33. data/dummy/app/models/user.rb +2 -0
  34. data/dummy/app/views/application/index.html.erb +4 -0
  35. data/dummy/app/views/layouts/application.html.erb +15 -0
  36. data/dummy/app/views/layouts/mailer.html.erb +13 -0
  37. data/dummy/app/views/layouts/mailer.text.erb +1 -0
  38. data/dummy/bin/rails +6 -0
  39. data/dummy/bin/rake +6 -0
  40. data/dummy/bin/setup +35 -0
  41. data/dummy/config.ru +8 -0
  42. data/dummy/config/application.rb +23 -0
  43. data/dummy/config/boot.rb +7 -0
  44. data/dummy/config/cable.yml +10 -0
  45. data/dummy/config/credentials.yml.enc +1 -0
  46. data/dummy/config/database.yml +25 -0
  47. data/dummy/config/environment.rb +7 -0
  48. data/dummy/config/environments/development.rb +78 -0
  49. data/dummy/config/environments/production.rb +122 -0
  50. data/dummy/config/environments/test.rb +51 -0
  51. data/dummy/config/initializers/application_controller_renderer.rb +9 -0
  52. data/dummy/config/initializers/backtrace_silencers.rb +10 -0
  53. data/dummy/config/initializers/content_security_policy.rb +29 -0
  54. data/dummy/config/initializers/cookies_serializer.rb +7 -0
  55. data/dummy/config/initializers/filter_parameter_logging.rb +8 -0
  56. data/dummy/config/initializers/inflections.rb +17 -0
  57. data/dummy/config/initializers/mime_types.rb +5 -0
  58. data/dummy/config/initializers/permissions_policy.rb +12 -0
  59. data/dummy/config/initializers/wrap_parameters.rb +16 -0
  60. data/dummy/config/locales/en.yml +33 -0
  61. data/dummy/config/master.key +1 -0
  62. data/dummy/config/puma.rb +45 -0
  63. data/dummy/config/routes.rb +5 -0
  64. data/dummy/config/storage.yml +34 -0
  65. data/dummy/db/migrate/20210613015406_create_users.rb +10 -0
  66. data/dummy/db/production.sqlite3 +0 -0
  67. data/dummy/db/schema.rb +20 -0
  68. data/dummy/db/test.sqlite3 +0 -0
  69. data/dummy/lib/assets/.keep +0 -0
  70. data/dummy/log/.keep +0 -0
  71. data/dummy/log/development.log +0 -0
  72. data/dummy/log/production.log +3 -0
  73. data/dummy/log/test.log +595 -0
  74. data/dummy/public/404.html +67 -0
  75. data/dummy/public/422.html +67 -0
  76. data/dummy/public/500.html +66 -0
  77. data/dummy/public/apple-touch-icon-precomposed.png +0 -0
  78. data/dummy/public/apple-touch-icon.png +0 -0
  79. data/dummy/public/favicon.ico +0 -0
  80. data/dummy/storage/.keep +0 -0
  81. data/dummy/tmp/.keep +0 -0
  82. data/dummy/tmp/development_secret.txt +1 -0
  83. data/dummy/tmp/pids/.keep +0 -0
  84. data/dummy/tmp/storage/.keep +0 -0
  85. data/hard_worker_dump +1 -0
  86. data/lib/belated.rb +147 -0
  87. data/lib/belated/client.rb +16 -0
  88. data/lib/belated/rails.rb +5 -0
  89. data/lib/belated/version.rb +5 -0
  90. data/lib/belated/worker.rb +27 -0
  91. metadata +179 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
File without changes
File without changes
File without changes
data/dummy/tmp/.keep ADDED
File without changes
@@ -0,0 +1 @@
1
+ 472e20581a3a96e1b857692e2f63ae72cf6be5d0e8de29df370dfc87b3bd085211fd32a43d00b66af3400b51f2d4b8f2fce29421b529a8e72b365560d9b61bc3
File without changes
File without changes
data/hard_worker_dump ADDED
@@ -0,0 +1 @@
1
+ --- []
data/lib/belated.rb ADDED
@@ -0,0 +1,147 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'belated/version'
4
+ require_relative 'belated/worker'
5
+ require 'drb'
6
+ require 'yaml'
7
+ require 'singleton'
8
+ require 'dry-configurable'
9
+ require 'belated/client'
10
+ require 'belated/rails' if defined?(::Rails::Engine)
11
+
12
+ # Belated is a pure Ruby job backend.
13
+ # It has limited functionality, as it only accepts
14
+ # jobs as procs, but that might make it useful if you don't
15
+ # need anything as big as Redis.
16
+ # Saves jobs into a file as YAML as long as they're not procs
17
+ # and reloads them when started again.
18
+ class Belated
19
+ extend Dry::Configurable
20
+ include Singleton unless $TESTING
21
+ URI = "druby://localhost:#{$TESTING ? Array.new(4) { rand(10) }.join : "8788"}"
22
+ FILE_NAME = 'belated_dump'
23
+ @@queue = Queue.new
24
+
25
+ setting :rails, true
26
+ setting :rails_path, '.'
27
+ setting :workers, 1
28
+ setting :connect, true
29
+ setting :environment, 'development'
30
+
31
+ # Since it's running as a singleton, we need something to start it up.
32
+ # Aliased for testing purposes.
33
+ # This is only run from the bin file.
34
+ def start
35
+ boot_app
36
+ load_jobs
37
+ @worker_list = []
38
+ Belated.config.workers.times do |_i|
39
+ @worker_list << Thread.new { Worker.new }
40
+ end
41
+ return unless Belated.config.connect
42
+
43
+ DRb.start_service(URI, @@queue, verbose: true)
44
+ puts banner_and_info
45
+ DRb.thread.join
46
+ end
47
+ alias initialize start
48
+
49
+ def boot_app
50
+ return unless rails?
51
+
52
+ ENV['RAILS_ENV'] ||= Belated.config.environment
53
+ require File.expand_path("#{Belated.config.rails_path}/config/environment.rb")
54
+ require 'rails/all'
55
+ require 'belated/rails'
56
+ end
57
+
58
+ def rails?
59
+ Belated.config.rails
60
+ end
61
+
62
+ def load_jobs
63
+ return unless File.exist?(Belated::FILE_NAME)
64
+
65
+ jobs = YAML.load(File.binread(FILE_NAME))
66
+ jobs.each do |job|
67
+ @@queue.push(job)
68
+ end
69
+ File.delete(Belated::FILE_NAME)
70
+ end
71
+
72
+ def reload
73
+ load_jobs
74
+ end
75
+
76
+ def stop_workers
77
+ @worker_list.each do |worker|
78
+ Thread.kill(worker)
79
+ end
80
+ return if @@queue.empty?
81
+
82
+ class_array = []
83
+
84
+ @@queue.size.times do |_i|
85
+ next if (klass_or_proc = @@queue.pop).instance_of?(Proc)
86
+
87
+ class_array << klass_or_proc
88
+ end
89
+ File.open(FILE_NAME, 'wb') { |f| f.write(YAML.dump(class_array)) }
90
+ end
91
+
92
+ def self.stop_workers
93
+ @worker_list&.each do |worker|
94
+ Thread.kill(worker)
95
+ end
96
+ class_array = []
97
+ @@queue.size.times do |_i|
98
+ next if (klass_or_proc = @@queue.pop).instance_of?(Proc)
99
+
100
+ class_array << klass_or_proc
101
+ end
102
+ File.open(FILE_NAME, 'wb') { |f| f.write(YAML.dump(class_array)) }
103
+ end
104
+
105
+ def banner
106
+ <<-'BANNER'
107
+ .----------------. .----------------. .----------------. .----------------. .----------------. .----------------. .----------------.
108
+ | .--------------. | .--------------. | .--------------. | .--------------. | .--------------. | .--------------. | .--------------. |
109
+ | | ______ | | | _________ | | | _____ | | | __ | | | _________ | | | _________ | | | ________ | |
110
+ | | |_ _ \ | | | |_ ___ | | | | |_ _| | | | / \ | | | | _ _ | | | | |_ ___ | | | | |_ ___ `. | |
111
+ | | | |_) | | | | | |_ \_| | | | | | | | | / /\ \ | | | |_/ | | \_| | | | | |_ \_| | | | | | `. \ | |
112
+ | | | __'. | | | | _| _ | | | | | _ | | | / ____ \ | | | | | | | | | _| _ | | | | | | | | |
113
+ | | _| |__) | | | | _| |___/ | | | | _| |__/ | | | | _/ / \ \_ | | | _| |_ | | | _| |___/ | | | | _| |___.' / | |
114
+ | | |_______/ | | | |_________| | | | |________| | | ||____| |____|| | | |_____| | | | |_________| | | | |________.' | |
115
+ | | | | | | | | | | | | | | | | | | | | | |
116
+ | '--------------' | '--------------' | '--------------' | '--------------' | '--------------' | '--------------' | '--------------' |
117
+ '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------'
118
+ BANNER
119
+ end
120
+
121
+ def banner_and_info
122
+ puts banner
123
+ puts "Currently running Belated version #{Belated::VERSION}"
124
+ puts %(Belated running #{@worker_list&.length.to_i} workers on #{URI}...)
125
+ end
126
+
127
+ def stats
128
+ {
129
+ jobs: @@queue.size,
130
+ workers: @worker_list&.length
131
+ }
132
+ end
133
+
134
+ def self.clear_queue!
135
+ @@queue.clear
136
+ end
137
+
138
+ def job_list
139
+ @@queue
140
+ end
141
+
142
+ def self.fetch_job
143
+ @@queue.pop
144
+ end
145
+
146
+ class Error < StandardError; end
147
+ end
@@ -0,0 +1,16 @@
1
+ class Belated
2
+ class Client
3
+ attr_accessor :queue
4
+
5
+ def initialize
6
+ server_uri = Belated::URI
7
+ DRb.start_service
8
+ self.queue = DRbObject.new_with_uri(server_uri)
9
+ end
10
+
11
+ def perform_belated(job)
12
+ queue.push(job)
13
+ end
14
+ alias perform_later perform_belated
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ class Belated
2
+ class Rails < ::Rails::Engine
3
+ isolate_namespace Belated
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Belated
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,27 @@
1
+ class Belated
2
+ # The worker class that actually gets the jobs from the queue
3
+ # and calls them. Expects the jobs to be procs.
4
+ class Worker
5
+ def initialize
6
+ start_working
7
+ end
8
+
9
+ def start_working
10
+ loop do
11
+ job = Belated.fetch_job
12
+ next unless job
13
+
14
+ call_job(job)
15
+ puts 'fetching jobs...'
16
+ end
17
+ end
18
+
19
+ def call_job(job)
20
+ if job.respond_to?(:call)
21
+ pp job.call
22
+ else
23
+ pp job&.perform
24
+ end
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,179 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: belated
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sampo Kuokkanen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: drb
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: dry-configurable
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A simple Ruby backend job framework without Redis or PostgreSQL dependency.
56
+ Used to be named HardWorker.
57
+ email:
58
+ - sampo.kuokkanen@gmail.com
59
+ executables:
60
+ - belated
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".github/workflows/main.yml"
65
+ - ".gitignore"
66
+ - ".rake_tasks~"
67
+ - ".rspec"
68
+ - ".rubocop.yml"
69
+ - CHANGELOG.md
70
+ - CODE_OF_CONDUCT.md
71
+ - Gemfile
72
+ - Gemfile.lock
73
+ - LICENSE.txt
74
+ - README.md
75
+ - Rakefile
76
+ - belated.gemspec
77
+ - bin/belated
78
+ - bin/bundle
79
+ - bin/console
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
+ - lib/belated.rb
149
+ - lib/belated/client.rb
150
+ - lib/belated/rails.rb
151
+ - lib/belated/version.rb
152
+ - lib/belated/worker.rb
153
+ homepage: https://github.com/sampokuokkanen/belated
154
+ licenses:
155
+ - MIT
156
+ metadata:
157
+ homepage_uri: https://github.com/sampokuokkanen/belated
158
+ source_code_uri: https://github.com/sampokuokkanen/belated
159
+ changelog_uri: https://github.com/sampokuokkanen/belated/blob/main/CHANGELOG.md
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: 2.7.0
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubygems_version: 3.2.15
176
+ signing_key:
177
+ specification_version: 4
178
+ summary: Run background jobs with Belated and dRuby!
179
+ test_files: []