Skip to content

Latest commit

 

History

History
84 lines (61 loc) · 1.7 KB

README.md

File metadata and controls

84 lines (61 loc) · 1.7 KB

Filtron

Filtron was built to work with Ransack. Ransack uses search predicates to simplify searching and querying your model data. Filtron aims to alias these predicates so your URLs are a little less ugly when filtering your data via GET requests. Take this URL for example:

http://example.com/users?user[first_name_eq]=Lee&user[email_cont]=@gmail

# Controller:
def index
  @users = User.search(params[:user]).result
end

Wouldn't this be nicer?

http://example.com/users?name=Lee&email=@gmail

# Controller:
def index
  @users = User.filter(params)
end

Installation

Add this line to your application's Gemfile:

gem 'filtron'

Usage

You can easily add Filtron to your existing models

class User < ActiveRecord::Base
  filter_with :fname, :first_name_eq
  filter_with :lname, :last_name_eq
  filter_with :country, :address_country_name_eq do |code|
    Country.find_by_code(code).name
  end

  queries :first_name, :email
end

Now in your controller:

def index
  @users = User.filter(params)
end

params might look something like this:

{
  fname: "Lee",
  country: "gb",
  q: "@gmail.com",
  something: "else"
}

This will translate into the following Ransack predicates:

{
  first_name_eq: "Lee",
  address_country_name_eq: "Great Britain",
  first_name_or_email_cont: "@gmail.com"
}

Filtron will then use these predicates to search for and return a result.

By default, queries will use params[:q] for a general query. You can change this in the call to queries:

queries :first_name, :last_name, :email, with: :search

Now, /users?search=foo will use these query predicates.