Sha256: 9954ee2ca3d4f32037520642d584ead1194580d1b621ef2d9dc522a17abc565d

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

module Quickfilter
  module Handlers
    SQL = {
      eq:          lambda { |field, value| ["#{field} = ?", value] },
      eqic:        lambda { |field, value| ["lower(#{field}) = ?", "#{value.downcase}"] },
      likeic:      lambda { |field, value| ["lower(#{field}) like ?", "#{value.downcase}"] },
      startswith:  lambda { |field, value| ["lower(#{field}) like ?", "#{value.downcase}%"] },
      contains:    lambda { |field, value| ["lower(#{field}) like ?", "%#{value.downcase}%"] },

      gt:  lambda { |field, value| ["#{field} > ?",  value] },
      gte: lambda { |field, value| ["#{field} >= ?", value] },
      lt:  lambda { |field, value| ["#{field} < ?",  value] },
      lte: lambda { |field, value| ["#{field} <= ?", value] },

      in:      lambda { |field, value| ["#{field} in (?)", value] },
      isnull:  lambda { |field, value| [field, (value.present? and value) ? 'null' : 'not null'] }
    }

    PG = {
      sameday:   lambda { |field, value| ["date_trunc('day',   #{field}) = ?", value.to_date] },
      sameweek:  lambda { |field, value| ["date_trunc('week',  #{field}) = ?", value.to_date.beginning_of_week] },
      samemonth: lambda { |field, value| ["date_trunc('month', #{field}) = ?", value.to_date.beginning_of_month] }
    }

    class << self
      def get(name, adapter)
        result = SQL[name]
        result ||= PG[name] if self.is_pg?(adapter)

        raise "Operation #{name} not supported for adapter #{adapter}." if result.nil?
        return result
      end

      def is_pg?(adapter)
        return adapter == 'postgresql'
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
quickfilter-0.1.0 lib/quickfilter/handlers.rb