cherring / rangetastic

Filter an ActiveRecord query between any dates with any whitelisted field

This URL has Read+Write access

README.markdown

Introduction

Rangetastic allows you to filter results of a named_scope call on any dates using any of a list of whitelisted fields you specify.

Configuration & Usage

To acheive this you need to install rangetastic, but first install gemcutter and enable it for gems if you haven't already:

sudo gem install gemcutter

gem tumble

sudo gem install rangetastic

Then inside your environment.rb

config.gem "rangetastic"

Then in your model pass in the fields you wish to allow to be searchable using the between filter

class Order < ActiveRecord::Base
  acts_as_rangetastic :fields => ["ordered_on", "fulfilled_on"]
end

You can then chain the between scope with any named_scope call you make:

Order.fulfilled.between(1.week.ago, 10.minutes.ago, "fulfilled_on")

But if you (or someone nasty!) try to use a field that is not whitelisted, it will raise ActiveRecord::StatementInvalid

Now you can also access this with the following syntax for any field ending with _on that is on the Model you are calling from like so.

Order.fulfilled.ordered_between(1.week.ago, 10.minutes.ago)

In this new version of rangetastic you can also query on at fields. If you have an at field such as created_at you can now

Order.fulfilled.created_between(1.week.ago, 10.minutes.ago)

However if you have an on field and at field the on field will take precedence over the at. If you want to access the at field over on field you will need to use the .between and whitelisted fields method specified first.

But if your field isn't on the Model or isn't an on or an at field then it will raise the standard NoMethodError.

Thanks to spraints for some inspiration.