Class: ArelExtensions::Nodes::Coalesce

Inherits:
Function
  • Object
show all
Defined in:
lib/arel_extensions/nodes/coalesce.rb

Constant Summary collapse

RETURN_TYPE =
:string

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Function

#!=, #==, #as, #convert_to_date_node, #convert_to_datetime_node, #convert_to_node, #convert_to_number, #convert_to_string_node, #expr, #left, #right, #type_of_attribute

Methods included from Predications

#cast, #convert_to_node, #imatches, #in, #matches, #not_in, #when

Constructor Details

#initialize(expr) ⇒ Coalesce

Returns a new instance of Coalesce.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/arel_extensions/nodes/coalesce.rb', line 12

def initialize expr
  tab = expr.map { |arg|
    convert_to_node(arg)
  }
  case expr.first
  when String
    @left_node_type = :string
  when Integer, Float
    @left_node_type = :number
  when ArelExtensions::Nodes::Coalesce, ArelExtensions::Nodes::Function
    @left_node_type = expr.first.respond_to?(:left_node_type) ? expr.first.left_node_type : nil
  when Arel::Nodes::Node, Arel::Attributes::Attribute
    @left_node_type = type_of_attribute(expr.first)
  when Date
    @left_node_type = :ruby_date
  when DateTime, Time
    @left_node_type = :ruby_time
  end
  return super(tab)
end

Instance Attribute Details

#left_node_typeObject

Returns the value of attribute left_node_type.



6
7
8
# File 'lib/arel_extensions/nodes/coalesce.rb', line 6

def left_node_type
  @left_node_type
end

Instance Method Details

#return_typeObject



8
9
10
# File 'lib/arel_extensions/nodes/coalesce.rb', line 8

def return_type
  @left_node_type || self.class.const_get(:RETURN_TYPE)
end