class ActiveFedora::ModelClassifier
Translate model names to classes
Attributes
class_names[R]
default[R]
Public Class Methods
class_from_string(full_class_name, container_class = Kernel)
click to toggle source
Convenience method for getting class constant based on a string @example
ActiveFedora::Model.class_from_string("Om") => Om ActiveFedora::Model.class_from_string("ActiveFedora::RdfNode::TermProxy") => ActiveFedora::RdfNode::TermProxy
@example Search within ActiveFedora::RdfNode for a class called “TermProxy”
ActiveFedora::Model.class_from_string("TermProxy", ActiveFedora::RdfNode) => ActiveFedora::RdfNode::TermProxy
# File lib/active_fedora/model_classifier.rb, line 13 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
new(class_names, default: ActiveFedora::Base)
click to toggle source
# File lib/active_fedora/model_classifier.rb, line 30 def initialize(class_names, default: ActiveFedora::Base) @class_names = Array(class_names) @default = default end
Public Instance Methods
best_model(opts = {})
click to toggle source
Select the “best” class from the list of class names. We define
the "best" class as: - a subclass of the given default, base class - preferring subclasses over the parent class
# File lib/active_fedora/model_classifier.rb, line 48 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
models()
click to toggle source
Convert all the provided class names to class instances
# File lib/active_fedora/model_classifier.rb, line 37 def models class_names.map do |uri| classify(uri) end.compact end
Private Instance Methods
class_exists?(class_name)
click to toggle source
# File lib/active_fedora/model_classifier.rb, line 69 def class_exists?(class_name) return false if class_name.empty? klass = class_name.constantize klass.is_a?(Class) rescue NameError false end
classify(model_value)
click to toggle source
# File lib/active_fedora/model_classifier.rb, line 61 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