class Everett::Subject

Constants

CALLBACKS

Public Class Methods

[](model) click to toggle source
# File lib/everett/subject.rb, line 14
def [](model)
  instances.fetch(model) { |key| instances[key] = new(model) }
end
new(model) click to toggle source
# File lib/everett/subject.rb, line 25
def initialize(model)
  @model = model
  @observers = ::Set.new
end

Private Class Methods

instances() click to toggle source
# File lib/everett/subject.rb, line 20
def instances
  @instances ||= {}
end

Public Instance Methods

add_observer(observer) click to toggle source
# File lib/everett/subject.rb, line 30
def add_observer(observer)
  return false if @observers.include?(observer)

  callbacks = CALLBACKS.select { |callback| observer.respond_to?(callback) }
  return false if callbacks.empty?

  # TODO: Rewrite the following line in the form of passing an observer to callbacks
  # if after_{create,update,destroy}_commit comes to call an identically named method
  # of a callback object (currently it always calls #after_commit).
  callbacks.each { |callback| @model.public_send(callback) { observer.public_send(callback, self) } }
  !!@observers.add(observer)
end