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