module NextRecord::ActiveRecordExtension

Public Class Methods

included(base) click to toggle source
# File lib/extensions/active_record_extension.rb, line 3
def self.included(base)
  base.extend(ClassMethods)
end

Public Instance Methods

next() click to toggle source
# File lib/extensions/active_record_extension.rb, line 7
def next
  next_record
end
previous() click to toggle source
# File lib/extensions/active_record_extension.rb, line 11
def previous
  next_record(-1)
end

Private Instance Methods

next_record(offset=1) click to toggle source
# File lib/extensions/active_record_extension.rb, line 29
def next_record(offset=1)
  relation = self.class.next_record_ordered
  scope = self.class.next_record_options[:scope]
  if scope
    relation = relation.where(scope => send(scope))
  end
  ids = relation.pluck(:id)
  index = ids.index(id) + offset
  return nil if index < 0 || index >= ids.size
  next_id = ids[index]
  relation.where(id: next_id).first
end