Module: ActiveFilterable::ClassMethods
- Defined in:
- lib/active_filterable.rb
Instance Method Summary collapse
Instance Method Details
#filter_query(column, filter, value) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/active_filterable.rb', line 28 def filter_query(column, filter, value) return if value.blank? case filter when :eq, :in where(column => value) when :lt where("#{column} < ?", value) when :gt where("#{column} > ?", value) when :le where("#{column} <= ?", value) when :ge where("#{column} >= ?", value) when :ne, :not_in where.not(column => value) when :start_with where("#{column} LIKE ?", "#{value}%") when :like where("#{column} LIKE ?", "%#{value}%") when :end_with where("#{column} LIKE ?", "%#{value}") end end |
#filterable(*columns, by: []) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/active_filterable.rb', line 11 def filterable(*columns, by: []) columns.each do |column| by.each do |filter| scope "#{column}_#{filter}", ->(value) { filter_query(column, filter, value) } end end define_singleton_method(:filter_by) do |filters| query = self filters.each_key do |filter| value = filters[filter] query = query.and(send(filter, value)) end query end end |