Sha256: c0f6fb3ff090851a9a5f61bdbd89147726f1adf151bc66e94d00bc0dae1edc03

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

require 'active_support/concern'
require 'active_support/core_ext/hash/keys'

module Schemaless
  #
  # Extend ActiveRecord for #index
  #
  module Indexes
    extend ActiveSupport::Concern

    # Schemaless ActiveRecord indexes
    module ClassMethods

      def schemaless_indexes
        @schemaless_indexes ||= []
      end

      #
      # index(*)
      #
      #     index :name
      #     index [:one, :other]
      #     index :name, unique: true
      #
      #
      def index(*params)
        config = params.extract_options!
        name = config.delete(:name)
        schemaless_indexes <<
          ::Schemaless::Index.new(params, name, config)
      end

      #
      # Get all indexes in a schemaless way
      #
      def current_indexes
        ::ActiveRecord::Base.connection.indexes(table_name).map do |i|
          opts = ::Schemaless::Index::VALID_OPTS.reduce({}) do |a, e|
            i.send(e) ? a.merge(e => i.send(e)) : a
          end
          ::Schemaless::Index.new(i.columns, i.name, opts)
        end
      end
    end
  end # ActiveRecord
end # Schemaless

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
schemaless-0.0.3 lib/schemaless/ar/indexes.rb