trogdir_models 0.7.4 → 0.7.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
  SHA1:
3
- metadata.gz: 7378d7cbfd3494afdaaf326d28ce63a46d4dde00
4
- data.tar.gz: 9effcfc1f4372689e5d38231342d05a292d72a8d
3
+ metadata.gz: d24c65d59c98428bcf8092f1e79d424ce0491a9e
4
+ data.tar.gz: c3a079f9aebb8f516fa9817aa7848c5b1b9b430e
5
5
  SHA512:
6
- metadata.gz: ab7605d78c0f946250a9ad743d016e6d1138652dc8ef1d1f719c68e8d363ab51a1bbf8295cfddb02e3e0eceb6b216ce922c04cf35a4da41a2c81b2c56577b483
7
- data.tar.gz: 8670018feccee0d3877dc03da6504f4b4ad4594ea075a4831780f228e9005d59c268adf8ad32d571436db32c4584878471998d8c8bbd458465fc9af744911afb
6
+ metadata.gz: e4c2dcb2c74c129126d9d5ccfe3a03e8080809bed745a5d0829923efe279fcbb138a1c8ba8938de79a5419ec2538a004c4bfb61032550d761663d71f4d2b98d0
7
+ data.tar.gz: d68d55c5199ca5a0a589424bcccda851010bb151ddbe525cc9bdea5399054497a1d76873e3b41fc528cf75b68123db94f917927fd1e0a338c694169ea52673c3
@@ -4,4 +4,5 @@ class ChangeSync
4
4
  embedded_in :changeset
5
5
  belongs_to :syncinator
6
6
  embeds_many :sync_logs
7
- end
7
+ field :run_after, type: Time, default: -> { Time.now - 1 }
8
+ end
@@ -11,6 +11,9 @@ class SyncLog
11
11
 
12
12
  validates :started_at, presence: true
13
13
 
14
+ before_save :update_change_sync
15
+ after_save :save_change_sync
16
+
14
17
  delegate :changeset, :syncinator, to: :change_sync
15
18
 
16
19
  def self.find_through_parents(id)
@@ -19,4 +22,21 @@ class SyncLog
19
22
  change_sync = changeset.change_syncs.find_by('sync_logs._id' => id)
20
23
  change_sync.sync_logs.find(id)
21
24
  end
25
+
26
+ private
27
+
28
+ def update_change_sync
29
+ change_sync.run_after = if succeeded_at_changed?
30
+ nil
31
+ elsif errored_at_changed?
32
+ # wait exponentially longer between retries the more it fails
33
+ errored_at + (change_sync.sync_logs.length**4).minutes
34
+ elsif started_at_changed?
35
+ started_at + 1.hour
36
+ end
37
+ end
38
+
39
+ def save_change_sync
40
+ change_sync.save! if change_sync.run_after_changed?
41
+ end
22
42
  end
@@ -23,14 +23,15 @@ class Syncinator
23
23
  name
24
24
  end
25
25
 
26
- def startable_changesets(retry_after = nil)
27
- retry_after ||= 1.hour.ago
28
-
29
- Changeset.nor(
30
- :change_syncs.elem_match => {syncinator_id: id, :'sync_logs.succeeded_at'.ne => nil}
31
- ).or(
32
- {:change_syncs.elem_match => {syncinator_id: id, :sync_logs.in => [nil, []]}},
33
- {:change_syncs.elem_match => {syncinator_id: id, :sync_logs.elem_match => {:started_at.lt => retry_after, succeeded_at: nil}}}
26
+ def unfinished_changesets
27
+ Changeset.where(
28
+ :change_syncs.elem_match => {syncinator_id: id, :run_after.ne => nil}
29
+ ).order_by(created_at: :asc)
30
+ end
31
+
32
+ def startable_changesets
33
+ Changeset.where(
34
+ :change_syncs.elem_match => {syncinator_id: id, :run_after.lt => Time.now }
34
35
  ).order_by(created_at: :asc)
35
36
  end
36
37
 
@@ -1,3 +1,3 @@
1
1
  module TrogdirModels
2
- VERSION = '0.7.4'
2
+ VERSION = '0.7.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trogdir_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Crownoble