Sha256: 902cf1bdcba13ef7c3e3ac9f5ea996decb6065ca41bcb4b1837496f8b248b1de
Contents?: true
Size: 1.18 KB
Versions: 2
Compression:
Stored size: 1.18 KB
Contents
# frozen_string_literal: true module PubSubModelSync class Publisher attr_accessor :attrs, :actions, :klass, :as_klass def initialize(attrs, klass, actions = nil, as_klass = nil) @attrs = attrs @klass = klass @actions = actions || %i[create update destroy] @as_klass = as_klass || klass end # Builds the payload with model information defined for :action (:create|:update|:destroy) def payload(model, action) headers = { key: [model.class.name, action, model.id].join('/') } PubSubModelSync::Payload.new(payload_data(model), payload_attrs(model, action), headers) end private def payload_data(model) source_props = @attrs.map { |prop| prop.to_s.split(':').first } data = model.as_json(only: source_props, methods: source_props) aliased_props = @attrs.select { |prop| prop.to_s.include?(':') } aliased_props.each do |prop| source, target = prop.to_s.split(':') data[target] = data.delete(source) end data.symbolize_keys end def payload_attrs(model, action) { klass: (as_klass || model.class.name).to_s, action: action.to_sym } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
pub_sub_model_sync-0.5.10 | lib/pub_sub_model_sync/publisher.rb |
pub_sub_model_sync-0.5.9.1 | lib/pub_sub_model_sync/publisher.rb |