plok 0.2.4 → 0.2.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f94b374b06ba10ec08b73dbe775778f4ab227a544bf3f3560181873c3c3c84e
4
- data.tar.gz: dd0c619b49cfafe547bd23ff5a552a2c46a5d9367e8b230c21f92e7b8e6cb1b6
3
+ metadata.gz: 4e4560c0f41784811539873f92cbda25d73197ac1403d3ee1c1b3f046b0e0a0d
4
+ data.tar.gz: 95a866614905153ac92414e9dd8e12a60e0d6539118fd4dbf5b9427db323bd3f
5
5
  SHA512:
6
- metadata.gz: d2eede7ca6241841f363ea58e56c5497e4f157f2acfe18268303f12c25ebac1fb69921a66b62e7234fda7c847cb8abe9a43a0de672ee8611f093cfb584418783
7
- data.tar.gz: 584ab4f9a271486dbae8ad323ef3860ca78241168f8f79cac7a0252753717c84336e4bac5d7e0a6444214766402922f4613cbbe090a15e7425de5760c140e088
6
+ metadata.gz: bc64c91c32ea195fdfab4596acdfbc1611d4790d71121ff083eb8297b1b59ac7b2427de5f02ce95ce3382f57bc679d30e147b70e31bd1fc5a142c06e6aba7528
7
+ data.tar.gz: 63bbbb1e6dadc2b8bd667e6172c59110f893050d6978707bb492807872f6aad702c73fb8b5f3f76e448f58f2c4dd24b3eaa0bfd58a4064734e51d324ef4a762c
@@ -0,0 +1,64 @@
1
+ class QueuedTask < ActiveRecord::Base
2
+ include Plok::Loggable
3
+
4
+ serialize :data, Hash
5
+
6
+ validates :klass, presence: true
7
+
8
+ scope :locked, -> { where(locked: true) }
9
+ scope :unlocked, -> { where('locked = 0 OR locked IS NULL') }
10
+ scope :in_past, -> { where(perform_at: nil).or(where('perform_at <= ?', Time.zone.now)) }
11
+ scope :in_future, -> { where('perform_at > ?', Time.zone.now) }
12
+
13
+ def lock!
14
+ update_attribute :locked, true
15
+ end
16
+
17
+ def unlock!
18
+ update_attribute :locked, false
19
+ end
20
+
21
+ def unlocked?
22
+ !locked?
23
+ end
24
+
25
+ def execute!
26
+ klass.to_s.constantize.new(data).execute!
27
+ end
28
+
29
+ def self.queue(klass, data)
30
+ task = create!(klass: klass.to_s, data: data.except(:perform_at))
31
+ task.update(perform_at: data[:perform_at]) if data[:perform_at].present?
32
+ task
33
+ end
34
+
35
+ def self.queue_unless_already_queued(klass, data)
36
+ task = find_by(klass: klass, data: data)
37
+ return task if task.present?
38
+ self.queue(klass, data)
39
+ end
40
+
41
+ def dequeue!
42
+ destroy
43
+ end
44
+
45
+ def process!
46
+ lock!
47
+
48
+ begin
49
+ execute!
50
+ dequeue!
51
+ rescue
52
+ raise
53
+ ensure
54
+ unlock! unless destroyed?
55
+ end
56
+ end
57
+
58
+ def stuck?
59
+ return false if locked?
60
+ # Make sure task is past its perform_at timestamp.
61
+ return perform_at <= 30.minutes.ago if perform_at.present?
62
+ created_at <= 30.minutes.ago
63
+ end
64
+ end
@@ -0,0 +1,14 @@
1
+ class CreatePlokQueuedTasks < ActiveRecord::Migration[6.1]
2
+ def change
3
+ return if table_exists?(:queued_tasks)
4
+
5
+ create_table :queued_tasks do |t|
6
+ t.string :klass
7
+ t.text :data
8
+ t.boolean :locked
9
+ t.datetime :perform_at
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
data/lib/plok/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Plok
2
- VERSION = '0.2.4'
2
+ VERSION = '0.2.5'
3
3
  end
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :queued_task do
3
+ klass { 'SomeClass' }
4
+ end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plok
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davy Hellemans
@@ -82,13 +82,16 @@ files:
82
82
  - app/controllers/plok/version_controller.rb
83
83
  - app/models/concerns/plok/loggable.rb
84
84
  - app/models/log.rb
85
+ - app/models/queued_task.rb
85
86
  - config/routes.rb
86
87
  - db/migrate/20211008130809_create_plok_logs.rb
88
+ - db/migrate/20211015141837_create_plok_queued_tasks.rb
87
89
  - lib/plok.rb
88
90
  - lib/plok/engine.rb
89
91
  - lib/plok/version.rb
90
92
  - lib/tasks/plok_tasks.rake
91
93
  - spec/factories/logs.rb
94
+ - spec/factories/queued_tasks.rb
92
95
  - spec/support/plok/loggable.rb
93
96
  homepage: https://plok.blimp.be
94
97
  licenses: