standard-file 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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