module ConditionsHelper def create_conditions c = Conditions.new yield c c.to_conditions end class Conditions def initialize() @conditions = "" @values = [] end def and(condition) add(condition, :and) end def or(condition) add(condition, :or) end def to_conditions [@conditions] + @values end private def add(condition, join = :and) join = if join == :or " OR " else " AND " end if condition.is_a?(Array): @values.empty? ? @conditions << condition.shift : @conditions << join << condition.shift @values += condition else @values.empty? ? @conditions << condition : @conditions << join << condition end return end end end