Giter VIP home page Giter VIP logo

ar-auto-filter's Introduction

Activerecord::AutoFilter

Configuration based condition building and inclusion handling extension for ActiveRecord::Base

In case of eager loading of a model and its associations, it may be required to obtain query results based on filter criteria that span across multiple associations. To achieve this, we tend to construct dynamic where clauses based on the presence of certain filter criteria. Since this happens so frequently, it causes code duplication and hence violates the DRY principle. This gem tries to address that concern. Given request param hash and query specification hash, it is capable of emitting the required associations that need to be included, and where conditions that need to applied on a given model, to achieve the desired result or even apply them to the model directly.

The primary goal of this gem is to build dynamic query conditions. It is not limited to catering to the needs of eager loading like above and can also be used to build where conditions on just a model too. All that is required is

  • request-params
  • query-specification
  • proper association definitions(if needed).

Notes:

  1. See activerecord-auto_filter.gemspec for allowed ruby versions.

  2. Following issues will be addressed later

  • Currently it is mysql specific as the condition extraction is based on splitting the Arel::Table query by the word 'WHERE'.
  • Accept Procs for determining the condition for building where clause, instead of just param value presence. This gives better control for the programmer.

Installation

Add this line to your application's Gemfile:

gem 'activerecord-auto_filter'

And then execute:

$ bundle

Or install it yourself as:

$ gem install activerecord-auto_filter

Demo

Run demo.rb for usage demo. Steps are below.

  1. Checkout this repo
  2. Run bundle install
  3. Run ruby demo.rb

To just see the demo output, visit [demo output page] (https://github.com/kaushikd49/ar-auto-filter/wiki/Demo-output)

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

ar-auto-filter's People

Watchers

 avatar  avatar  avatar

ar-auto-filter's Issues

Extend the gem to work with other DB layers too

Currently the gem is mysql specific as the condition extraction is based on splitting the Arel::Table query by the word 'WHERE'. This may break if the underlying database is Postgresql or something else.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.