Sha256: ac3ce44dc4f741f330766040403c096438a3e89ae8e33715b28ee9ce1491c6ec

Contents?: true

Size: 1.37 KB

Versions: 4

Compression:

Stored size: 1.37 KB

Contents

require 'generic_support'
require 'datamapper_support'

module MerbAdmin
  class AbstractModel
    # Returns all models for a given Merb app
    def self.all
      return @models if @models
      @models ||= []
      case Merb.orm
      when :datamapper
        DataMapper::Resource.descendants.each do |m|
          # Remove DataMapperSessionStore because it's included by default
          next if m == Merb::DataMapperSessionStore if Merb.const_defined?(:DataMapperSessionStore)
          model = lookup(m.to_s.to_sym)
          @models << new(model) if model
        end
        @models.sort!{|a, b| a.model.to_s <=> b.model.to_s}
      else
        raise "MerbAdmin does not currently support the #{Merb.orm} ORM"
      end
    end

    # Given a symbol +model_name+, finds the corresponding model class
    def self.lookup(model_name)
      model = const_get(model_name)
      raise "could not find model #{model_name}" if model.nil?
      return model if model.include?(DataMapper::Resource)
      nil
    end

    attr_accessor :model

    def initialize(model)
      model = self.class.lookup(model.camel_case.to_sym) unless model.is_a?(Class)
      @model = model
      self.extend(GenericSupport)
      case Merb.orm
      when :datamapper
        self.extend(DatamapperSupport)
      else
        raise "MerbAdmin does not currently support the #{Merb.orm} ORM"
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
sferik-merb-admin-0.3.2 lib/abstract_model.rb
sferik-merb-admin-0.3.3 lib/abstract_model.rb
sferik-merb-admin-0.3.4 lib/abstract_model.rb
sferik-merb-admin-0.3.6 lib/abstract_model.rb