Class: OrderQuery::RelativeOrder

Inherits:
Object
  • Object
show all
Defined in:
lib/order_query/relative_order.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record, scope, order) ⇒ RelativeOrder

Returns a new instance of RelativeOrder.



7
8
9
10
11
# File 'lib/order_query/relative_order.rb', line 7

def initialize(record, scope, order)
  @record = record
  @scope  = scope
  @order  = order.is_a?(OrderSpace) ? order : OrderSpace.new(scope, order)
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



5
6
7
# File 'lib/order_query/relative_order.rb', line 5

def options
  @options
end

#orderObject (readonly)

Returns the value of attribute order.



5
6
7
# File 'lib/order_query/relative_order.rb', line 5

def order
  @order
end

#recordObject (readonly)

Returns the value of attribute record.



5
6
7
# File 'lib/order_query/relative_order.rb', line 5

def record
  @record
end

#scopeObject (readonly)

Returns the value of attribute scope.



5
6
7
# File 'lib/order_query/relative_order.rb', line 5

def scope
  @scope
end

#valuesObject (readonly)

Returns the value of attribute values.



5
6
7
# File 'lib/order_query/relative_order.rb', line 5

def values
  @values
end

Instance Method Details

#afterObject



37
38
39
# File 'lib/order_query/relative_order.rb', line 37

def after
  records :after
end

#beforeObject



41
42
43
# File 'lib/order_query/relative_order.rb', line 41

def before
  records :before
end

#countObject



21
22
23
# File 'lib/order_query/relative_order.rb', line 21

def count
  @total ||= scope.count
end

#firstObject



13
14
15
# File 'lib/order_query/relative_order.rb', line 13

def first
  order.scope.first
end

#lastObject



17
18
19
# File 'lib/order_query/relative_order.rb', line 17

def last
  order.scope.last
end

#next(loop = true) ⇒ Object



29
30
31
# File 'lib/order_query/relative_order.rb', line 29

def next(loop = true)
  record_unless_current after.first || (first if loop)
end

#positionObject



25
26
27
# File 'lib/order_query/relative_order.rb', line 25

def position
  count - after.count
end

#previous(loop = true) ⇒ Object



33
34
35
# File 'lib/order_query/relative_order.rb', line 33

def previous(loop = true)
  record_unless_current before.first || (last if loop)
end

#records(mode) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/order_query/relative_order.rb', line 45

def records(mode)
  scope             = (mode == :after ? order.scope : order.reverse_scope)
  query, query_args = build_query(mode)
  if query.present?
    scope.where(query, *query_args)
  else
    scope
  end
end