Skip to content

Instantly share code, notes, and snippets.

@sam
Created November 19, 2012 20:36
Show Gist options
  • Select an option

  • Save sam/4113718 to your computer and use it in GitHub Desktop.

Select an option

Save sam/4113718 to your computer and use it in GitHub Desktop.
QBE example
module Query
class Expression
attr_reader :field, :operator, :target
def initialize(field, operator, target)
@field, @operator, @target = field, operator, target
end
end
class GreaterThanExpression < Expression
def initialize(field, target)
super field, :>, target
end
end
class Field
attr_reader :name
def initialize(name)
@name = name
end
def >(target)
GreaterThanExpression.new(self, target)
end
end
class User
def age
@age ||= Field.new(:age)
end
end
end
class User
def self.where
yield Query::User.new
end
end
User.where { |user| user.age > 5 }
# => #<GreaterThanExpression:0x7baf88be @operator=:>, @field=#<Field:0x413ab162 @name=:age>, @target=5>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment