Sha256: 33a484cfd88627b1d82aaa2ddad8da4b3551550f420025c493b340bf32f9602e

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

require 'active_record_schema/field'
require 'active_record_schema/index'
require 'active_record_schema/join'
require 'active_record_schema/schema_diff'

module ActiveRecordSchema
  class Schema
    include ActiveRecordSchema::SchemaDiff

    attr_reader :model, :fields, :indexes, :joins
    
    def initialize(model)
      @model   = model
      @fields  = ActiveSupport::OrderedHash.new
      @indexes = {}
      @joins   = {}
    end
    
    def hierarchy_fields
      if @hierarchy_fields
        @hierarchy_fields
      else
        @hierarchy_fields ||= ActiveSupport::OrderedHash.new
        self.ancestors.select { |c| c.is_a?(Class) && c.superclass == ActiveRecord::Base }.reverse_each do |klass|
          @hierarchy_fields = @hierarchy_fields.merge(klass.fields)
        end      
      end
    end    

    def field_names
      fields.values.map(&:name).map(&:to_s)
    end
    
    def add_field(column, type, options)
      @fields[:"#{column}"]  = Field.new(column, type, options)
    end

    def add_index(column, options = {})
      @indexes[:"#{column}"] = Index.new(column, options)
    end
    
    def add_join(table, key1, key2, index = true)
      @joins[:"#{table}"] = Join.new(table, key1, key2) 
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_record_schema-0.5.8 lib/active_record_schema/schema.rb