Sha256: 7288209e60941bee0506eae201be97aa9d277d6dbba9a4b271df97d9dafa87fe

Contents?: true

Size: 1.28 KB

Versions: 2

Compression:

Stored size: 1.28 KB

Contents

require 'ardm/support/equalizer'
module Ardm
  module Query
    class Operator
      extend Ardm::Equalizer

      OPERATORS = {
        # DM      => ARel
        :eql      => :eq,
        :not      => :not,
        :in       => :in,
        :gt       => :gt,
        :gte      => :gteq,
        :lt       => :lt,
        :lte      => :lteq,
        :like     => :matches,
        :not_like => :does_not_match,
        :regexp   => :regexp,
      }

      ORDERS = {
        :asc  => :asc,
        :desc => :desc,
      }

      ALL = OPERATORS.merge(ORDERS)

      equalize :target, :operator

      # @api private
      attr_reader :target

      # @api private
      attr_reader :operator

      # @api private
      def inspect
        "#<#{self.class.name} #{target.inspect}.#{operator.inspect}>"
      end

      FOR_ARRAY = {
        :eq     => :in,
        :not_eq => :not_in
      }.freeze

      def for_array
        FOR_ARRAY[operator]
      end

      def to_arel(arel_table, value)
        Ardm::Query::Expression.new(arel_table, target, operator, value)
      end

      private

      # @api private
      def initialize(target, operator)
        @target, @operator = target, operator.to_sym
      end
    end # class Operator
  end # module Query
end # module Ardm

require 'ardm/query/ext/symbol'

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ardm-0.1.0 lib/ardm/query/operator.rb
ardm-0.0.1 lib/ardm/query/operator.rb