Skip to content

Instantly share code, notes, and snippets.

@gabeodess
Created December 14, 2015 14:57
Show Gist options
  • Save gabeodess/e24e99085b0455f90a15 to your computer and use it in GitHub Desktop.
Save gabeodess/e24e99085b0455f90a15 to your computer and use it in GitHub Desktop.
module Arel
def self.add_predicate(predicate, operator)
$method_name = predicate
$operator = operator
$class_name = $method_name.to_s.camelcase
module Arel::Predications
define_method($method_name) do |right|
:"Arel::Nodes::#{$class_name}".to_s.constantize.new(self, quoted_node(right))
end
end
node = Class.new(Arel::Nodes::Binary) do
def operator; $operator end
end
Arel::Nodes.const_set($class_name, node)
class Arel::Visitors::PostgreSQL
private
define_method(:"visit_Arel_Nodes_#{$class_name}") do |o, collector|
infix_value o, collector, " #{$operator} "
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment