class DescendantsLoader::ClassFinder

Public Class Methods

class_name_from_path(path) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 12
def class_name_from_path(path)
  ary = path.split('/')
  ary.map! { |s| s.gsub(/\.rb/, '') }
  ary.slice!(0, index_of_base_dir(ary) + 1)

  ary.map(&:camelize).join('::')
end
where_is(klass) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 4
def where_is(klass)
  find_related_source_files(klass).each do |f|
    return f if class_and_source_eq?(klass, f)
  end

  nil
end

Private Class Methods

class_and_source_eq?(klass, file) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 46
def class_and_source_eq?(klass, file)
  class_name_from_path(file) == klass.to_s
end
index_of_base_dir(path_array) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 50
def index_of_base_dir(path_array)
  base_dirs = %w(lib models workers schedulers controllers mailers)
  index = base_dirs.map { |dir| path_array.index(dir) }.compact.first

  fail ArgumentError, 'Not a valid file path. Expect to ' \
    'have a base known directory.' if index.nil?

  index
end
list_class_methods(klass) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 34
def list_class_methods(klass)
  klass.methods(false).map { |m| klass.method(m) }
end
list_instance_methods(klass) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 38
def list_instance_methods(klass)
  klass.instance_methods(false).map { |m| klass.instance_method(m) }
end
list_methods(klass) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 28
def list_methods(klass)
  list_class_methods(klass) +
    list_instance_methods(klass) +
    list_private_methods(klass)
end
list_private_methods(klass) click to toggle source
# File lib/descendants_loader/class_finder.rb, line 42
def list_private_methods(klass)
  klass.new.private_methods(false).map { |m| klass.instance_method(m) }
end