synced 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/synced/model.rb +8 -3
- data/lib/synced/result_presenter.rb +26 -0
- data/lib/synced/strategies/check.rb +14 -4
- data/lib/synced/strategies/full.rb +14 -2
- data/lib/synced/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a83a3c02371bb0151640c39b2b7c529c2b499460
|
4
|
+
data.tar.gz: 21c79d0624f4802be4927d254b1ac0ab6765d33d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0c6e56b085199cd488d15b91ae1d1c789195e0711c8cd60f87ec8b199b5befa37a3fbde58671d4b72e14699a69014d54496650de31d237b5da19a2b84a41383
|
7
|
+
data.tar.gz: db536ee0ff73b25bd64f1245a5c60ce0236a6f670bb1a62c1041b8fab5d3b722cd593e9ef6ae23a1c169586e0373e0e388880a824913ccacd8bc8528e2c8d89e
|
data/lib/synced/model.rb
CHANGED
@@ -34,16 +34,19 @@ module Synced
|
|
34
34
|
# Works only for partial (updated_since param) synchronizations.
|
35
35
|
# @option options [Array|Hash] delegate_attributes: Given attributes will be defined
|
36
36
|
# on synchronized object and delegated to synced_data Hash
|
37
|
+
# @option options [Hash] search_params: Given attributes and their values
|
38
|
+
# which will be passed to api client to perform search
|
37
39
|
def synced(options = {})
|
38
40
|
options.symbolize_keys!
|
39
41
|
options.assert_valid_keys(:associations, :data_key, :fields,
|
40
42
|
:globalized_attributes, :id_key, :include, :initial_sync_since,
|
41
43
|
:local_attributes, :mapper, :only_updated, :remove, :synced_all_at_key,
|
42
|
-
:delegate_attributes)
|
44
|
+
:delegate_attributes, :search_params)
|
43
45
|
class_attribute :synced_id_key, :synced_all_at_key, :synced_data_key,
|
44
46
|
:synced_local_attributes, :synced_associations, :synced_only_updated,
|
45
47
|
:synced_mapper, :synced_remove, :synced_include, :synced_fields,
|
46
|
-
:synced_globalized_attributes, :synced_initial_sync_since, :synced_delegate_attributes
|
48
|
+
:synced_globalized_attributes, :synced_initial_sync_since, :synced_delegate_attributes,
|
49
|
+
:synced_search_params
|
47
50
|
self.synced_id_key = options.fetch(:id_key, :synced_id)
|
48
51
|
self.synced_all_at_key = options.fetch(:synced_all_at_key,
|
49
52
|
synced_column_presence(:synced_all_at))
|
@@ -62,6 +65,7 @@ module Synced
|
|
62
65
|
self.synced_initial_sync_since = options.fetch(:initial_sync_since,
|
63
66
|
nil)
|
64
67
|
self.synced_delegate_attributes = options.fetch(:delegate_attributes, [])
|
68
|
+
self.synced_search_params = options.fetch(:search_params, {})
|
65
69
|
include Synced::DelegateAttributes
|
66
70
|
include Synced::HasSyncedData
|
67
71
|
end
|
@@ -98,10 +102,11 @@ module Synced
|
|
98
102
|
def synchronize(options = {})
|
99
103
|
options.symbolize_keys!
|
100
104
|
options.assert_valid_keys(:api, :fields, :include, :remote, :remove,
|
101
|
-
:scope, :strategy)
|
105
|
+
:scope, :strategy, :search_params)
|
102
106
|
options[:remove] = synced_remove unless options.has_key?(:remove)
|
103
107
|
options[:include] = Array(synced_include) unless options.has_key?(:include)
|
104
108
|
options[:fields] = Array(synced_fields) unless options.has_key?(:fields)
|
109
|
+
options[:search_params] = synced_search_params unless options.has_key?(:search_params)
|
105
110
|
options.merge!({
|
106
111
|
id_key: synced_id_key,
|
107
112
|
synced_data_key: synced_data_key,
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Synced
|
2
|
+
module Strategies
|
3
|
+
class Check
|
4
|
+
class Result
|
5
|
+
def to_s
|
6
|
+
%Q{
|
7
|
+
#{line "synced_class", model_class}
|
8
|
+
#{line "options", options}
|
9
|
+
#{line "changed count", changed.size}
|
10
|
+
#{line "additional count", additional.size}
|
11
|
+
#{line "missing count", missing.size}
|
12
|
+
#{line "changed", changed}
|
13
|
+
#{line "additional", additional}
|
14
|
+
#{line "missing", missing}
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def line(label, value)
|
21
|
+
"#{label}:".ljust(18) + "#{value}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -7,7 +7,7 @@ module Synced
|
|
7
7
|
|
8
8
|
def initialize(model_class, options = {})
|
9
9
|
super
|
10
|
-
@result = Result.new
|
10
|
+
@result = Result.new(model_class, options)
|
11
11
|
end
|
12
12
|
|
13
13
|
# Makes a DRY run of full synchronization. It checks and collects objects which
|
@@ -29,7 +29,9 @@ module Synced
|
|
29
29
|
local_object.attributes = globalized_attributes_mapping(remote,
|
30
30
|
local_object.translations.translated_locales)
|
31
31
|
end
|
32
|
-
|
32
|
+
if local_object.changed?
|
33
|
+
result.changed << [{ id: local_object.id }, local_object.changes]
|
34
|
+
end
|
33
35
|
else
|
34
36
|
result.missing << remote
|
35
37
|
end
|
@@ -37,11 +39,19 @@ module Synced
|
|
37
39
|
result
|
38
40
|
end
|
39
41
|
|
42
|
+
# If we check model which uses cancel instead of destroy, we skip canceled
|
43
|
+
# when searching for additional objects by searching in :visible scope
|
44
|
+
def relation_scope
|
45
|
+
default_remove_strategy == :cancel_all ? super.visible : super
|
46
|
+
end
|
47
|
+
|
40
48
|
# Represents result of synchronization integrity check
|
41
49
|
class Result
|
42
|
-
attr_accessor :changed, :missing, :additional
|
50
|
+
attr_accessor :model_class, :options, :changed, :missing, :additional
|
43
51
|
|
44
|
-
def initialize
|
52
|
+
def initialize(model_class = nil, options = {})
|
53
|
+
@model_class = model_class
|
54
|
+
@options = options
|
45
55
|
@changed, @missing, @additional = [], [], []
|
46
56
|
end
|
47
57
|
|
@@ -63,6 +63,7 @@ module Synced
|
|
63
63
|
@perform_request = options[:remote].nil?
|
64
64
|
@remote_objects = Array(options[:remote]) unless @perform_request
|
65
65
|
@globalized_attributes = synced_attributes_as_hash(options[:globalized_attributes])
|
66
|
+
@search_params = options[:search_params]
|
66
67
|
end
|
67
68
|
|
68
69
|
def perform
|
@@ -147,7 +148,7 @@ module Synced
|
|
147
148
|
closest = [@scope, @scope.class, @model_class].find do |object|
|
148
149
|
object.respond_to?(:api)
|
149
150
|
end
|
150
|
-
closest.try(:api) || raise(MissingAPIClient.new(@scope, @model_class))
|
151
|
+
@api ||= closest.try(:api) || raise(MissingAPIClient.new(@scope, @model_class))
|
151
152
|
end
|
152
153
|
|
153
154
|
def local_object_by_remote_id(remote_id)
|
@@ -181,7 +182,18 @@ module Synced
|
|
181
182
|
end
|
182
183
|
options[:fields] = @fields if @fields.present?
|
183
184
|
options[:auto_paginate] = true
|
184
|
-
end
|
185
|
+
end.merge(search_params)
|
186
|
+
end
|
187
|
+
|
188
|
+
def search_params
|
189
|
+
Hash[@search_params.map do |param, value|
|
190
|
+
final_value = value.respond_to?(:call) ? search_param_value_for_lambda(value) : value
|
191
|
+
[param, final_value]
|
192
|
+
end]
|
193
|
+
end
|
194
|
+
|
195
|
+
def search_param_value_for_lambda(func)
|
196
|
+
func.arity == 0 ? func.call : func.call(@scope)
|
185
197
|
end
|
186
198
|
|
187
199
|
def resource_name
|
data/lib/synced/version.rb
CHANGED
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.1.
|
4
|
+
version: 1.1.1
|
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: 2015-06
|
12
|
+
date: 2015-07-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -151,6 +151,20 @@ dependencies:
|
|
151
151
|
- - "~>"
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: 4.0.2
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: pry
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
154
168
|
description: Keep your BookingSync Application synced with BookingSync.
|
155
169
|
email:
|
156
170
|
- dev@bookingsync.com
|
@@ -167,6 +181,7 @@ files:
|
|
167
181
|
- lib/synced/has_synced_data.rb
|
168
182
|
- lib/synced/model.rb
|
169
183
|
- lib/synced/rails.rb
|
184
|
+
- lib/synced/result_presenter.rb
|
170
185
|
- lib/synced/strategies/check.rb
|
171
186
|
- lib/synced/strategies/full.rb
|
172
187
|
- lib/synced/strategies/updated_since.rb
|