synchronized_model 0.1.1 → 0.2.0
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/Gemfile.lock +11 -1
- data/lib/synchronized_model/message_receive.rb +28 -0
- data/lib/synchronized_model/model_message.rb +40 -0
- data/lib/synchronized_model/version.rb +1 -1
- data/lib/synchronized_model.rb +20 -0
- data/synchronized_model.gemspec +1 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c3ec9f9dc2eb693b021aab24c83cc09f56c2d14
|
4
|
+
data.tar.gz: e0961b8b0502b22d7e51366ea88e33a49ee88003
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f7cae4eb06d29592f42927a96ffb8f5837be86c647b61f919c4fa65ed969cdeba8351eba9fbb2758f227f917307dd2d17f9d7d919e28b099b3374528aa43b9d
|
7
|
+
data.tar.gz: b3439a0ddd1de47112f4cb041628ba0c0e151d916ee7eb4354a2bc0f264521bda95cc2ffad4cbe8f911694947efcf7a5ff3925812703ace4138f2b868e209917
|
data/Gemfile.lock
CHANGED
@@ -1,19 +1,28 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
synchronized_model (0.
|
4
|
+
synchronized_model (0.2.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
ast (2.4.0)
|
10
|
+
byebug (10.0.2)
|
11
|
+
coderay (1.1.2)
|
10
12
|
diff-lcs (1.3)
|
11
13
|
docile (1.3.1)
|
12
14
|
json (2.1.0)
|
15
|
+
method_source (0.9.0)
|
13
16
|
parallel (1.12.1)
|
14
17
|
parser (2.5.1.0)
|
15
18
|
ast (~> 2.4.0)
|
16
19
|
powerpack (0.1.2)
|
20
|
+
pry (0.11.3)
|
21
|
+
coderay (~> 1.1.0)
|
22
|
+
method_source (~> 0.9.0)
|
23
|
+
pry-byebug (3.6.0)
|
24
|
+
byebug (~> 10.0)
|
25
|
+
pry (~> 0.10)
|
17
26
|
rainbow (3.0.0)
|
18
27
|
rake (10.5.0)
|
19
28
|
rspec (3.7.0)
|
@@ -51,6 +60,7 @@ PLATFORMS
|
|
51
60
|
|
52
61
|
DEPENDENCIES
|
53
62
|
bundler (~> 1.16)
|
63
|
+
pry-byebug
|
54
64
|
rake (~> 10.0)
|
55
65
|
rspec (~> 3.0)
|
56
66
|
rspec_junit_formatter
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module SynchronizedModel
|
3
|
+
class MessageReceive
|
4
|
+
attr_reader :message
|
5
|
+
|
6
|
+
def initialize(message)
|
7
|
+
@message = Hash[message.map { |k, v| [k.to_sym, v] }]
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
model = SynchronizedModel::ModelMessage.new(message).model
|
12
|
+
model.record_timestamps = false
|
13
|
+
if chronological_update?(model)
|
14
|
+
model.save!
|
15
|
+
else
|
16
|
+
log_message = "Outdated message for #{model.class} " \
|
17
|
+
"ID: #{model.id}"
|
18
|
+
SynchronizedModel.logger.info(log_message)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def chronological_update?(model)
|
25
|
+
!(model.updated_at_was && model.updated_at_was >= model.updated_at)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module SynchronizedModel
|
3
|
+
class ModelMessage
|
4
|
+
extend Support
|
5
|
+
@resource_classes = {}
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :resource_classes
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :resource, :payload
|
12
|
+
|
13
|
+
def initialize(message)
|
14
|
+
@resource = message[:resource]
|
15
|
+
@payload = Hash[message[:payload].map { |k, v| [k.to_sym, v] }]
|
16
|
+
end
|
17
|
+
|
18
|
+
def model
|
19
|
+
@model ||= resource_class.from_queue_payload(payload)
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def resource_class
|
25
|
+
SynchronizedModel.receive_resource_classes.fetch(
|
26
|
+
resource.to_sym, NullModel
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
class NullModel
|
31
|
+
def self.from_queue_payload(_payload); NullModel.new; end
|
32
|
+
|
33
|
+
def self.find_by(_hash); nil; end
|
34
|
+
|
35
|
+
def save!; end
|
36
|
+
|
37
|
+
def updated_at; nil; end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/synchronized_model.rb
CHANGED
@@ -3,7 +3,27 @@
|
|
3
3
|
require 'synchronized_model/version'
|
4
4
|
|
5
5
|
module SynchronizedModel
|
6
|
+
autoload :MessageReceive, 'synchronized_model/message_receive'
|
6
7
|
autoload :Message, 'synchronized_model/message'
|
8
|
+
autoload :ModelMessage, 'synchronized_model/model_message'
|
7
9
|
autoload :PublishMixin, 'synchronized_model/publish_mixin'
|
8
10
|
autoload :Support, 'synchronized_model/support'
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_accessor :logger, :receive_resource_classes
|
14
|
+
# ```ruby
|
15
|
+
# SynchronizedModel.configure do |config|
|
16
|
+
# config.logger = Logger.new(STDOUT)
|
17
|
+
# config.receive_resource_classes =
|
18
|
+
# {
|
19
|
+
# 'item': Item,
|
20
|
+
# 'location': Location
|
21
|
+
# }
|
22
|
+
# end
|
23
|
+
# ```
|
24
|
+
def configure
|
25
|
+
yield self
|
26
|
+
true
|
27
|
+
end
|
28
|
+
end
|
9
29
|
end
|
data/synchronized_model.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
27
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
28
|
+
spec.add_development_dependency 'pry-byebug'
|
28
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
29
30
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
30
31
|
spec.add_development_dependency 'rspec_junit_formatter'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synchronized_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Cranston
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry-byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,6 +131,8 @@ files:
|
|
117
131
|
- bin/setup
|
118
132
|
- lib/synchronized_model.rb
|
119
133
|
- lib/synchronized_model/message.rb
|
134
|
+
- lib/synchronized_model/message_receive.rb
|
135
|
+
- lib/synchronized_model/model_message.rb
|
120
136
|
- lib/synchronized_model/publish_mixin.rb
|
121
137
|
- lib/synchronized_model/support.rb
|
122
138
|
- lib/synchronized_model/version.rb
|