Sha256: fc80305a2b2d0507af354fb23a90ed7f3e04cd5901bb71ffdd94ed4000c143d7

Contents?: true

Size: 1.33 KB

Versions: 7

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

module PubSubModelSync
  module SubscriberConcern
    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      # @param settings (Hash): { as_klass: nil, actions: nil, id: nil }
      def ps_subscribe(attrs, settings = {})
        as_klass = (settings[:as_klass] || name).to_s
        actions = settings.delete(:actions) || %i[create update destroy]
        settings = settings.merge(attrs: attrs)
        actions.each do |action|
          add_ps_subscriber(as_klass, action, action, false, settings)
        end
      end

      def ps_class_subscribe(action, as_action: nil, as_klass: nil)
        add_ps_subscriber(as_klass, action, as_action, true, {})
      end

      def ps_subscriber(action = :create)
        PubSubModelSync::Config.listeners.select do |listener|
          listener[:klass] == name && listener[:action] == action
        end.last
      end

      private

      def add_ps_subscriber(as_klass, action, as_action, direct_mode, settings)
        listener = {
          klass: name,
          as_klass: (as_klass || name).to_s,
          action: action.to_sym,
          as_action: (as_action || action).to_sym,
          direct_mode: direct_mode,
          settings: settings
        }
        PubSubModelSync::Config.listeners << listener
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pub_sub_model_sync-0.2.4 lib/pub_sub_model_sync/subscriber_concern.rb
pub_sub_model_sync-0.2.3 lib/pub_sub_model_sync/subscriber_concern.rb
pub_sub_model_sync-0.2.2 lib/pub_sub_model_sync/subscriber_concern.rb
pub_sub_model_sync-0.2.1 lib/pub_sub_model_sync/subscriber_concern.rb
pub_sub_model_sync-0.2.0 lib/pub_sub_model_sync/subscriber_concern.rb
pub_sub_model_sync-0.1.5 lib/pub_sub_model_sync/subscriber_concern.rb
pub_sub_model_sync-0.1.4 lib/pub_sub_model_sync/subscriber_concern.rb