Class: ActiveRecord::Refined::AST::ArrayPredicate
- Defined in:
- lib/active_record/refined/ast.rb
Overview
Comparisons against a PostgreSQL array column, named after the Ruby methods that mean the same thing: member? is Enumerable's element test, superset? and subset? are Set's whole-array containment, and intersect? is Array's "any element in common". Each name maps to one operator; the elements are rendered as an array literal, which PostgreSQL coerces to the column's element type, so any expression works as the operand and no schema lookup is needed.
Instance Attribute Summary collapse
-
#elements ⇒ Object
readonly
Returns the value of attribute elements.
-
#operand ⇒ Object
readonly
Returns the value of attribute operand.
-
#operator ⇒ Object
readonly
Returns the value of attribute operator.
Class Method Summary collapse
-
.elements(arg, method_name) ⇒ Object
The whole-array comparisons take the collection kinds their namesakes compare against: an Array, or a Set for the Set methods.
Instance Method Summary collapse
-
#initialize(operand, operator, elements) ⇒ ArrayPredicate
constructor
A new instance of ArrayPredicate.
- #to_arel(table, model) ⇒ Object
Methods inherited from Predicate
Methods inherited from Node
Constructor Details
#initialize(operand, operator, elements) ⇒ ArrayPredicate
Returns a new instance of ArrayPredicate.
2086 2087 2088 2089 2090 |
# File 'lib/active_record/refined/ast.rb', line 2086 def initialize(operand, operator, elements) @operand = operand @operator = operator @elements = elements end |
Instance Attribute Details
#elements ⇒ Object (readonly)
Returns the value of attribute elements.
2084 2085 2086 |
# File 'lib/active_record/refined/ast.rb', line 2084 def elements @elements end |
#operand ⇒ Object (readonly)
Returns the value of attribute operand.
2084 2085 2086 |
# File 'lib/active_record/refined/ast.rb', line 2084 def operand @operand end |
#operator ⇒ Object (readonly)
Returns the value of attribute operator.
2084 2085 2086 |
# File 'lib/active_record/refined/ast.rb', line 2084 def operator @operator end |
Class Method Details
.elements(arg, method_name) ⇒ Object
The whole-array comparisons take the collection kinds their namesakes compare against: an Array, or a Set for the Set methods.
2075 2076 2077 2078 2079 2080 2081 2082 |
# File 'lib/active_record/refined/ast.rb', line 2075 def self.elements(arg, method_name) case arg when ::Array then arg when ::Set then arg.to_a else raise ArgumentError, "#{method_name} takes an Array or Set of elements" end end |
Instance Method Details
#to_arel(table, model) ⇒ Object
2092 2093 2094 2095 2096 2097 2098 2099 2100 |
# File 'lib/active_record/refined/ast.rb', line 2092 def to_arel(table, model) arel_operand = to_arel_operand(operand, table, model) quoted = Arel::Nodes.build_quoted(array_literal) case operator when :"@>" then Arel::Nodes::Contains.new(arel_operand, quoted) when :"&&" then Arel::Nodes::Overlaps.new(arel_operand, quoted) else Arel::Nodes::InfixOperation.new(operator, arel_operand, quoted) end end |