Sha256: 2a02ee61151c112f61cc1d50f78e871f12362f6522d904fd11dd1f235dbe383c

Contents?: true

Size: 1.6 KB

Versions: 4

Compression:

Stored size: 1.6 KB

Contents

module ActiveRecord
  module MTI
    module ModelSchema

      def self.prepended(base)
        base.extend(ClassMethods)
      end

      module ClassMethods
        # Computes and returns a table name according to default conventions.
        def compute_table_name
          if self != base_class
            # Nested classes are prefixed with singular parent table name.
            if superclass < Base && !superclass.abstract_class?
              contained = superclass.table_name
              contained = contained.singularize if superclass.pluralize_table_names
              contained += '/'
            end

            potential_table_name = "#{full_table_name_prefix}#{contained}#{decorated_table_name(name)}#{full_table_name_suffix}"

            if check_inheritance_of(potential_table_name)
              potential_table_name
            else
              superclass.table_name
            end
          else
            super
          end
        end

        def full_table_name_suffix #:nodoc:
          super
        rescue NoMethodError
          full_table_name_rescue(:table_name_suffix)
        end

        private

        def full_table_name_rescue(which)
          (parents.detect{ |p| p.respond_to?(which) } || self).send(which)
        end

        # Guesses the table name, but does not decorate it with prefix and suffix information.
        def decorated_table_name(class_name = base_class.name)
          super
        rescue NoMethodError
          table_name = class_name.to_s.underscore
          pluralize_table_names ? table_name.pluralize : table_name
        end
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active_record-mti-0.3.2 lib/active_record/mti/model_schema.rb
active_record-mti-0.3.0.pre.rc4 lib/active_record/mti/model_schema.rb
active_record-mti-0.3.0.pre.rc3 lib/active_record/mti/model_schema.rb
active_record-mti-0.3.0.pre.rc2 lib/active_record/mti/model_schema.rb