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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 138c096e8cf4805d270b506a26f127f1ca68d05a
4
- data.tar.gz: 5534d042571eb8001f3f9046b349470dc2cf1d87
3
+ metadata.gz: 8c3ec9f9dc2eb693b021aab24c83cc09f56c2d14
4
+ data.tar.gz: e0961b8b0502b22d7e51366ea88e33a49ee88003
5
5
  SHA512:
6
- metadata.gz: f75ec0d54b65d887db42fbf6e116885ace0aa19dbe36e2d699229d41ca4d9e79c9f28f46933cf0015ea52e6e80ff8fb0494cc62f8694c3bf061cd22a34d4f16d
7
- data.tar.gz: df7cb437abbd77d92213734b52559a76fb86e9134d9b942b10516f67eff99595b6b6bb2a6ef0a6bfe07a4bd88f26c582703bd4b2e2c1aad605182a171d46970d
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.1.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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SynchronizedModel
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -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
@@ -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.1.1
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-21 00:00:00.000000000 Z
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