synced 1.0.4 → 1.0.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: c71b2841c8fd03bb702daf3b1def631351cce6c1
4
- data.tar.gz: 70fae9dcf236a28c404ba8ddf4ab81c1ff348676
3
+ metadata.gz: bcd4edd03dc87fc6cd5cd837340cb752a417c4ff
4
+ data.tar.gz: d99b69c0ef5dbc59ac1ba882e4615e0079e46456
5
5
  SHA512:
6
- metadata.gz: a6bf3bc61e324ee4217cb8fce81f7d1b08cc2640f82e6d89f95f063ca2a1f1fc106cd21396395980855a102e860f0438ad2b9c38a10af0b4e0426f93e561bdc4
7
- data.tar.gz: 492f92534e2da64b14ef9b6d114c1f6833171260e1a83a545b5627cd60b0968cb1a7039054adaf259883eef11b76733d5c7f2bd7b4a2b5e599314ec4662b6cf6
6
+ metadata.gz: 581410ff985c089f7e2a7de047f8b6d5b229330cefc7d84d3b63d5817c3c48b5df64820e486048125780c49df7b51e11509027ea452b368b75865ba9cd7b1e2a
7
+ data.tar.gz: 738dc68aae7c8f6aee54ed15b340345b48c96ee461ecb077a837a606d839591f09928bd4422df79403d7e28133d636bc278bb8d8b59d4ad67b3868473f292d31
@@ -29,15 +29,18 @@ module Synced
29
29
  # to remove: :mark_as_missing.
30
30
  # @option options [Array|Hash] globalized_attributes: A list of attributes
31
31
  # which will be mapped with their translations.
32
+ # @option options [Time|Proc] initial_sync_since: A point in time from which
33
+ # objects will be synchronized on first synchronization.
34
+ # Works only for partial (updated_since param) synchronizations.
32
35
  def synced(options = {})
33
36
  options.symbolize_keys!
34
37
  options.assert_valid_keys(:associations, :data_key, :fields,
35
- :globalized_attributes, :id_key, :include, :local_attributes, :mapper,
36
- :only_updated, :remove, :synced_all_at_key)
38
+ :globalized_attributes, :id_key, :include, :initial_sync_since,
39
+ :local_attributes, :mapper, :only_updated, :remove, :synced_all_at_key)
37
40
  class_attribute :synced_id_key, :synced_all_at_key, :synced_data_key,
38
41
  :synced_local_attributes, :synced_associations, :synced_only_updated,
39
42
  :synced_mapper, :synced_remove, :synced_include, :synced_fields,
40
- :synced_globalized_attributes
43
+ :synced_globalized_attributes, :synced_initial_sync_since
41
44
  self.synced_id_key = options.fetch(:id_key, :synced_id)
42
45
  self.synced_all_at_key = options.fetch(:synced_all_at_key,
43
46
  synced_column_presence(:synced_all_at))
@@ -53,6 +56,8 @@ module Synced
53
56
  self.synced_fields = options.fetch(:fields, [])
54
57
  self.synced_globalized_attributes = options.fetch(:globalized_attributes,
55
58
  [])
59
+ self.synced_initial_sync_since = options.fetch(:initial_sync_since,
60
+ nil)
56
61
  include Synced::HasSyncedData
57
62
  end
58
63
 
@@ -101,7 +106,8 @@ module Synced
101
106
  associations: synced_associations,
102
107
  only_updated: synced_only_updated,
103
108
  mapper: synced_mapper,
104
- globalized_attributes: synced_globalized_attributes
109
+ globalized_attributes: synced_globalized_attributes,
110
+ initial_sync_since: synced_initial_sync_since
105
111
  })
106
112
  Synced::Synchronizer.new(self, options).perform
107
113
  end
@@ -39,6 +39,9 @@ module Synced
39
39
  # mapping remote objects attributes into local object attributes
40
40
  # @option options [Array|Hash] globalized_attributes: A list of attributes
41
41
  # which will be mapped with their translations.
42
+ # @option options [Time|Proc] initial_sync_since: A point in time from which
43
+ # objects will be synchronized on first synchronization.
44
+ # Works only for partial (updated_since param) synchronizations.
42
45
  def initialize(model_class, options = {})
43
46
  @model_class = model_class
44
47
  @scope = options[:scope]
@@ -58,6 +61,7 @@ module Synced
58
61
  @remote_objects = Array(options[:remote]) unless options[:remote].nil?
59
62
  @request_performed = false
60
63
  @globalized_attributes = attributes_as_hash(options[:globalized_attributes])
64
+ @initial_sync_since = options[:initial_sync_since]
61
65
  end
62
66
 
63
67
  def perform
@@ -185,14 +189,24 @@ module Synced
185
189
  options[:include] += @include
186
190
  end
187
191
  options[:fields] = @fields if @fields.present?
188
- options[:updated_since] = minimum_updated_at if updated_since_enabled?
192
+ options[:updated_since] = updated_since if updated_since_enabled?
189
193
  options[:auto_paginate] = true
190
194
  end
191
195
  end
192
196
 
193
- def minimum_updated_at
194
- instrument("minimum_updated_at.synced") do
195
- relation_scope.minimum(@synced_all_at_key)
197
+ def updated_since
198
+ instrument("updated_since.synced") do
199
+ [relation_scope.minimum(@synced_all_at_key),
200
+ initial_sync_since].compact.min
201
+ end
202
+ end
203
+
204
+ def initial_sync_since
205
+ if @initial_sync_since.respond_to?(:call)
206
+ @initial_sync_since.arity == 0 ? @initial_sync_since.call :
207
+ @initial_sync_since.call(@scope)
208
+ else
209
+ @initial_sync_since
196
210
  end
197
211
  end
198
212
 
@@ -217,7 +231,7 @@ module Synced
217
231
  end
218
232
 
219
233
  def remove_relation
220
- if @only_updated
234
+ if @only_updated && @request_performed
221
235
  relation_scope.where(id_key => deleted_remote_objects_ids)
222
236
  else
223
237
  relation_scope.where.not(id_key => remote_objects_ids)
@@ -1,3 +1,3 @@
1
1
  module Synced
2
- VERSION = "1.0.4"
2
+ VERSION = "1.0.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synced
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastien Grosjean
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-13 00:00:00.000000000 Z
12
+ date: 2014-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -192,4 +192,3 @@ signing_key:
192
192
  specification_version: 4
193
193
  summary: Keep your BookingSync Application synced with BookingSync.
194
194
  test_files: []
195
- has_rdoc: