class WisperPlus::Railtie

Public Class Methods

subscribe(model_klass, subscriber_klass) click to toggle source
# File lib/wisper_plus/railtie.rb, line 5
def self.subscribe(model_klass, subscriber_klass)
  model_class = model_klass
  if model_class != 'Global'
    begin
      model_class = model_class.constantize
      if !model_class.ancestors.include?(ApplicationRecord)
        # puts "🔸 #{model_class} is not an ActiveRecord model".yellow
        return
      end
      if !model_class.ancestors.include?(Wisper::Publisher)
        puts "🔸 #{model_class} is not including Wisper::ActiveRecord::Publisher. Cannot Subscribe #{subscriber_klass.magenta}.".yellow
        return
      end
    rescue NameError
      model_class = model_class.split("::")
      model_class.pop
      if model_class.size.positive?
        model_class = model_class.join('::')
        retry
      else
        puts "🔸 #{model_klass} not found"
        return
      end
    end
  end

  begin
    subscriber_klass = subscriber_klass.constantize
  rescue NameError
    puts "🔸 #{subscriber_klass} not found"
  end

  begin
    if model_class != 'Global'
      model_class.subscribe(subscriber_klass.new, async: false)
    else
      Wisper.subscribe(subscriber_klass.new)
    end
  rescue NoMethodError
    puts "🔸 #{model_class}.subscribe() not found"
  end

  if Rails.env.development?
    puts "🔹 #{subscriber_klass.to_s.magenta} => #{model_class.to_s.blue}"
  end
end