Class: ActiveMapper::Relation

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/active_mapper/relation.rb

Instance Method Summary collapse

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

Returns:

  • (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

#countObject 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?

Returns:

  • (Boolean)


24
25
26
# File 'lib/active_mapper/relation.rb', line 24

def none?
  !any?
end

#one?Boolean

Returns:

  • (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

#reverseObject



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_aObject



123
124
125
# File 'lib/active_mapper/relation.rb', line 123

def to_a
  @to_a ||= @adapter.where(@mapped_class, options, &@block).map { |record| @adapter.unserialize(@mapped_class, record) }
end