class ActiveFedora::ModelClassifier

Translate model names to classes

def self.class_from_string(full_class_name, container_class = Kernel)

Other tags:
    Example: Search within ActiveFedora::RdfNode for a class called "TermProxy" -
def self.class_from_string(full_class_name, container_class = Kernel)
  container_class = container_class.name if container_class.is_a? Module
  container_parts = container_class.split('::')
  (container_parts + full_class_name.split('::')).flatten.inject(Kernel) do |mod, class_name|
    if mod == Kernel
      Object.const_get(class_name)
    elsif mod.const_defined? class_name.to_sym
      mod.const_get(class_name)
    else
      container_parts.pop
      class_from_string(class_name, container_parts.join('::'))
    end
  end
end

def best_model(opts = {})

- preferring subclasses over the parent class
- a subclass of the given default, base class
the "best" class as:
Select the "best" class from the list of class names. We define
#
def best_model(opts = {})
  best_model_match = opts.fetch(:default, default)
  models.each do |model_value|
    # If there is an inheritance structure, use the most specific case.
    best_model_match = model_value if best_model_match.nil? || best_model_match > model_value
  end
  best_model_match
end

def class_exists?(class_name)

def class_exists?(class_name)
  return false if class_name.empty?
  klass = class_name.constantize
  klass.is_a?(Class)
rescue NameError
  false
end

def classify(model_value)

def classify(model_value)
  unless class_exists?(model_value)
    ActiveFedora::Base.logger.warn "'#{model_value}' is not a real class"
    return nil
  end
  ActiveFedora::ModelClassifier.class_from_string(model_value)
end

def initialize(class_names, default: ActiveFedora::Base)

def initialize(class_names, default: ActiveFedora::Base)
  @class_names = Array(class_names)
  @default = default
end

def models

Convert all the provided class names to class instances
#
def models
  class_names.map do |uri|
    classify(uri)
  end.compact
end