Class: RailsApiModel::Filters::Field

Inherits:
BaseFilter show all
Defined in:
lib/rails_api_model/filters/field.rb

Overview

TODO: Check whether the ActiveRecord model has the specified field

Instance Attribute Summary

Attributes inherited from BaseFilter

#api_model, #filter_key

Instance Method Summary collapse

Methods inherited from BaseFilter

#==, #ar_model, #initialize

Constructor Details

This class inherits a constructor from RailsApiModel::Filters::BaseFilter

Instance Method Details

#apply_scope(relation, key, value) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rails_api_model/filters/field.rb', line 5

def apply_scope(relation, key, value)
  key, modifier = key.split(':'.freeze, 2)
  value = transform_type(value)
  column = activerecord_model.arel_table[key]

  relation.where case modifier
                 when nil          then column.eq(value)
                 when 'not'.freeze then column.not_eq(value)
                 when 'lt'.freeze  then column.lt(value)
                 when 'lte'.freeze then column.lteq(value)
                 when 'gt'.freeze  then column.gt(value)
                 when 'gte'.freeze then column.gteq(value)
                 # TODO: Handle this error via Rails and send 400
                 else raise FilterError.new("Invalid modifier #{modifier}")
                 end
end