module Entangled::Model::ClassMethods

Public Instance Methods

create_hook(name) click to toggle source

Creates callbacks in the extented model

# File lib/entangled/model.rb, line 59
def create_hook(name)
  send :"after_#{name}", -> { publish(name) }
end
default_options() click to toggle source

By default, model updates will be published after_create, after_update, and after_destroy. This behavior can be modified by passing :only or :except options to the entangle class method

# File lib/entangled/model.rb, line 54
def default_options
  [:create, :update, :destroy]
end
entangle(options = {}) click to toggle source

Create after_ callbacks for options

# File lib/entangled/model.rb, line 5
def entangle(options = {})
  # If :only is specified, the options can either
  # be an array or a symbol
  if options[:only].present?

    # If it is a symbol, something like only: :create
    # was passed in, and we need to create a hook
    # only for that one option
    if options[:only].is_a?(Symbol)
      create_hook options[:only]

    # If it is an array, something like only: [:create, :update]
    # was passed in, and we need to create hook for each
    # of these options
    elsif options[:only].is_a?(Array)
      options[:only].each { |option| create_hook option }
    end

  # Instead of :only, :except can be specified; similarly,
  # the options can either be an array or a symbol
  elsif options[:except].present?
    # If it is a symbol, it has to be taken out of the default
    # options. A callback has to be defined for each of the
    # remaining options
    if options[:except].is_a?(Symbol)
      (default_options - [options[:except]]).each do |option|
        create_hook option
      end

    # If it is an array, it also has to be taen out of the
    # default options. A callback then also has to be defined
    # for each of the remaining options
    elsif options[:except].is_a?(Array)
      (default_options - options[:except]).each do |option|
        create_hook option
      end
    end
  else

    # If neither :only nor :except is specified, simply create
    # a callback for each default option
    default_options.each { |option| create_hook option }
  end
end