module AssociateJsonb::Relation::WhereClause

Public Instance Methods

to_h(table_name = nil) click to toggle source
# File lib/associate_jsonb/relation/where_clause.rb, line 7
def to_h(table_name = nil)
  equalities = equalities(predicates)
  if table_name
    equalities = equalities.select do |node|
      node.original_left.relation.name == table_name
    end
  end

  equalities.map { |node|
    name = node.original_left.name.to_s
    value = extract_node_value(node.right)
    [name, value]
  }.to_h
end

Private Instance Methods

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

  predicates.each do |node|
    case node
    when Arel::Nodes::Equality, Arel::Nodes::SqlCastedEquality
      equalities << node
    when Arel::Nodes::And
      equalities.concat equalities(node.children)
    end
  end

  equalities
end