module PubSubModelSync::PublisherConcern::ClassMethods
Public Instance Methods
ps_after_action(crud_actions, method_name = nil, &block)
click to toggle source
@param crud_actions (Symbol,Array<Symbol>): :create, :update, :destroy @param method_name (Symbol, optional) method to be called
# 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 ps_define_commit_action(action, callback) end end end
ps_cache_publish_callbacks(new_value = nil)
click to toggle source
# 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: {})
click to toggle source
Publishes a class level notification via pubsub @param data (Hash): Data of the notification @param action (Symbol): action name of the notification @param as_klass (String, default current class name): Class name of the notification @param headers (Hash, optional): header settings (More in Payload.headers
)
# 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
Private Instance Methods
ps_define_commit_action(action, callback)
click to toggle source
# File lib/pub_sub_model_sync/publisher_concern.rb, line 83 def ps_define_commit_action(action, callback) if PubSubModelSync::Config.enable_rails4_before_commit # rails 4 compatibility define_method("ps_before_#{action}_commit") { instance_exec(action, &callback) } else commit_name = respond_to?(:before_commit) ? :before_commit : :after_commit send(commit_name, on: action) { instance_exec(action, &callback) } end end
ps_init_transaction_callbacks()
click to toggle source
Initialize calls to start and end pub_sub transactions and deliver all them in the same order
# File lib/pub_sub_model_sync/publisher_concern.rb, line 93 def ps_init_transaction_callbacks start_transaction = lambda do @ps_transaction = PubSubModelSync::MessagePublisher.init_transaction(nil) end before_create start_transaction, prepend: true before_update start_transaction, prepend: true before_destroy start_transaction, prepend: true after_commit { @ps_transaction&.finish } after_rollback(prepend: true) { @ps_transaction&.rollback } end