Class: OrderQuery::Point

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

Overview

Search around a record in an order space

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record, space) ⇒ Point

Returns a new instance of Point.

Parameters:



12
13
14
15
16
# File 'lib/order_query/point.rb', line 12

def initialize(record, space)
  @record    = record
  @space     = space
  @where_sql = SQL::Where.new(self)
end

Instance Attribute Details

#recordObject (readonly)

Returns the value of attribute record.



7
8
9
# File 'lib/order_query/point.rb', line 7

def record
  @record
end

#spaceObject (readonly)

Returns the value of attribute space.



7
8
9
# File 'lib/order_query/point.rb', line 7

def space
  @space
end

Instance Method Details

#afterActiveRecord::Relation

Returns:

  • (ActiveRecord::Relation)


50
51
52
# File 'lib/order_query/point.rb', line 50

def after
  records :after
end

#beforeActiveRecord::Relation

Returns:

  • (ActiveRecord::Relation)


55
56
57
# File 'lib/order_query/point.rb', line 55

def before
  records :before
end

#countInteger

Returns:

  • (Integer)


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

def count
  @total ||= scope.count
end

#firstActiveRecord::Base

Returns:

  • (ActiveRecord::Base)


19
20
21
# File 'lib/order_query/point.rb', line 19

def first
  scope.first
end

#lastActiveRecord::Base

Returns:

  • (ActiveRecord::Base)


24
25
26
# File 'lib/order_query/point.rb', line 24

def last
  reverse_scope.first
end

#next(loop = true) ⇒ ActiveRecord::Base

Returns:

  • (ActiveRecord::Base)


40
41
42
# File 'lib/order_query/point.rb', line 40

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

#positionInteger

Returns:

  • (Integer)


34
35
36
# File 'lib/order_query/point.rb', line 34

def position
  count - after.count
end

#previous(loop = true) ⇒ ActiveRecord::Base

Returns:

  • (ActiveRecord::Base)


45
46
47
# File 'lib/order_query/point.rb', line 45

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

#records(direction) ⇒ ActiveRecord::Relation

Parameters:

  • direction (:before, :after)

Returns:

  • (ActiveRecord::Relation)


61
62
63
64
65
66
67
68
69
# File 'lib/order_query/point.rb', line 61

def records(direction)
  query, query_args = @where_sql.build(direction)
  scope = (direction == :after ? space.scope : space.reverse_scope)
  if query.present?
    scope.where(query, *query_args)
  else
    scope
  end
end