synchronisable 0.0.4 → 0.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 +4 -4
- data/lib/synchronisable/data_builder.rb +5 -5
- data/lib/synchronisable/gateway.rb +24 -0
- data/lib/synchronisable/synchronizer.rb +21 -2
- data/lib/synchronisable/version.rb +1 -1
- data/lib/synchronisable/worker.rb +3 -2
- data/spec/dummy/app/gateways/gateway_base.rb +5 -5
- data/spec/dummy/app/synchronizers/break_convention_team_synchronizer.rb +1 -4
- data/spec/dummy/app/synchronizers/match_synchronizer.rb +1 -4
- data/spec/dummy/app/synchronizers/player_synchronizer.rb +1 -4
- data/spec/dummy/app/synchronizers/stage_synchronizer.rb +1 -4
- data/spec/dummy/app/synchronizers/tournament_synchronizer.rb +1 -4
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 670f61c0f12b85b365a456735ad8a8c9d67ba37b
|
4
|
+
data.tar.gz: 2ab99ead8df5badb9fef3ee54d3343d5748826f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f929b28fb870bc097bf8c3e28895ed16bebd2f2403cbb4570e6d1b8afcaf729f518116411ecc2f38a13864329510c8b1ab3f09d7ae491fbcc4e44fbe94a880e1
|
7
|
+
data.tar.gz: 03c0b36a7b6a56022faa4b0adff9b5d6003315a5148778541ff6ba90f65bb57f4826213eaf328ea2974894ccea3b3f2feae543a1680f297323b42c69e722d215
|
@@ -18,9 +18,9 @@ module Synchronisable
|
|
18
18
|
|
19
19
|
result = case input
|
20
20
|
when ->(i) { i.empty? }
|
21
|
-
@synchronizer.fetch
|
21
|
+
@synchronizer.fetch
|
22
22
|
when ->(i) { i.remote_id? }
|
23
|
-
@synchronizer.find
|
23
|
+
@synchronizer.find(data)
|
24
24
|
when ->(i) { i.local_id? }
|
25
25
|
find_by_local_id(data)
|
26
26
|
when ->(i) { i.array_of_ids? }
|
@@ -29,19 +29,19 @@ module Synchronisable
|
|
29
29
|
result = data.dup
|
30
30
|
end
|
31
31
|
|
32
|
-
[result].flatten
|
32
|
+
[result].flatten.compact
|
33
33
|
end
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
37
|
def find_by_array_of_ids(input)
|
38
38
|
records = find_imports(input.element_class.name, input.data)
|
39
|
-
records.map { |r| @synchronizer.find
|
39
|
+
records.map { |r| @synchronizer.find(r.remote_id) }
|
40
40
|
end
|
41
41
|
|
42
42
|
def find_by_local_id(id)
|
43
43
|
import = @model.find_by(id: id).try(:import)
|
44
|
-
import ? @synchronizer.find
|
44
|
+
import ? @synchronizer.find(import.remote_id) : nil
|
45
45
|
end
|
46
46
|
|
47
47
|
private
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Synchronisable
|
2
|
+
class Gateway
|
3
|
+
attr_reader :synchronizer
|
4
|
+
|
5
|
+
def initialize(synchronizer)
|
6
|
+
@synchronizer = synchronizer
|
7
|
+
end
|
8
|
+
|
9
|
+
def fetch
|
10
|
+
not_implemented :fetch
|
11
|
+
end
|
12
|
+
|
13
|
+
def find(id)
|
14
|
+
not_implemented :find
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def not_implemented(method)
|
20
|
+
raise NotImplementedError,
|
21
|
+
I18n.t('errors.gateway_method_missing', method: method)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -38,8 +38,13 @@ module Synchronisable
|
|
38
38
|
# of this particular model.
|
39
39
|
attribute :logger, default: -> { Synchronisable.logging[:logger] }
|
40
40
|
|
41
|
+
# Gateway to be used to get the remote data
|
42
|
+
#
|
43
|
+
# @see Synchronizable::Gateway
|
44
|
+
attribute :gateway
|
45
|
+
|
41
46
|
# Lambda that returns array of hashes with remote attributes.
|
42
|
-
method :
|
47
|
+
method :fetcher, default: -> { [] }
|
43
48
|
|
44
49
|
# Lambda that returns a hash with remote attributes by id.
|
45
50
|
#
|
@@ -49,7 +54,7 @@ module Synchronisable
|
|
49
54
|
# remote_source.find { |h| h[:foo_id] == id } }
|
50
55
|
# end
|
51
56
|
# end
|
52
|
-
method :
|
57
|
+
method :finder, default: -> (id) { nil }
|
53
58
|
|
54
59
|
# Lambda, that will be called before synchronization
|
55
60
|
# of each record and its assocations.
|
@@ -95,6 +100,20 @@ module Synchronisable
|
|
95
100
|
method :after_association_sync
|
96
101
|
|
97
102
|
class << self
|
103
|
+
def fetch
|
104
|
+
data = fetcher.()
|
105
|
+
data.present? ? data : gateway_instance.try(:fetch)
|
106
|
+
end
|
107
|
+
|
108
|
+
def find(id)
|
109
|
+
data = finder.(id)
|
110
|
+
data.present? ? data : gateway_instance.try(:find, id)
|
111
|
+
end
|
112
|
+
|
113
|
+
def gateway_instance
|
114
|
+
@gateway_instance ||= gateway.try(:new, self)
|
115
|
+
end
|
116
|
+
|
98
117
|
# Extracts remote id from given attribute hash.
|
99
118
|
#
|
100
119
|
# @param attrs [Hash] remote attributes
|
@@ -36,7 +36,8 @@ module Synchronisable
|
|
36
36
|
#
|
37
37
|
# @param data [Array<Hash>] array of hashes with remote attriutes.
|
38
38
|
# If not specified worker will try to get the data
|
39
|
-
# using `fetch` lambda/proc
|
39
|
+
# using defined gateway class or `fetch` lambda/proc
|
40
|
+
# defined in corresponding synchronizer
|
40
41
|
#
|
41
42
|
# @return [Synchronisable::Context] synchronization context
|
42
43
|
def run(data)
|
@@ -133,7 +134,7 @@ module Synchronisable
|
|
133
134
|
log_info("synchronizing association with id: #{id}", :blue)
|
134
135
|
|
135
136
|
@synchronizer.with_association_sync_callbacks(source, id, association) do
|
136
|
-
attrs = association.model.synchronizer.find
|
137
|
+
attrs = association.model.synchronizer.find(id)
|
137
138
|
Worker.run(association.model, [attrs], { :parent => source })
|
138
139
|
end
|
139
140
|
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
require 'synchronisable/gateway'
|
2
|
+
|
3
|
+
class GatewayBase < Synchronisable::Gateway
|
2
4
|
def id_key
|
3
|
-
|
4
|
-
I18n.t('errors.gateway_method_missing', method: 'id_key')
|
5
|
+
not_implemented :id_key
|
5
6
|
end
|
6
7
|
|
7
8
|
def source
|
8
|
-
|
9
|
-
I18n.t('errors.gateway_method_missing', method: 'source')
|
9
|
+
not_implemented :source
|
10
10
|
end
|
11
11
|
|
12
12
|
def fetch
|
@@ -1,6 +1,4 @@
|
|
1
1
|
class BreakConventionTeamSynchronizer < Synchronisable::Synchronizer
|
2
|
-
@gateway = TeamGateway.new
|
3
|
-
|
4
2
|
has_many :players
|
5
3
|
|
6
4
|
remote_id :maet_id
|
@@ -11,6 +9,5 @@ class BreakConventionTeamSynchronizer < Synchronisable::Synchronizer
|
|
11
9
|
)
|
12
10
|
except :ignored_1, :ignored_2
|
13
11
|
|
14
|
-
|
15
|
-
fetch { @gateway.fetch }
|
12
|
+
gateway TeamGateway
|
16
13
|
end
|
@@ -1,6 +1,4 @@
|
|
1
1
|
class MatchSynchronizer < Synchronisable::Synchronizer
|
2
|
-
@gateway = MatchGateway.new
|
3
|
-
|
4
2
|
has_one :team, key: 'home_team_id'
|
5
3
|
has_one :team, key: 'away_team_id'
|
6
4
|
|
@@ -23,8 +21,7 @@ class MatchSynchronizer < Synchronisable::Synchronizer
|
|
23
21
|
|
24
22
|
destroy_missed true
|
25
23
|
|
26
|
-
|
27
|
-
fetch { @gateway.fetch }
|
24
|
+
gateway MatchGateway
|
28
25
|
|
29
26
|
after_sync do |source|
|
30
27
|
MatchPlayer::REF_TYPES.each do |ref_type|
|
@@ -1,6 +1,4 @@
|
|
1
1
|
class PlayerSynchronizer < Synchronisable::Synchronizer
|
2
|
-
@gateway = PlayerGateway.new
|
3
|
-
|
4
2
|
remote_id :player_id
|
5
3
|
|
6
4
|
mappings(
|
@@ -14,6 +12,5 @@ class PlayerSynchronizer < Synchronisable::Synchronizer
|
|
14
12
|
)
|
15
13
|
only :team_id, :first_name, :last_name
|
16
14
|
|
17
|
-
|
18
|
-
fetch { @gateway.fetch }
|
15
|
+
gateway PlayerGateway
|
19
16
|
end
|
@@ -1,6 +1,4 @@
|
|
1
1
|
class StageSynchronizer < Synchronisable::Synchronizer
|
2
|
-
@gateway = StageGateway.new
|
3
|
-
|
4
2
|
has_many :matches
|
5
3
|
|
6
4
|
remote_id :stage_id
|
@@ -15,6 +13,5 @@ class StageSynchronizer < Synchronisable::Synchronizer
|
|
15
13
|
|
16
14
|
except :ignored_1, :ignored_2
|
17
15
|
|
18
|
-
|
19
|
-
fetch { @gateway.fetch }
|
16
|
+
gateway StageGateway
|
20
17
|
end
|
@@ -1,6 +1,4 @@
|
|
1
1
|
class TournamentSynchronizer < Synchronisable::Synchronizer
|
2
|
-
@gateway = TournamentGateway.new
|
3
|
-
|
4
2
|
has_many :stages
|
5
3
|
|
6
4
|
remote_id :tour_id
|
@@ -15,6 +13,5 @@ class TournamentSynchronizer < Synchronisable::Synchronizer
|
|
15
13
|
|
16
14
|
only :name, :beginning, :ending
|
17
15
|
|
18
|
-
|
19
|
-
fetch { @gateway.fetch }
|
16
|
+
gateway TournamentGateway
|
20
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synchronisable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasiliy Yorkin
|
@@ -319,6 +319,7 @@ files:
|
|
319
319
|
- lib/synchronisable/dsl/macro/method.rb
|
320
320
|
- lib/synchronisable/error_handler.rb
|
321
321
|
- lib/synchronisable/exceptions.rb
|
322
|
+
- lib/synchronisable/gateway.rb
|
322
323
|
- lib/synchronisable/input_descriptor.rb
|
323
324
|
- lib/synchronisable/locale/en.yml
|
324
325
|
- lib/synchronisable/locale/ru.yml
|