synchronized_model 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +8 -1
- data/lib/synchronized_model/publish.rb +16 -0
- data/lib/synchronized_model/railtie.rb +8 -0
- data/lib/synchronized_model/version.rb +1 -1
- data/lib/synchronized_model.rb +6 -1
- data/lib/tasks/publish.rake +34 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3911727754d2946a62692b62f6eac4cba5db203b
|
4
|
+
data.tar.gz: 72ccddc961cada06f0bdc72a0221b4a37f165344
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92d8e60acbccc7fa41b6c52da80cd21ce86ce4c33ca9024f0141a27d0d51a32224a9654756aa0e53f8530d667ec272cfd12f7a99eec6d28055fbd763dbe162a4
|
7
|
+
data.tar.gz: a2eb50e4213a1baf39b2afc6d367ea21d5a0290cf710e7623eaa05f408505635910a67f910b4d747976fd0dfe1edd328a306420071b1bb23eb8bcc588ef6f3c5
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -22,7 +22,14 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
### Seeding New Apps with Table data
|
26
|
+
- Run `rake synchronized_model:publish[ClassName]`
|
27
|
+
|
28
|
+
### Resyncing for an added column
|
29
|
+
- Run `rake synchronized_model:publish[ClassName, true]`
|
30
|
+
- It will touch each record ensuring it's updated in the receivers and not ignored
|
31
|
+
as a duplicate
|
32
|
+
|
26
33
|
|
27
34
|
## Development
|
28
35
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SynchronizedModel
|
4
|
+
class Publish
|
5
|
+
attr_reader :model
|
6
|
+
|
7
|
+
def initialize(model)
|
8
|
+
@model = model
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
message = SynchronizedModel::Message.new(model).call
|
13
|
+
SynchronizedModel.publish_handler.call(message)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/synchronized_model.rb
CHANGED
@@ -1,19 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'synchronized_model/version'
|
4
|
+
require 'synchronized_model/railtie' if defined?(Rails)
|
4
5
|
|
5
6
|
module SynchronizedModel
|
6
7
|
autoload :MessageReceive, 'synchronized_model/message_receive'
|
7
8
|
autoload :Message, 'synchronized_model/message'
|
8
9
|
autoload :ModelMessage, 'synchronized_model/model_message'
|
10
|
+
autoload :Publish, 'synchronized_model/publish'
|
9
11
|
autoload :PublishMixin, 'synchronized_model/publish_mixin'
|
10
12
|
autoload :Support, 'synchronized_model/support'
|
11
13
|
|
12
14
|
class << self
|
13
|
-
attr_accessor :logger, :receive_resource_classes
|
15
|
+
attr_accessor :logger, :publish_handler, :receive_resource_classes
|
14
16
|
# ```ruby
|
15
17
|
# SynchronizedModel.configure do |config|
|
16
18
|
# config.logger = Logger.new(STDOUT)
|
19
|
+
# config.publish_handler = proc do |message|
|
20
|
+
# Circuitry.publish("wm-otto-models", message)
|
21
|
+
# end
|
17
22
|
# config.receive_resource_classes =
|
18
23
|
# {
|
19
24
|
# 'item': Item,
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
namespace :synchronized_model do
|
3
|
+
desc 'Publish all records for a model'
|
4
|
+
task :publish,
|
5
|
+
%i(model_class_string touch_records) => :environment do |_t, args|
|
6
|
+
logger = Logger.new(STDOUT)
|
7
|
+
model_class = get_model_class(args.model_class_string)
|
8
|
+
|
9
|
+
logger.info "#{model_class.count} #{args.model_class_string} to publish"
|
10
|
+
model_class.find_each do |model|
|
11
|
+
if args.touch_records == 'true'
|
12
|
+
logger.info "Touching UUID: #{model.try(:uuid)}, ID: #{model.id}"
|
13
|
+
model.update(updated_at: Time.zone.now)
|
14
|
+
end
|
15
|
+
logger.info "Publishing UUID: #{model.try(:uuid)}, ID: #{model.id}"
|
16
|
+
|
17
|
+
SynchronizedModel::Publish.new(model).call
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_model_class(model_class_string)
|
22
|
+
model_class = Module.const_get(model_class_string)
|
23
|
+
|
24
|
+
unless model_class.ancestors.include? ActiveRecord::Base
|
25
|
+
fail "#{model_class} is not an ActiveRecord model"
|
26
|
+
end
|
27
|
+
|
28
|
+
unless model_class.ancestors.include? SynchronizedModel::PublishMixin
|
29
|
+
fail "#{model_class} is not a publishable model"
|
30
|
+
end
|
31
|
+
|
32
|
+
model_class
|
33
|
+
end
|
34
|
+
end
|
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.3.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-
|
11
|
+
date: 2018-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -133,9 +133,12 @@ files:
|
|
133
133
|
- lib/synchronized_model/message.rb
|
134
134
|
- lib/synchronized_model/message_receive.rb
|
135
135
|
- lib/synchronized_model/model_message.rb
|
136
|
+
- lib/synchronized_model/publish.rb
|
136
137
|
- lib/synchronized_model/publish_mixin.rb
|
138
|
+
- lib/synchronized_model/railtie.rb
|
137
139
|
- lib/synchronized_model/support.rb
|
138
140
|
- lib/synchronized_model/version.rb
|
141
|
+
- lib/tasks/publish.rake
|
139
142
|
- synchronized_model.gemspec
|
140
143
|
homepage: https://github.com/westernmilling/synchronized_model
|
141
144
|
licenses:
|