class Dropkiq::DropClassAnalyzer

Attributes

active_record_class[RW]
drop_method_params[RW]
liquid_drop_class[RW]
table_name[RW]

Public Class Methods

new(liquid_drop_class) click to toggle source
# File lib/dropkiq/drop_class_analyzer.rb, line 6
def initialize(liquid_drop_class)
  self.liquid_drop_class = liquid_drop_class
end

Public Instance Methods

analyze() click to toggle source
# File lib/dropkiq/drop_class_analyzer.rb, line 10
def analyze
  self.active_record_class = find_active_record_class
  self.active_record_class ||= find_active_record_class_from_shim

  if active_record_class.blank?
    puts "WARNING: No ActiveRecord Class found for #{liquid_drop_class.name} (skipping)"
    return
  end

  self.table_name = active_record_class.table_name
  self.drop_method_params = find_drop_method_params
end
to_param() click to toggle source
# File lib/dropkiq/drop_class_analyzer.rb, line 23
def to_param
  return {} if active_record_class.blank?

  {
    "#{table_name}" => {
      "methods" => drop_method_params
    }
  }
end

Private Instance Methods

find_active_record_class() click to toggle source
# File lib/dropkiq/drop_class_analyzer.rb, line 35
def find_active_record_class
  namespaces = liquid_drop_class.name.split("::")
  class_name = namespaces.pop
  non_drop   = class_name.gsub('Drop', '')

  namespaces.push(non_drop).join("::").constantize
rescue NameError
end
find_active_record_class_from_shim() click to toggle source

github.com/Shopify/liquid/pull/568

# File lib/dropkiq/drop_class_analyzer.rb, line 45
def find_active_record_class_from_shim
  namespaces = liquid_drop_class.name.split("::")
  namespaces[0..-2].join("::").constantize
rescue NameError
end
find_drop_method_params() click to toggle source
# File lib/dropkiq/drop_class_analyzer.rb, line 51
def find_drop_method_params
  default_methods  = (Liquid::Drop.instance_methods + Object.instance_methods)
  instance_methods = (liquid_drop_class.instance_methods - default_methods)

  sample_instance = active_record_class.first
  sample_drop = begin
    liquid_drop_class.new(sample_instance)
  rescue
  end

  instance_methods.inject({}) do |hash, method|
    analyzer = Dropkiq::DropMethodAnalyzer.new(self, method, sample_drop)
    analyzer.analyze
    hash.merge!(analyzer.to_param)
  end.sort_by { |key| key }.to_h
end