class CursorPager::SliceRelation
Applies after and before cursors to a relation.
Attributes
after_values[R]
base_relation[R]
before_values[R]
order_values[R]
Public Class Methods
new(base_relation, order_values, after_values, before_values)
click to toggle source
# File lib/cursor_pager/slice_relation.rb, line 8 def initialize(base_relation, order_values, after_values, before_values) @base_relation = base_relation @order_values = order_values @after_values = after_values @before_values = before_values end
Public Instance Methods
call()
click to toggle source
# File lib/cursor_pager/slice_relation.rb, line 15 def call relation = base_relation relation = apply_after(relation) relation = apply_before(relation) relation end
Private Instance Methods
apply_after(relation)
click to toggle source
# File lib/cursor_pager/slice_relation.rb, line 26 def apply_after(relation) return relation if after_values.blank? if order_values.direction == :asc slice_relation(relation, ">", after_values) else slice_relation(relation, "<", after_values) end end
apply_before(relation)
click to toggle source
# File lib/cursor_pager/slice_relation.rb, line 36 def apply_before(relation) return relation if before_values.blank? if order_values.direction == :asc slice_relation(relation, "<", before_values) else slice_relation(relation, ">", before_values) end end
slice_relation(relation, operator, value)
click to toggle source
# File lib/cursor_pager/slice_relation.rb, line 46 def slice_relation(relation, operator, value) slice_attribute = order_values.map(&:prefixed_attribute).join(", ") relation.where("(#{slice_attribute}) #{operator} (?)", value) end