acidic_job 0.7.6 → 1.0.0.beta.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 +4 -4
  2. data/.github/workflows/main.yml +36 -12
  3. data/.gitignore +6 -0
  4. data/.rubocop.yml +21 -0
  5. data/.tool-versions +1 -0
  6. data/Gemfile +0 -25
  7. data/Gemfile.lock +176 -74
  8. data/README.md +299 -46
  9. data/UPGRADE_GUIDE.md +81 -0
  10. data/acidic_job.gemspec +15 -2
  11. data/bin/console +5 -2
  12. data/combustion/log/test.log +0 -0
  13. data/gemfiles/rails_6.1_sidekiq_6.4.gemfile +10 -0
  14. data/gemfiles/rails_6.1_sidekiq_6.5.gemfile +10 -0
  15. data/gemfiles/rails_7.0_sidekiq_6.4.gemfile +10 -0
  16. data/gemfiles/rails_7.0_sidekiq_6.5.gemfile +10 -0
  17. data/gemfiles/rails_7.1_sidekiq_6.4.gemfile +10 -0
  18. data/gemfiles/rails_7.1_sidekiq_6.5.gemfile +10 -0
  19. data/lib/acidic_job/active_kiq.rb +114 -0
  20. data/lib/acidic_job/arguments.rb +22 -0
  21. data/lib/acidic_job/base.rb +11 -0
  22. data/lib/acidic_job/errors.rb +10 -17
  23. data/lib/acidic_job/extensions/action_mailer.rb +19 -0
  24. data/lib/acidic_job/extensions/noticed.rb +46 -0
  25. data/lib/acidic_job/{response.rb → finished_point.rb} +5 -7
  26. data/lib/acidic_job/idempotency_key.rb +27 -0
  27. data/lib/acidic_job/logger.rb +31 -0
  28. data/lib/acidic_job/mixin.rb +259 -0
  29. data/lib/acidic_job/perform_wrapper.rb +14 -27
  30. data/lib/acidic_job/processor.rb +96 -0
  31. data/lib/acidic_job/recovery_point.rb +4 -5
  32. data/lib/acidic_job/run.rb +299 -0
  33. data/lib/acidic_job/serializer.rb +24 -0
  34. data/lib/acidic_job/serializers/exception_serializer.rb +41 -0
  35. data/lib/acidic_job/serializers/finished_point_serializer.rb +24 -0
  36. data/lib/acidic_job/serializers/job_serializer.rb +35 -0
  37. data/lib/acidic_job/serializers/range_serializer.rb +28 -0
  38. data/lib/acidic_job/serializers/recovery_point_serializer.rb +25 -0
  39. data/lib/acidic_job/serializers/worker_serializer.rb +27 -0
  40. data/lib/acidic_job/testing.rb +73 -0
  41. data/lib/acidic_job/version.rb +1 -1
  42. data/lib/acidic_job/workflow.rb +78 -0
  43. data/lib/acidic_job/workflow_builder.rb +35 -0
  44. data/lib/acidic_job/workflow_step.rb +103 -0
  45. data/lib/acidic_job.rb +31 -334
  46. data/lib/generators/acidic_job/drop_tables_generator.rb +26 -0
  47. data/lib/generators/acidic_job/install_generator.rb +27 -0
  48. data/lib/generators/acidic_job/templates/create_acidic_job_runs_migration.rb.erb +19 -0
  49. data/lib/generators/{templates/create_acidic_job_keys_migration.rb.erb → acidic_job/templates/drop_acidic_job_keys_migration.rb.erb} +10 -3
  50. metadata +213 -20
  51. data/.ruby_version +0 -1
  52. data/lib/acidic_job/deliver_transactionally_extension.rb +0 -26
  53. data/lib/acidic_job/key.rb +0 -33
  54. data/lib/acidic_job/no_op.rb +0 -11
  55. data/lib/acidic_job/perform_transactionally_extension.rb +0 -33
  56. data/lib/acidic_job/sidekiq_callbacks.rb +0 -45
  57. data/lib/acidic_job/staged.rb +0 -50
  58. data/lib/generators/acidic_job_generator.rb +0 -44
  59. data/lib/generators/templates/create_staged_acidic_jobs_migration.rb.erb +0 -10
@@ -1,6 +1,6 @@
1
- class CreateAcidicJobKeys < <%= migration_class %>
1
+ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version %>
2
2
  def change
3
- create_table :acidic_job_keys do |t|
3
+ drop_table :acidic_job_keys do |t|
4
4
  t.string :idempotency_key, null: false
5
5
  t.string :job_name, null: false
6
6
  t.text :job_args, null: true
@@ -11,10 +11,17 @@ class CreateAcidicJobKeys < <%= migration_class %>
11
11
  t.text :attr_accessors
12
12
  t.text :workflow
13
13
  t.timestamps
14
-
14
+
15
15
  t.index %i[idempotency_key job_name job_args],
16
16
  unique: true,
17
17
  name: "idx_acidic_job_keys_on_idempotency_key_n_job_name_n_job_args"
18
18
  end
19
+
20
+ drop_table :staged_acidic_jobs do |t|
21
+ t.string :adapter, null: false
22
+ t.string :job_name, null: false
23
+ t.text :job_args, null: true
24
+ t.timestamps
25
+ end
19
26
  end
20
27
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acidic_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 1.0.0.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - fractaledmind
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-19 00:00:00.000000000 Z
11
+ date: 2022-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activejob
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'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: activerecord
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: 4.0.0
33
+ version: '0'
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: 4.0.0
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: activesupport
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +52,174 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: combustion
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: net-smtp
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: noticed
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
41
111
  - !ruby/object:Gem::Dependency
42
112
  name: railties
43
113
  requirement: !ruby/object:Gem::Requirement
44
114
  requirements:
45
115
  - - ">="
46
116
  - !ruby/object:Gem::Version
47
- version: '4.0'
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
48
132
  type: :development
49
133
  prerelease: false
50
134
  version_requirements: !ruby/object:Gem::Requirement
51
135
  requirements:
52
136
  - - ">="
53
137
  - !ruby/object:Gem::Version
54
- version: '4.0'
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-minitest
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-rake
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: sidekiq
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: simplecov
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: sqlite3
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
55
223
  description: Idempotent operations for Rails apps, built on top of ActiveJob.
56
224
  email:
57
225
  - stephen.margheim@gmail.com
@@ -62,31 +230,55 @@ files:
62
230
  - ".github/workflows/main.yml"
63
231
  - ".gitignore"
64
232
  - ".rubocop.yml"
65
- - ".ruby_version"
233
+ - ".tool-versions"
66
234
  - Gemfile
67
235
  - Gemfile.lock
68
236
  - LICENSE
69
237
  - README.md
70
238
  - Rakefile
239
+ - UPGRADE_GUIDE.md
71
240
  - acidic_job.gemspec
72
241
  - bin/console
73
242
  - bin/setup
74
243
  - blog_post.md
244
+ - combustion/log/test.log
245
+ - gemfiles/rails_6.1_sidekiq_6.4.gemfile
246
+ - gemfiles/rails_6.1_sidekiq_6.5.gemfile
247
+ - gemfiles/rails_7.0_sidekiq_6.4.gemfile
248
+ - gemfiles/rails_7.0_sidekiq_6.5.gemfile
249
+ - gemfiles/rails_7.1_sidekiq_6.4.gemfile
250
+ - gemfiles/rails_7.1_sidekiq_6.5.gemfile
75
251
  - lib/acidic_job.rb
76
- - lib/acidic_job/deliver_transactionally_extension.rb
252
+ - lib/acidic_job/active_kiq.rb
253
+ - lib/acidic_job/arguments.rb
254
+ - lib/acidic_job/base.rb
77
255
  - lib/acidic_job/errors.rb
78
- - lib/acidic_job/key.rb
79
- - lib/acidic_job/no_op.rb
80
- - lib/acidic_job/perform_transactionally_extension.rb
256
+ - lib/acidic_job/extensions/action_mailer.rb
257
+ - lib/acidic_job/extensions/noticed.rb
258
+ - lib/acidic_job/finished_point.rb
259
+ - lib/acidic_job/idempotency_key.rb
260
+ - lib/acidic_job/logger.rb
261
+ - lib/acidic_job/mixin.rb
81
262
  - lib/acidic_job/perform_wrapper.rb
263
+ - lib/acidic_job/processor.rb
82
264
  - lib/acidic_job/recovery_point.rb
83
- - lib/acidic_job/response.rb
84
- - lib/acidic_job/sidekiq_callbacks.rb
85
- - lib/acidic_job/staged.rb
265
+ - lib/acidic_job/run.rb
266
+ - lib/acidic_job/serializer.rb
267
+ - lib/acidic_job/serializers/exception_serializer.rb
268
+ - lib/acidic_job/serializers/finished_point_serializer.rb
269
+ - lib/acidic_job/serializers/job_serializer.rb
270
+ - lib/acidic_job/serializers/range_serializer.rb
271
+ - lib/acidic_job/serializers/recovery_point_serializer.rb
272
+ - lib/acidic_job/serializers/worker_serializer.rb
273
+ - lib/acidic_job/testing.rb
86
274
  - lib/acidic_job/version.rb
87
- - lib/generators/acidic_job_generator.rb
88
- - lib/generators/templates/create_acidic_job_keys_migration.rb.erb
89
- - lib/generators/templates/create_staged_acidic_jobs_migration.rb.erb
275
+ - lib/acidic_job/workflow.rb
276
+ - lib/acidic_job/workflow_builder.rb
277
+ - lib/acidic_job/workflow_step.rb
278
+ - lib/generators/acidic_job/drop_tables_generator.rb
279
+ - lib/generators/acidic_job/install_generator.rb
280
+ - lib/generators/acidic_job/templates/create_acidic_job_runs_migration.rb.erb
281
+ - lib/generators/acidic_job/templates/drop_acidic_job_keys_migration.rb.erb
90
282
  homepage: https://github.com/fractaledmind/acidic_job
91
283
  licenses:
92
284
  - MIT
@@ -94,6 +286,7 @@ metadata:
94
286
  homepage_uri: https://github.com/fractaledmind/acidic_job
95
287
  source_code_uri: https://github.com/fractaledmind/acidic_job
96
288
  changelog_uri: https://github.com/fractaledmind/acidic_job/CHANGELOG.md
289
+ rubygems_mfa_required: 'true'
97
290
  post_install_message:
98
291
  rdoc_options: []
99
292
  require_paths:
@@ -105,11 +298,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
298
  version: 2.7.0
106
299
  required_rubygems_version: !ruby/object:Gem::Requirement
107
300
  requirements:
108
- - - ">="
301
+ - - ">"
109
302
  - !ruby/object:Gem::Version
110
- version: '0'
303
+ version: 1.3.1
111
304
  requirements: []
112
- rubygems_version: 3.2.22
305
+ rubygems_version: 3.3.7
113
306
  signing_key:
114
307
  specification_version: 4
115
308
  summary: Idempotent operations for Rails apps, built on top of ActiveJob.
data/.ruby_version DELETED
@@ -1 +0,0 @@
1
- 2.7.1
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module AcidicJob
4
- module DeliverTransactionallyExtension
5
- # rubocop:disable Metrics/MethodLength
6
- def deliver_transactionally(_options = {})
7
- job = delivery_job_class
8
-
9
- attributes = {
10
- adapter: "activejob",
11
- job_name: job.name
12
- }
13
-
14
- job_args = if job <= ActionMailer::Parameterized::MailDeliveryJob
15
- [@mailer_class.name, @action.to_s, "deliver_now", { params: @params, args: @args }]
16
- else
17
- [@mailer_class.name, @action.to_s, "deliver_now", @params, *@args]
18
- end
19
-
20
- attributes[:job_args] = job.new(job_args).serialize
21
-
22
- AcidicJob::Staged.create!(attributes)
23
- end
24
- # rubocop:enable Metrics/MethodLength
25
- end
26
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_record"
4
-
5
- module AcidicJob
6
- class Key < ActiveRecord::Base
7
- RECOVERY_POINT_FINISHED = "FINISHED"
8
-
9
- self.table_name = "acidic_job_keys"
10
-
11
- serialize :error_object
12
- serialize :job_args
13
- serialize :workflow
14
- store :attr_accessors
15
-
16
- validates :idempotency_key, presence: true, uniqueness: { scope: %i[job_name job_args] }
17
- validates :job_name, presence: true
18
- validates :last_run_at, presence: true
19
- validates :recovery_point, presence: true
20
-
21
- def finished?
22
- recovery_point == RECOVERY_POINT_FINISHED
23
- end
24
-
25
- def succeeded?
26
- finished? && !failed?
27
- end
28
-
29
- def failed?
30
- error_object.present?
31
- end
32
- end
33
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Represents an action to perform a no-op. One possible option for a return
4
- # from an #atomic_phase block.
5
- module AcidicJob
6
- class NoOp
7
- def call(_key)
8
- # no-op
9
- end
10
- end
11
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support/concern"
4
-
5
- module AcidicJob
6
- module PerformTransactionallyExtension
7
- extend ActiveSupport::Concern
8
-
9
- class_methods do
10
- # rubocop:disable Metrics/MethodLength
11
- def perform_transactionally(*args)
12
- attributes = if defined?(ActiveJob) && self < ActiveJob::Base
13
- {
14
- adapter: "activejob",
15
- job_name: name,
16
- job_args: job_or_instantiate(*args).serialize
17
- }
18
- elsif defined?(Sidekiq) && include?(Sidekiq::Worker)
19
- {
20
- adapter: "sidekiq",
21
- job_name: name,
22
- job_args: args
23
- }
24
- else
25
- raise UnknownJobAdapter
26
- end
27
-
28
- AcidicJob::Staged.create!(attributes)
29
- end
30
- # rubocop:enable Metrics/MethodLength
31
- end
32
- end
33
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support/callbacks"
4
-
5
- # Following approach used by ActiveJob
6
- # https://github.com/rails/rails/blob/93c9534c9871d4adad4bc33b5edc355672b59c61/activejob/lib/active_job/callbacks.rb
7
- module SidekiqCallbacks
8
- extend ActiveSupport::Concern
9
-
10
- def self.prepended(base)
11
- base.include(ActiveSupport::Callbacks)
12
-
13
- # Check to see if we already have any callbacks for :perform
14
- # Prevents overwriting callbacks if we already included this module (and defined callbacks)
15
- base.define_callbacks :perform unless base.respond_to?(:_perform_callbacks) && base._perform_callbacks.present?
16
-
17
- class << base
18
- prepend ClassMethods
19
- end
20
- end
21
-
22
- def perform(*args)
23
- if respond_to?(:run_callbacks)
24
- run_callbacks :perform do
25
- super(*args)
26
- end
27
- else
28
- super(*args)
29
- end
30
- end
31
-
32
- module ClassMethods
33
- def around_perform(*filters, &blk)
34
- set_callback(:perform, :around, *filters, &blk)
35
- end
36
-
37
- def before_perform(*filters, &blk)
38
- set_callback(:perform, :before, *filters, &blk)
39
- end
40
-
41
- def after_perform(*filters, &blk)
42
- set_callback(:perform, :after, *filters, &blk)
43
- end
44
- end
45
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_record"
4
- require "global_id"
5
-
6
- module AcidicJob
7
- class Staged < ActiveRecord::Base
8
- self.table_name = "staged_acidic_jobs"
9
-
10
- include GlobalID::Identification
11
-
12
- validates :adapter, presence: true
13
- validates :job_name, presence: true
14
- validates :job_args, presence: true
15
-
16
- serialize :job_args
17
-
18
- after_create_commit :enqueue_job
19
-
20
- private
21
-
22
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
23
- def enqueue_job
24
- gid = { "staged_job_gid" => to_global_id.to_s }
25
-
26
- if job_args.is_a?(Hash) && job_args.key?("arguments")
27
- job_args["arguments"].concat([gid])
28
- else
29
- job_args.concat([gid])
30
- end
31
-
32
- case adapter
33
- when "activejob"
34
- job = ActiveJob::Base.deserialize(job_args)
35
- job.enqueue
36
- when "sidekiq"
37
- Sidekiq::Client.push(
38
- "class" => job_name,
39
- "args" => job_args
40
- )
41
- else
42
- raise UnknownJobAdapter.new(adapter: adapter)
43
- end
44
-
45
- # NOTE: record will be deleted after the job has successfully been performed
46
- true
47
- end
48
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
49
- end
50
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails/generators"
4
- require "rails/generators/active_record"
5
-
6
- class AcidicJobGenerator < ActiveRecord::Generators::Base
7
- # ActiveRecord::Generators::Base inherits from Rails::Generators::NamedBase
8
- # which requires a NAME parameter for the new table name.
9
- # Our generator always uses "acidic_job_keys", so we just set a random name here.
10
- argument :name, type: :string, default: "random_name"
11
-
12
- source_root File.expand_path("templates", __dir__)
13
-
14
- def self.next_migration_number(_path)
15
- if instance_variable_defined?("@prev_migration_nr")
16
- @prev_migration_nr += 1
17
- else
18
- @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
19
- end
20
-
21
- @prev_migration_nr.to_s
22
- end
23
-
24
- # Copies the migration template to db/migrate.
25
- def copy_acidic_job_keys_migration_files
26
- migration_template "create_acidic_job_keys_migration.rb.erb",
27
- "db/migrate/create_acidic_job_keys.rb"
28
- end
29
-
30
- def copy_staged_acidic_jobs_migration_files
31
- migration_template "create_staged_acidic_jobs_migration.rb.erb",
32
- "db/migrate/create_staged_acidic_jobs.rb"
33
- end
34
-
35
- protected
36
-
37
- def migration_class
38
- if ActiveRecord::VERSION::MAJOR >= 5
39
- ActiveRecord::Migration["#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}"]
40
- else
41
- ActiveRecord::Migration
42
- end
43
- end
44
- end
@@ -1,10 +0,0 @@
1
- class CreateStagedAcidicJobs < <%= migration_class %>
2
- def change
3
- create_table :staged_acidic_jobs do |t|
4
- t.string :adapter, null: false
5
- t.string :job_name, null: false
6
- t.text :job_args, null: true
7
- t.timestamps
8
- end
9
- end
10
- end