standard-file 0.2.1 → 0.2.2

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: b119105d8253ec0363b7eacef2f93de2f15ad39c
4
- data.tar.gz: fce8a2904b7b5cb291a0d0588e21de6074adfcce
3
+ metadata.gz: ab9c9510debb2155ec3271b1997a11ff3997df23
4
+ data.tar.gz: 802ae9e8e6b97ded28df5561f1c60f4bd3d27339
5
5
  SHA512:
6
- metadata.gz: 3029ce76229b771a8820819ea790ea32d66c01c821d68c72a30280b0a43e66936d7ad78c9b43a0512ac13b16e7b12bd8ff5fe2a27e868d08c5d139ffe744d1bd
7
- data.tar.gz: a85108a38988fc9a126bc7751a86434c592a8305180fe45e6e5ee4b7fc6cf320eb86200f707aea1c3522c85c696d4f258b9070f2cd8270452d1b46ae9c2a3888
6
+ metadata.gz: d87fae4c82dc1d61a8bcb6546588a7321d1de94e1dd5d02929b37b97614c16b2735e7bb43d019213f44eb7fb1052313755a280043d29bb32d53b2d86cc1a623f
7
+ data.tar.gz: 9fadc2eb44affaaf1747f972698ba7fe6a9eaa650f9dc8bf725cc7c34740c84f5ecf41a3303e9cb3ac68a369d3c35b84fa7e53b82575aac902cd12dfa7a1dc91
@@ -24,12 +24,12 @@ module StandardFile
24
24
 
25
25
  retrieved_items, cursor_token = _sync_get(in_sync_token, in_cursor_token, limit).to_a
26
26
  last_updated = DateTime.now
27
- saved_items, unsaved = _sync_save(item_hashes)
27
+ saved_items, unsaved_items = _sync_save(item_hashes)
28
28
  if saved_items.length > 0
29
29
  last_updated = saved_items.sort_by{|m| m.updated_at}.last.updated_at
30
30
  end
31
31
 
32
- last_updated = check_for_conflicts(saved_items, retrieved_items, last_updated)
32
+ check_for_conflicts(saved_items, retrieved_items, unsaved_items)
33
33
 
34
34
  # add 1 microsecond to avoid returning same object in subsequent sync
35
35
  last_updated = (last_updated.to_time + 1/100000.0).to_datetime.utc
@@ -38,13 +38,13 @@ module StandardFile
38
38
  return {
39
39
  :retrieved_items => retrieved_items,
40
40
  :saved_items => saved_items,
41
- :unsaved => unsaved,
41
+ :unsaved => unsaved_items,
42
42
  :sync_token => sync_token,
43
43
  :cursor_token => cursor_token
44
44
  }
45
45
  end
46
46
 
47
- def check_for_conflicts(saved_items, retrieved_items, last_updated)
47
+ def check_for_conflicts(saved_items, retrieved_items, unsaved_items)
48
48
  # conflicts occur when you are trying to save an item for which there is a pending change already
49
49
  min_conflict_interval = 20
50
50
 
@@ -53,24 +53,21 @@ module StandardFile
53
53
  conflicts = saved_ids & retrieved_ids # & is the intersection
54
54
  # saved items take precedence, retrieved items are duplicated with a new uuid
55
55
  conflicts.each do |conflicted_uuid|
56
- # if changes are greater than min_conflict_interval seconds apart, create conflicted copy, otherwise discard conflicted
56
+ # if changes are greater than min_conflict_interval seconds apart,
57
+ # push the retrieved item in the unsaved array so that the client can duplicate it
57
58
  saved = saved_items.find{|i| i.uuid == conflicted_uuid}
58
59
  conflicted = retrieved_items.find{|i| i.uuid == conflicted_uuid}
59
60
  if (saved.updated_at - conflicted.updated_at).abs > min_conflict_interval
60
- puts "\n\n\n Creating conflicted copy of #{saved.uuid}\n\n\n"
61
- dup = conflicted.dup
62
- dup.user = conflicted.user
63
- dup.save
64
- dup_json = dup.as_json({})
65
- dup_json[:conflict_of] = conflicted.uuid
66
- retrieved_items.push(dup_json)
67
-
68
- last_updated = dup.updated_at
61
+ # puts "\n\n\n Creating conflicted copy of #{saved.uuid}\n\n\n"
62
+
63
+ unsaved_items.push({
64
+ :item => conflicted,
65
+ :error => {:tag => "sync_conflict"}
66
+ })
67
+
68
+ retrieved_items.delete(conflicted)
69
69
  end
70
- retrieved_items.delete(conflicted)
71
70
  end
72
-
73
- return last_updated
74
71
  end
75
72
 
76
73
  def destroy_items(uuids)
@@ -1,3 +1,3 @@
1
1
  module StandardFile
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: standard-file
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Standard File
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-10 00:00:00.000000000 Z
11
+ date: 2017-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails