Gem Version Code Climate Build Status Dependency Status

Listable collections

Makes collections accessible from a string list in rails.

Why

I did this gem to:

  • Easily manage collections from input text field.
  • Track changes like dirty module in activerecord.
  • Have callbacks like has_many associations.

Install

Put this line in your Gemfile:

gem 'listable_collections'

Then bundle:

$ bundle

Usage

Associations

If you want to list a has_many association:

class Shop < ActiveRecord::Base

  has_many :products

  list :products, attribute: :name

end

Associated records won't be touched but changes will be tracked using the following helpers:

shop.products.map(&:name) => ['iPhone']
shop.product_list => 'iPhone'

shop.product_list = 'iPod,iMac'
shop.products.map(&:name) => ['iPhone']

shop.added_products_to_list => ['iMac']
shop.removed_products_from_list => ['iPod']

NOTE: Is recommended to do this check before save all at once and not dynamically to avoid multiple queries.

Attributes

If you want to list an array attribute:

class Product < ActiveRecord::Base

  serialize :sizes, Array

  list :sizes

end

The attribute will be synced and chances will be tracked using the following helpers:

product.sizes => ['64GB']
product.size_list => '64GB'

product.size_list = '32GB,128GB'
product.sizes => ['32GB','128GB']

product.added_sizes_to_list => ['128GB']
product.removed_sizes_from_list => ['64GB']

In some cases you may need to run some logic after changes, you can use callbacks for it:

class Shop < ActiveRecord::Base

  has_many :product

  list :products, attribute: :name, after_add: :product_added, after_remove: :product_removed

  def product_added(name)
    # Some logic
  end

  def product_removed(name)
    # Some logic
  end

end

Credits

This gem is maintained and funded by mmontossi.

License

It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.