Project

attr_array

0.0
No commit activity in last 3 years
No release in over 3 years
A high performance ActiveRecord concern for Rails using the PostgreSQL array type.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

AttrArray

A high performance ActiveRecord concern for Rails using the PostgreSQL array type.

Installation

To install add the line to your Gemfile:

gem 'attr_array'

And bundle install.

Dependencies

AttrArray is developed as a ActiveRecord model concern, therefore it is dependent upon ActiveSupport. It is also developed only for use with PostgreSQL. It may work with other databases, but I haven't tried them.

How To Use

To add AttrArray to a model, include the concern:

class Post < ActiveRecord::Base
  include AttrArray

  attr_array :tags
end

To autoload AttrArray for all models, add the following to an initializer:

require 'attr_array/active_record'

You then don't need to include AttrArray in any model.

Scopes

with_any_#{tag_name}
with_all_#{tag_name}
without_any_#{tag_name}
without_all_#{tag_name}

Class methods

all_#{tag_name}
{tag_name}_cloud

Setup

Add the model attributes you want to use with AttrArray in your migration:

class CreatePost < ActiveRecord::Migration[5.1]
  def change
    create_table :posts do |table|
      table.column :tags, :string, array: true, default: [], index: {using: 'gin'}
      table.column :authors, :string, array: true, default: [], index: {using: 'gin'}
      table.timestamps
    end
  end
end

You can nominate multiple attributes in the attr_array class method:

class Post < ApplicationRecord
  include AttrArray

  attr_array :tags, :authors
end

Usage

@post.tags = ["awesome", "slick"]
@post.authors = ["Roald Dahl"]

Post.with_any_authors("Roald Dahl")
Post.without_any_tags("slick")

Acknowledgements

This gem is based on code from pg_tags. Modified to use ActiveSupport::Concern and doesn't automatically hook into ActiveRecord.

This gem is maintained by Jurgen Jocubeit.

Copyright

Copyright 2017 Brightcommerce, Inc. All rights reserved.