Sha256: f6807a868f93d0ac0f5d7e748797863208a59bc46897b24d183b5c6bcc7ba2a0

Contents?: true

Size: 1.47 KB

Versions: 10

Compression:

Stored size: 1.47 KB

Contents

# Creates a base for building Tenon::<Model>Filterer classes.
class Tenon::BaseFilterer
  attr_reader :scope
  attr_reader :params

  def initialize(scope, params)
    @scope = scope
    @params = params
  end

  def filter
    scope
  end

  private

  def eq(field, value)
    return scope unless value.present?
    scope.where("#{field} IN (?)", value)
  end

  def ilike(field, value)
    return scope unless value.present?
    scope.where("#{field} ILIKE ?", "%#{value}%")
  end

  def lt(field, value)
    return scope unless value.present?
    scope.where("#{field} < ?", value)
  end

  def gt(field, value)
    return scope unless value.present?
    scope.where("#{field} > ?", value)
  end

  def lte(field, value)
    return scope unless value.present?
    scope.where("#{field} <= ?", value)
  end

  def gte(field, value)
    return scope unless value.present?
    scope.where("#{field} >= ?", value)
  end

  def order(field, direction)
    direction ||= 'asc' # Do this manually in case nil is passed in
    return scope unless field.in?(allowed_order_fields)
    return scope unless direction.downcase.in?(['asc', 'desc'])
    scope.order("#{field} #{direction}")
  end

  def reorder(field, direction)
    direction ||= 'asc' # Do this manually in case nil is passed in
    return scope unless field.in?(allowed_order_fields)
    return scope unless direction.downcase.in?(['asc', 'desc'])
    scope.reorder("#{field} #{direction}")
  end

  def allowed_order_fields
    []
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
tenon-2.1.0 lib/tenon/filterers/base_filterer.rb
tenon-2.0.8 lib/tenon/filterers/base_filterer.rb
tenon-2.0.7 lib/tenon/filterers/base_filterer.rb
tenon-2.0.6 lib/tenon/filterers/base_filterer.rb
tenon-2.0.5 lib/tenon/filterers/base_filterer.rb
tenon-2.0.4 lib/tenon/filterers/base_filterer.rb
tenon-2.0.3 lib/tenon/filterers/base_filterer.rb
tenon-2.0.2 lib/tenon/filterers/base_filterer.rb
tenon-2.0.1 lib/tenon/filterers/base_filterer.rb
tenon-2.0.0 lib/tenon/filterers/base_filterer.rb