Skip to content

Instantly share code, notes, and snippets.

@RoxasShadow
Created July 16, 2013 14:08
Show Gist options
  • Select an option

  • Save RoxasShadow/6009041 to your computer and use it in GitHub Desktop.

Select an option

Save RoxasShadow/6009041 to your computer and use it in GitHub Desktop.
class Query
def initialize(&block)
instance_eval(&block)
end
def select(select); @select = select; end
def from (from ); @from = from ; end
def where(op, where)
(@where ||= []) << [ op, where]
end
def to_s
"SELECT #{@select} FROM #{@from} WHERE ".tap { |o|
@where.each_with_index { |where, i|
o << "#{where[1].keys.first} #{Query.get_op where[0]} '#{where[1].values.first}'"
o << " && " if @where.length > (i + 1)
}
}
end
def Query.get_op(op)
{ :equals => ?=, :greater => ?> }[op]
end
end
query = Query.new do
select :user
from :nerdz
where :equals, :username => 'Robertof'
where :greater, :age => 12
end
puts query
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment