Sha256: 33015ed2ce1012b365f3cd1669f193eba1fc9e35d5485d3d5edb211f8aa664f9

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 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
      #
      # Holder for all fields dynamic
      #
      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.5 lib/schemaless/ar/indexes.rb