module OhMyLog::ObserverFactory

Public Class Methods

activate_observers() click to toggle source

this will initialize the observes logic

# File lib/oh_my_log/observer_factory.rb, line 5
def self.activate_observers
  #should raise an error if there are no observers -> "Build the observer list using the task"
  Rails.application.eager_load!

  build_activerecord_obs if defined?(ActiveRecord)
  build_mongoid_obs if defined?(Mongoid)
end
generate_collection() click to toggle source
# File lib/oh_my_log/observer_factory.rb, line 16
def self.generate_collection
  Rails.application.eager_load!

  #rebuild folder if it's already there
  FileUtils.rm_rf(Rails.root + "app/models/observers/oh_my_log") if File.directory?(Rails.root + "app/models/observers/oh_my_log")
  FileUtils.mkdir_p(Rails.root + "app/models/observers/oh_my_log")
  generate_collection_for(OHMYLOG_ORM.to_s.classify.constantize)
end
remove_collection() click to toggle source
# File lib/oh_my_log/observer_factory.rb, line 25
def self.remove_collection
  FileUtils.rm_rf(Rails.root + "app/models/observers/oh_my_log") if File.directory?(Rails.root + "app/models/observers/oh_my_log")
end

Private Class Methods

available_models_for(klass) click to toggle source
# File lib/oh_my_log/observer_factory.rb, line 67
def self.available_models_for(klass)
  config_rule = Log.configuration_rule
  config_models = Log.configuration_models
  models = []
  if klass.to_s == 'ActiveRecord'
    models = ActiveRecord::Base.subclasses.collect {|type| type.name}
    models = models + ApplicationRecord.subclasses.collect {|type| type.name} if defined?(ApplicationRecord)
  elsif klass.to_s == 'Mongoid'
    models = Mongoid.models.collect {|type| type.name}
  end
  #reject modules
  models = models.reject {|model| model.include?("::") || model.include?("HABTM") || model.include?("Mongoid")}
  case config_rule
  when "ONLY"
    return models.select {|model| config_models.include?(model)}
  when "ALL"
    return models
  when "EXCEPT"
    return models.reject {|model| config_models.include?(model)}
  end
end
build_activerecord_obs() click to toggle source
# File lib/oh_my_log/observer_factory.rb, line 31
def self.build_activerecord_obs
  supported_models = supported_models_for(ActiveRecord)
  supported_models.each {|class_name| ActiveRecord::Base.add_observer class_name.instance}
end
build_mongoid_obs() click to toggle source
# File lib/oh_my_log/observer_factory.rb, line 36
def self.build_mongoid_obs
  supported_models = supported_models_for(Mongoid)
  supported_models.each {|class_name| ::Mongoid::Document.add_observer class_name.instance}
end
generate_collection_for(klass) click to toggle source
# File lib/oh_my_log/observer_factory.rb, line 41
def self.generate_collection_for(klass)
  models = available_models_for(klass)
  models.each do |model|
    model_file = File.join("#{Rails.root}/app", "models", "observers", "oh_my_log", model.underscore + "_observer.rb")
    p "Generated #{model_file}"
    File.open(model_file, "w+") do |f|
      f << "class #{model + "Observer"} < OhMyLog::#{klass}Observer\nend"
    end
  end
end
supported_models_for(klass) click to toggle source
# File lib/oh_my_log/observer_factory.rb, line 52
def self.supported_models_for(klass)
  supported_models = []
  models = available_models_for(klass)
  models.each do |model|
    if File.file?(Rails.root + "app/models/observers/oh_my_log/#{model.underscore}_observer.rb")
      supported_models << ('::' + model + "Observer").constantize
    else
      p "You didn't create an observer for #{model.constantize}"
    end
  end
  return supported_models
end