Module: Filterable

Defined in:
lib/filterable.rb,
lib/filterable/target.rb,
lib/filterable/concern.rb,
lib/filterable/datable.rb,
lib/filterable/railtie.rb,
lib/filterable/version.rb,
lib/filterable/scopable.rb,
lib/filterable/sortable.rb,
lib/filterable/equatable.rb,
lib/filterable/matchable.rb,
lib/filterable/rangeable.rb,
lib/filterable/togglable.rb,
lib/filterable/attachable.rb,
lib/filterable/datable/after.rb,
lib/filterable/datable/range.rb,
lib/filterable/datable/since.rb,
lib/filterable/datable/before.rb,
lib/filterable/concerns/datable.rb,
lib/filterable/concerns/scopable.rb,
lib/filterable/concerns/sortable.rb,
lib/filterable/rangeable/maximum.rb,
lib/filterable/rangeable/minimum.rb,
lib/filterable/concerns/equatable.rb,
lib/filterable/concerns/matchable.rb,
lib/filterable/concerns/rangeable.rb,
lib/filterable/concerns/togglable.rb,
lib/filterable/matchable/contains.rb,
lib/filterable/concerns/attachable.rb,
lib/filterable/matchable/ends_with.rb,
lib/filterable/value_normalization.rb,
lib/filterable/matchable/starts_with.rb,
lib/filterable/declarations_validator.rb,
lib/filterable/attribute_normalization.rb

Overview

Declarative, whitelisted query filtering and ordering for ActiveRecord models.

In a Rails application the Railtie auto-includes the building blocks into every model, so a model only declares its columns:

class MovementDetail < ApplicationRecord
datable   :value_date, :booking_date
sortable  :value_date, :gross_amount_cents
equatable :reference
rangeable :gross_amount_cents
scopable  :cheaper_than
togglable :priced
end

MovementDetail.filterable(filters: { value_date: { after: '2026-02-01' }, sort: '-value_date' })

Outside Rails, include the pieces manually:

include Filterable::Concern
include Filterable::Concerns::Datable
include Filterable::Concerns::Equatable
include Filterable::Concerns::Rangeable
include Filterable::Concerns::Scopable
include Filterable::Concerns::Sortable
include Filterable::Concerns::Togglable

Defined Under Namespace

Modules: Attachable, AttributeNormalization, Concern, Concerns, Datable, Equatable, Matchable, Rangeable, Scopable, Sortable, Target, Togglable, ValueNormalization Classes: DeclarationsValidator, Error

Constant Summary collapse

VERSION =
'1.0.0'