class Relation

Attributes

cache[R]
data[R]
query[R]
source_class[R]

Public Class Methods

new(query, source_class) click to toggle source
# File lib/activeleopard/relation.rb, line 22
def initialize(query, source_class)
  @source_class = source_class
  @query = defaults.merge(query)
  @cache = nil
end
ordered_clauses() click to toggle source
# File lib/activeleopard/relation.rb, line 18
def self.ordered_clauses
  [:select, :from, :join, :where, :group, :order, :limit]
end

Public Instance Methods

as_sql() click to toggle source
# File lib/activeleopard/relation.rb, line 71
def as_sql
  Relation.ordered_clauses.map do |clause|
    query[clause].as_sql
  end.join(" \n ")
end
bind_params() click to toggle source
# File lib/activeleopard/relation.rb, line 86
def bind_params
  query[:where].values
end
defaults() click to toggle source
# File lib/activeleopard/relation.rb, line 6
def defaults
  {
    select: SelectClause.new(["#{source_class.table_name}.*"]),
    from: FromClause.new(source_class.table_name),
    join: JoinOptions.new,
    where: WhereClause.new,
    limit: LimitClause.new,
    group: GroupClause.new,
    order: OrderClause.new
  }
end
distinct() click to toggle source
# File lib/activeleopard/relation.rb, line 53
def distinct
  query[:select].distinct = true
  empty_cache!
  self
end
each(&prc) click to toggle source
# File lib/activeleopard/relation.rb, line 82
def each(&prc)
  to_a.each { |el| prc.call(el) }
end
empty_cache!() click to toggle source
# File lib/activeleopard/relation.rb, line 103
def empty_cache!
  @cache = nil
end
execute!() click to toggle source
# File lib/activeleopard/relation.rb, line 95
def execute!
  @cache = DBConnection.execute(as_sql, bind_params)
end
group(grouping_attr) click to toggle source
# File lib/activeleopard/relation.rb, line 59
def group(grouping_attr)
  query[:group].grouping_attr = grouping_attr
  empty_cache!
  self
end
inspect() click to toggle source
# File lib/activeleopard/relation.rb, line 99
def inspect
  p to_a
end
joins(association, join_class = source_class) click to toggle source
# File lib/activeleopard/relation.rb, line 34
def joins(association, join_class = source_class)
  options = join_class.assoc_options[association]
  query[:join].append(options, join_class.table_name)
  empty_cache!
  self
end
limit(n) click to toggle source
# File lib/activeleopard/relation.rb, line 41
def limit(n)
  query[:limit].set(n)
  empty_cache!
  self
end
order(ordering_attr) click to toggle source
# File lib/activeleopard/relation.rb, line 65
def order(ordering_attr)
  query[:order].ordering_attr = ordering_attr
  empty_cache!
  self
end
select(*params) click to toggle source
# File lib/activeleopard/relation.rb, line 47
def select(*params)
  query[:select].params = params
  empty_cache!
  self
end
to_a() click to toggle source
# File lib/activeleopard/relation.rb, line 90
def to_a
  execute! if cache.nil?
  cache.map { |datum| source_class.new(datum) }
end
where(*where_params) click to toggle source
# File lib/activeleopard/relation.rb, line 28
def where(*where_params)
  query[:where] << where_params
  empty_cache!
  self
end