module ActiveFedora::Model

def self.class_exists?(class_name)

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

def self.classname_from_uri(uri)

Takes a Fedora URI for a cModel and returns classname, namespace
def self.classname_from_uri(uri)
  local_path = uri.split('/')[1]
  parts = local_path.split(':')
  return parts[-1].split(/_/).map(&:camelize).join('::'), parts[0]
end

def self.from_class_uri(uri)

Returns:
  • (Class, False) - the class of the model or false, if it does not exist
def self.from_class_uri(uri)
  model_value, pid_ns = classname_from_uri(uri)
  raise "model URI incorrectly formatted: #{uri}" unless model_value
  unless class_exists?(model_value)
    logger.warn "#{model_value} is not a real class"
    return false
  end
  if model_value.include?("::")
    result = eval(model_value)
  else
    result = Kernel.const_get(model_value)
  end
  unless result.nil?
    model_ns = (result.respond_to? :pid_namespace) ? result.pid_namespace : ContentModel::CMODEL_NAMESPACE
    if model_ns != pid_ns
      logger.warn "Model class namespace '#{model_ns}' does not match uri: '#{uri}'"
    end
  end
  result
end

def self.included(klass) # :nodoc:

:nodoc:
def self.included(klass) # :nodoc:
  klass.extend(ClassMethods)
end

def create_property_getter(property) # :nodoc:

:nodoc:
def create_property_getter(property) # :nodoc:
  class_eval <<-END, __FILE__, __LINE__
      def #{property.name}
        attribute_get("#{property.name}")
      end
      END
end

def create_property_setter(property)# :nodoc:

:nodoc:
def create_property_setter(property)# :nodoc:
  class_eval <<-END, __FILE__, __LINE__  
      def #{property.name}=(value)
        attribute_set("#{property.name}", value)
      end
      END
end