Sha256: 04bbb827230ca988b52c31af895be71f6ee8b80c31f8627eabc7f11de6eb9ab8

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

module Schemaless
  #
  # Stores indexes
  #
  class Index
    attr_accessor :fields, :name, :opts
    VALID_OPTS = [:unique, :orders]

    def initialize(fields, name = nil, opts = {})
      @fields = [fields].flatten
      @fields = @fields.first if @fields.size == 1
      @name = name || opts[:name]
      @opts = opts.select { |_k, v| v.present?  }
      @opts.merge!(name: @name) if @name
    end

    def opts_text
      txt = opts.map { |k, v| "#{k}: #{v}" }.join(', ')
      txt.empty? ? '' : ", #{txt}"
    end

    def fields_text
      @fields.inspect
    end

    def to_s
      name
    end

    def ==(other)
      name == other.name
    end

    #
    # Add Indexes
    #
    def add!(table)
      return if Schemaless.sandbox
      ::ActiveRecord::Migration.add_index(table.name, fields, opts)
    end

    #
    # Delete Indexes
    #
    def remove!(table)
      return if Schemaless.sandbox
      key = name ? { name: name } : { column: fields }
      ::ActiveRecord::Migration.remove_index(table.name, key)
    end

    #
    # Change Indexes
    #
    def change!(table)
      return if Schemaless.sandbox
      ::ActiveRecord::Migration.change_index(table.name, name, type, opts)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
schemaless-0.0.5 lib/schemaless/index.rb
schemaless-0.0.3 lib/schemaless/index.rb