Sha256: 8013e18e414fa0f09425e1ae487a9da7c10a554ab0cb12a9bf55f9bb5fd1de1f

Contents?: true

Size: 1.01 KB

Versions: 4

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true

module PubSubModelSync
  class MessageProcessor
    attr_accessor :data, :klass, :action

    # @param data (Hash): any hash value to deliver
    def initialize(data, klass, action)
      @data = data
      @klass = klass
      @action = action
    end

    def process
      subscribers = filter_subscribers
      subscribers.each { |subscriber| run_subscriber(subscriber) }
    end

    private

    def run_subscriber(subscriber)
      subscriber.eval_message(data)
      log "processed message with: #{[klass, action, data]}"
    rescue => e
      info = [klass, action, data, e.message, e.backtrace]
      log("error processing message: #{info}", :error)
    end

    def filter_subscribers
      PubSubModelSync::Config.subscribers.select do |subscriber|
        subscriber.settings[:from_klass].to_s == klass.to_s &&
          subscriber.settings[:from_action].to_s == action.to_s
      end
    end

    def log(message, kind = :info)
      PubSubModelSync::Config.log message, kind
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pub_sub_model_sync-0.4.2.1 lib/pub_sub_model_sync/message_processor.rb
pub_sub_model_sync-0.4.2 lib/pub_sub_model_sync/message_processor.rb
pub_sub_model_sync-0.4.1 lib/pub_sub_model_sync/message_processor.rb
pub_sub_model_sync-0.4.0 lib/pub_sub_model_sync/message_processor.rb