synchronized_model 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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