Class: ActiveRecord::Refined::AST::Comparison

Inherits:
Predicate show all
Defined in:
lib/active_record/refined/ast.rb

Overview

A plain SQL comparison. The value is passed through as it is, so a Range or an Array compares against a PostgreSQL range or array column, the way Active Record's own force_equality? types do.

Constant Summary collapse

OPERATOR_MAP =
{
  :== => :eq, :!= => :not_eq,
  :> => :gt, :>= => :gteq, :< => :lt, :<= => :lteq
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Predicate

#!, #&, #|

Methods inherited from Node

#as, #asc, #desc

Constructor Details

#initialize(column, operator, value) ⇒ Comparison

Returns a new instance of Comparison.



1808
1809
1810
1811
1812
# File 'lib/active_record/refined/ast.rb', line 1808

def initialize(column, operator, value)
  @column = column
  @operator = operator
  @value = value
end

Instance Attribute Details

#columnObject (readonly)

Returns the value of attribute column.



1806
1807
1808
# File 'lib/active_record/refined/ast.rb', line 1806

def column
  @column
end

#operatorObject (readonly)

Returns the value of attribute operator.



1806
1807
1808
# File 'lib/active_record/refined/ast.rb', line 1806

def operator
  @operator
end

#valueObject (readonly)

Returns the value of attribute value.



1806
1807
1808
# File 'lib/active_record/refined/ast.rb', line 1806

def value
  @value
end

Instance Method Details

#to_arel(table, model) ⇒ Object



1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
# File 'lib/active_record/refined/ast.rb', line 1814

def to_arel(table, model)
  arel_column = to_arel_operand(column, table, model)
  arel_value =
    case value
    when Node then value.to_arel(table, model)
    when ::Symbol then column_operand(value, table, model)
    when ActiveRecord::Relation then scalar_subquery(value)
    else quote_number(value)
    end
  arel_column.public_send(OPERATOR_MAP.fetch(operator), arel_value)
end