Skip to content

myabc/schema_plus_pg_indexes

 
 

Repository files navigation

Gem Version Build Status Coverage Status Dependency Status

schema_plus_pg_indexes

Schema_plus_pg_indexes adds into ActiveRecord support for some additional PostgreSQL index features: expressions, operator classes, and case-insensitive indexes:

t.string :last_name,  index: { expression: 'upper(last_name)' }
t.string :last_name,  index: { operator_class: 'varchar_pattern_ops' }
t.string :last_name,  index: { with: :address, operator_class: {last_name: 'varchar_pattern_ops', address: 'text_pattern_ops' }
t.string :last_name,  index: { case_sensitive: false }

t.index expression: 'upper(last_name)', name: 'my_index' # no column given, must give a name

Case insensitivity is a shorthand for the expression lower(last_name)

The ActiveRecord::ConnectionAdapters::IndexDefinition object has the corresponding methods defined on it: #expression, #operator_classes and #case_sensitive?

Schema_plus_pg_indexes is part of the SchemaPlus family of Ruby on Rails extension gems.

Installation

As usual:

gem "schema_plus_pg_indexes"                # in a Gemfile
gem.add_dependency "schema_plus_pg_indexes" # in a .gemspec

Deprecations

SchemaPlus 1.8.x provided some options and accessors that are now available in rails 4.2, in slightly different form. SchemaPlusPgIndexes supports the SchemaPlus 1.8.x form but issues deprecation warnings in favor of the rails form:

  • Index definition deprecates these options:

    • :conditions => :where
    • :kind => :using
  • IndexDefinition deprecates accessors:

    • #conditions in favor of #where
    • #kind in favor of #using.to_s

Compatibility

schema_plus_pg_indexes is tested on

  • ruby 2.1.5 with activerecord 4.2, using postgresql

History

  • v0.1.12 - Missing require
  • v0.1.11 - Explicit gem dependencies
  • v0.1.10 - Upgrade to schmea_plus_core 1.0
  • v0.1.9 - Bug fix: multiple expression indexes (#8)
  • v0.1.8 - Bug fix: expression with operator class (#7)
  • v0.1.7 - Bug fix: mix of columns & expressions (#5)
  • v0.1.6 - Bug fix: operator class & multiple columns (#4). Thanks to @nbudin
  • v0.1.5 - Bug fix: t.index without column in change_table
  • v0.1.1 through v0.1.4 - Conform to schema_dev updates
  • v0.1.0 - Initial release

Development & Testing

Are you interested in contributing to schema_plus_pg_indexes? Thanks! Please follow the standard protocol: fork, feature branch, develop, push, and issue pull request.

Some things to know about to help you develop and test:

  • schema_dev: SchemaPlus::PgIndexes uses schema_dev to facilitate running rspec tests on the matrix of ruby, activerecord, and database versions that the gem supports, both locally and on travis-ci

    To to run rspec locally on the full matrix, do:

      $ schema_dev bundle install
      $ schema_dev rspec
    

    You can also run on just one configuration at a time; For info, see schema_dev --help or the schema_dev README.

    The matrix of configurations is specified in schema_dev.yml in the project root.

  • schema_plus_core: SchemaPlus::PgIndexes uses the SchemaPlus::Core API that provides middleware callback stacks to make it easy to extend ActiveRecord's behavior. If that API is missing something you need for your contribution, please head over to schema_plus_core and open an issue or pull request.
  • schema_monkey: SchemaPlus::PgIndexes is implemented as a schema_monkey client, using schema_monkey's convention-based protocols for extending ActiveRecord and using middleware stacks.

About

Adds support in ActiveRecord for PostgreSQL index expressions and operator classes, as well as a shorthand for case-insensitive indexes

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%