Class: ActiveMapper::Relation
- Inherits:
-
Object
- Object
- ActiveMapper::Relation
- Extended by:
- Forwardable
- Defined in:
- lib/active_mapper/relation.rb
Instance Method Summary collapse
- #any? ⇒ Boolean
- #avg(attribute) ⇒ Object (also: #average)
- #count ⇒ Object (also: #length, #size)
- #drop(number) ⇒ Object
- #first(number = 1) ⇒ Object
-
#initialize(mapped_class, adapter, &block) ⇒ Relation
constructor
A new instance of Relation.
- #initialize_copy(other) ⇒ Object
- #last(number = 1) ⇒ Object
- #max(attribute) ⇒ Object (also: #maximum)
- #min(attribute) ⇒ Object (also: #minimum)
- #minmax(attribute) ⇒ Object
- #none? ⇒ Boolean (also: #empty?)
- #one? ⇒ Boolean
- #reject(&block) ⇒ Object
- #reverse ⇒ Object
- #select(&block) ⇒ Object
- #sort_by(&block) ⇒ Object
- #sum(attribute) ⇒ Object
- #take(number) ⇒ Object
- #to_a ⇒ Object
Constructor Details
#initialize(mapped_class, adapter, &block) ⇒ Relation
Returns a new instance of Relation.
9 10 11 12 13 |
# File 'lib/active_mapper/relation.rb', line 9 def initialize(mapped_class, adapter, &block) @mapped_class = mapped_class @adapter = adapter @block = block end |
Instance Method Details
#any? ⇒ Boolean
20 21 22 |
# File 'lib/active_mapper/relation.rb', line 20 def any? count > 0 end |
#avg(attribute) ⇒ Object Also known as: average
53 54 55 |
# File 'lib/active_mapper/relation.rb', line 53 def avg(attribute) @avg ||= @adapter.average(@mapped_class, attribute, &@block) end |
#count ⇒ Object Also known as: length, size
33 34 35 |
# File 'lib/active_mapper/relation.rb', line 33 def count @count ||= @adapter.count(@mapped_class, &@block) end |
#drop(number) ⇒ Object
62 63 64 65 |
# File 'lib/active_mapper/relation.rb', line 62 def drop(number) @offset = number dup end |
#first(number = 1) ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/active_mapper/relation.rb', line 88 def first(number = 1) objects = drop(0).take(number).to_a if number == 1 objects.first else objects end end |
#initialize_copy(other) ⇒ Object
15 16 17 18 |
# File 'lib/active_mapper/relation.rb', line 15 def initialize_copy(other) super @to_a = nil end |
#last(number = 1) ⇒ Object
98 99 100 101 102 103 104 105 106 |
# File 'lib/active_mapper/relation.rb', line 98 def last(number = 1) objects = drop(0).take(number).reverse.to_a if number == 1 objects.first else objects end end |
#max(attribute) ⇒ Object Also known as: maximum
44 45 46 |
# File 'lib/active_mapper/relation.rb', line 44 def max(attribute) @max ||= @adapter.maximum(@mapped_class, attribute, &@block) end |
#min(attribute) ⇒ Object Also known as: minimum
39 40 41 |
# File 'lib/active_mapper/relation.rb', line 39 def min(attribute) @min ||= @adapter.minimum(@mapped_class, attribute, &@block) end |
#minmax(attribute) ⇒ Object
49 50 51 |
# File 'lib/active_mapper/relation.rb', line 49 def minmax(attribute) [min(attribute), max(attribute)] end |
#none? ⇒ Boolean Also known as: empty?
24 25 26 |
# File 'lib/active_mapper/relation.rb', line 24 def none? !any? end |
#one? ⇒ Boolean
29 30 31 |
# File 'lib/active_mapper/relation.rb', line 29 def one? count == 1 end |
#reject(&block) ⇒ Object
84 85 86 |
# File 'lib/active_mapper/relation.rb', line 84 def reject(&block) select { |object| !block.call(object) } end |
#reverse ⇒ Object
113 114 115 116 117 118 119 120 121 |
# File 'lib/active_mapper/relation.rb', line 113 def reverse if @order block = @order.dup sort_by { |object| [block.call(object)].flatten.map(&:reverse) } else sort_by { |object| -object.id } end end |
#select(&block) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/active_mapper/relation.rb', line 72 def select(&block) if @block query = @block.dup @block = proc { |object| (query.call(object)) & block.call(object) } else @block = block end dup end |
#sort_by(&block) ⇒ Object
108 109 110 111 |
# File 'lib/active_mapper/relation.rb', line 108 def sort_by(&block) @order = block dup end |
#sum(attribute) ⇒ Object
58 59 60 |
# File 'lib/active_mapper/relation.rb', line 58 def sum(attribute) @sum ||= @adapter.sum(@mapped_class, attribute, &@block) end |
#take(number) ⇒ Object
67 68 69 70 |
# File 'lib/active_mapper/relation.rb', line 67 def take(number) @limit = number dup end |
#to_a ⇒ Object
123 124 125 |
# File 'lib/active_mapper/relation.rb', line 123 def to_a @to_a ||= @adapter.where(@mapped_class, , &@block).map { |record| @adapter.unserialize(@mapped_class, record) } end |