Module: PubSubModelSync::PublisherConcern::ClassMethods

Defined in:
lib/pub_sub_model_sync/publisher_concern.rb

Instance Method Summary collapse

Instance Method Details

#ps_after_action(crud_actions, method_name = nil, &block) ⇒ Object

Parameters:

  • crud_actions (Symbol, Array<Symbol>)

    : :create, :update, :destroy

  • method_name (Symbol, optional) (defaults to: nil)

    method to be called



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/pub_sub_model_sync/publisher_concern.rb', line 62

def ps_after_action(crud_actions, method_name = nil, &block)
  actions = Array(crud_actions).map(&:to_sym)
  callback = ->(action) { method_name ? send(method_name, action) : instance_exec(action, &block) }
  ps_cache_publish_callbacks({ actions: actions, callback: callback })
  actions.each do |action|
    if action == :destroy
      after_destroy { instance_exec(action, &callback) }
    else
      send(:after_commit, on: action) { instance_exec(action, &callback) }
    end
  end
end

#ps_cache_publish_callbacks(new_value = nil) ⇒ Object



75
76
77
78
79
# File 'lib/pub_sub_model_sync/publisher_concern.rb', line 75

def ps_cache_publish_callbacks(new_value = nil)
  @ps_cache_publish_callbacks ||= []
  @ps_cache_publish_callbacks << new_value if new_value
  @ps_cache_publish_callbacks
end

#ps_class_publish(data, action:, as_klass: nil, headers: {}) ⇒ Object

Publishes a class level notification via pubsub

Parameters:

  • data (Hash)

    : Data of the notification

  • action (Symbol)

    : action name of the notification

  • as_klass (String, default current class name) (defaults to: nil)

    : Class name of the notification

  • headers (Hash, optional) (defaults to: {})

    : header settings (More in Payload.headers)



55
56
57
58
# File 'lib/pub_sub_model_sync/publisher_concern.rb', line 55

def ps_class_publish(data, action:, as_klass: nil, headers: {})
  klass = PubSubModelSync::MessagePublisher
  klass.publish_data((as_klass || name).to_s, data, action.to_sym, headers: headers)
end