class MotionRecord::Scope
Attributes
conditions[R]
klass[R]
Public Class Methods
new(klass, options = {})
click to toggle source
# File lib/motion_record/scope.rb, line 10 def initialize(klass, options = {}) @klass = klass @conditions = options[:conditions] || {} # TODO: freeze? @order = options[:order] @limit = options[:limit] end
Public Instance Methods
average(column)
click to toggle source
# File lib/motion_record/scope.rb, line 85 def average(column) calculate(:average, column) end
count(column=nil)
click to toggle source
Calculations
# File lib/motion_record/scope.rb, line 69 def count(column=nil) calculate(:count, column) end
delete_all()
click to toggle source
# File lib/motion_record/scope.rb, line 63 def delete_all connection.delete(self) end
exists?()
click to toggle source
Read-only queries
# File lib/motion_record/scope.rb, line 33 def exists? count > 0 end
find(id)
click to toggle source
# File lib/motion_record/scope.rb, line 41 def find(id) self.where(@klass.primary_key => id).first end
find_all()
click to toggle source
# File lib/motion_record/scope.rb, line 45 def find_all connection.select(self).map do |row| record = @klass.new(@klass.deserialize_table_params(row)) record.mark_persisted! record end end
first()
click to toggle source
# File lib/motion_record/scope.rb, line 37 def first limit(1).find_all.first end
limit(limit_value)
click to toggle source
# File lib/motion_record/scope.rb, line 27 def limit(limit_value) Scope.new(@klass, :conditions => @conditions, :order => @order, :limit => limit_value) end
maximum(column)
click to toggle source
# File lib/motion_record/scope.rb, line 73 def maximum(column) calculate(:maximum, column) end
minimum(column)
click to toggle source
# File lib/motion_record/scope.rb, line 77 def minimum(column) calculate(:minimum, column) end
order(ordering_term)
click to toggle source
# File lib/motion_record/scope.rb, line 23 def order(ordering_term) Scope.new(@klass, :conditions => @conditions, :order => ordering_term, :limit => @limit) end
pluck(attribute)
click to toggle source
# File lib/motion_record/scope.rb, line 53 def pluck(attribute) connection.select(self).map { |row| row[attribute] } end
predicate()
click to toggle source
# File lib/motion_record/scope.rb, line 95 def predicate predicate_segments.join(" ") end
predicate?()
click to toggle source
SQL helpers
# File lib/motion_record/scope.rb, line 91 def predicate? predicate_segments.any? end
predicate_values()
click to toggle source
# File lib/motion_record/scope.rb, line 99 def predicate_values condition_columns.map { |column| @conditions[column] } end
sum(column)
click to toggle source
# File lib/motion_record/scope.rb, line 81 def sum(column) calculate(:sum, column) end
update_all(params)
click to toggle source
Persistence
queries
# File lib/motion_record/scope.rb, line 59 def update_all(params) connection.update(self, params) end
where(conditions={})
click to toggle source
Scope
builder
# File lib/motion_record/scope.rb, line 19 def where(conditions={}) Scope.new(@klass, :conditions => @conditions.merge(conditions), :order => @order, :limit => @limit) end
Protected Instance Methods
calculate(method, column)
click to toggle source
# File lib/motion_record/scope.rb, line 105 def calculate(method, column) connection.calculate(self, method, column) end
condition_columns()
click to toggle source
# File lib/motion_record/scope.rb, line 125 def condition_columns @condition_columns ||= @conditions.keys end
connection()
click to toggle source
# File lib/motion_record/scope.rb, line 129 def connection Base.connection end
predicate_segments()
click to toggle source
# File lib/motion_record/scope.rb, line 109 def predicate_segments unless @predicate_segments @predicate_segments = [] if condition_columns.any? @predicate_segments << "WHERE #{condition_columns.map { |c| "#{c} = ? " }.join " AND "}" end if @order @predicate_segments << "ORDER BY #{@order}" end if @limit @predicate_segments << "LIMIT #{@limit}" end end @predicate_segments end