Sha256: 3930f52903d107222f93a8937e30917b7c782c8a715221aca074d164d507b1a0

Contents?: true

Size: 1.93 KB

Versions: 38

Compression:

Stored size: 1.93 KB

Contents

module Dataset
  module Record # :nodoc:
    
    # A mechanism to cache information about an ActiveRecord class to speed
    # things up a bit for insertions, finds, and method generation.
    class Meta # :nodoc:
      attr_reader :class_name, :columns, :record_class, :table_name
      
      # Provides information necessary to insert STI classes correctly for
      # later reading.
      delegate :name, :inheritance_column, :sti_name, :to => :record_class
      
      def initialize(record_class)
        @record_class     = record_class
        @class_name       = record_class.name
        @table_name       = record_class.table_name
        @columns          = record_class.columns
      end
      
      def id_cache_key
        @id_cache_key ||= table_name
      end
      
      def inheriting_record?
        !record_class.descends_from_active_record?
      end
      
      def timestamp_columns
        @timestamp_columns ||= begin
          timestamps = %w(created_at created_on updated_at updated_on)
          columns.select do |column|
            timestamps.include?(column.name)
          end
        end
      end
      
      def id_finder_names
        @id_finder_names ||= begin
          names = descendants.collect {|c| finder_name c}
          names.uniq.collect {|n| "#{n}_id".to_sym}
        end
      end
      
      def model_finder_names
        @record_finder_names ||= descendants.collect {|c| finder_name(c).pluralize.to_sym}.uniq
      end
      
      def to_s
        "#<RecordMeta: #{table_name}>"
      end
      
      def descendants
        if record_class.respond_to?(:self_and_descendents_from_active_record)
          record_class.self_and_descendents_from_active_record
        else
          record_class.self_and_descendants_from_active_record
        end
      end
      
      def finder_name(klass)
        klass.name.underscore.gsub('/', '_').sub(/^(\w)_/, '\1').gsub(/_(\w)_/, '_\1')
      end
    end
    
  end
end

Version data entries

38 entries across 38 versions & 5 rubygems

Version Path
aiwilliams-dataset-1.3.0 lib/dataset/record/meta.rb
aiwilliams-dataset-1.3.1 lib/dataset/record/meta.rb
radiant-1.1.4 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.1.3 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.1.2 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.1.1 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.1.0 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.1.0.rc1 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.1.0.beta vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.0.1 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.1.0.alpha vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.0.0 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.0.0.rc5 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.0.0.rc4 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.0.0.rc3 vendor/plugins/dataset/lib/dataset/record/meta.rb
kajam-1.0.3.rc2 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.0.0.rc2 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiant-1.0.0.rc1 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiantcms-couchrest_model-0.2.4 vendor/plugins/dataset/lib/dataset/record/meta.rb
radiantcms-couchrest_model-0.2.2 vendor/plugins/dataset/lib/dataset/record/meta.rb