Sha256: b5291d8cc4a7f8d34ffaf9b4426bf27f648acda2e7da5e969ef9183f2a094ea7

Contents?: true

Size: 1.58 KB

Versions: 14

Compression:

Stored size: 1.58 KB

Contents

module Sequel
  module Schema
    class Generator
      def initialize(db, table_name, &block)
        @db = db
        @table_name = table_name
        @columns = []
        @indexes = []
        @primary_key = nil
        instance_eval(&block)
      end
      
      def method_missing(type, name = nil, opts = nil)
        name ? column(name, type, opts) : super
      end
      
      def primary_key_name
        @primary_key ? @primary_key[:name] : nil
      end
      
      def primary_key(name, *args)
        @primary_key = @db.serial_primary_key_options.merge({
          :name => name
        })
        
        if opts = args.pop
          opts = {:type => opts} unless opts.is_a?(Hash)
          if type = args.pop
            opts.merge!(:type => type)
          end
          @primary_key.merge!(opts)
        end
        @primary_key
      end
      
      def column(name, type, opts = nil)
        @columns << {:name => name, :type => type}.merge(opts || {})
      end
      
      def foreign_key(name, opts = nil)
        @columns << {:name => name, :type => :integer}.merge(opts || {})
      end
      
      def has_column?(name)
        @columns.each {|c| return true if c[:name] == name}
        false
      end
      
      def index(columns, opts = nil)
        columns = [columns] unless columns.is_a?(Array)
        @indexes << {:columns => columns}.merge(opts || {})
      end
      
      def create_info
        if @primary_key && !has_column?(@primary_key[:name])
          @columns.unshift(@primary_key)
        end
        [@table_name, @columns, @indexes]
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
sequel-0.3.3 lib/sequel/schema/schema_generator.rb
sequel-0.3.1 lib/sequel/schema/schema_generator.rb
sequel-0.3.4.1 lib/sequel/schema/schema_generator.rb
sequel-0.3.0.1 lib/sequel/schema/schema_generator.rb
sequel-0.4.0 lib/sequel-core/schema/schema_generator.rb
sequel-0.4.1.1 lib/sequel/schema/schema_generator.rb
sequel-0.3.0 lib/sequel/schema/schema_generator.rb
sequel-0.3.2 lib/sequel/schema/schema_generator.rb
sequel-0.4.2.2 lib/sequel/schema/schema_generator.rb
sequel-0.4.1 lib/sequel/schema/schema_generator.rb
sequel-0.4.1.2 lib/sequel/schema/schema_generator.rb
sequel-0.4.1.3 lib/sequel/schema/schema_generator.rb
sequel-0.4.2.1 lib/sequel/schema/schema_generator.rb
sequel-0.4.2 lib/sequel/schema/schema_generator.rb