module ArCache::WhereClause::Raw
This module is based on ActiveRecord::Relation::WhereClause modified
Public Instance Methods
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