module ArCache::WhereClause::Raw

This module is based on ActiveRecord::Relation::WhereClause modified

Public Instance Methods

to_h()
Alias for: where_values_hash
where_values_hash() click to toggle source
# File lib/ar_cache/where_clause.rb, line 109
def where_values_hash
  @where_values_hash ||= equalities(predicates).each_with_object({}) do |node, hash|
    # Don't support Arel::Nodes::NamedFunction.
    next if table.name != node.left.relation.name

    name = node.left.name.to_s
    value = extract_node_value(node.right)
    hash[name] = value
  end
rescue NoMethodError, ActiveModel::RangeError
  @where_values_hash = {}
end
Also aliased as: to_h

Private Instance Methods

equalities(predicates) click to toggle source
# File lib/ar_cache/where_clause.rb, line 123
        def equalities(predicates)
  equalities = []

  predicates.each do |node|
    if equality_node?(node)
      equalities << node
    elsif node.is_a?(Arel::Nodes::And)
      equalities.concat equalities(node.children)
    end
  end

  equalities
end
equality_node?(node) click to toggle source
# File lib/ar_cache/where_clause.rb, line 137
        def equality_node?(node)
  !node.is_a?(String) && node.equality?
end
extract_node_value(node) click to toggle source
# File lib/ar_cache/where_clause.rb, line 141
        def extract_node_value(node)
  case node
  when Array
    node.map { |v| extract_node_value(v) }
  when Arel::Nodes::BindParam
    value_for_database(node.value)
  when Arel::Nodes::Casted, Arel::Nodes::Quoted
    value_for_database(node)
  end
end
value_for_database(node) click to toggle source
# File lib/ar_cache/where_clause.rb, line 152
        def value_for_database(node)
  value = node.value_for_database # Maybe raise ActiveModel::RangeError
  value.is_a?(Date) ? value.to_s : value
end