class RailsCoreExtensions::PositionInitializer

Public Class Methods

new(model_class, scope_name = nil, position_column = nil) click to toggle source
# File lib/rails_core_extensions/position_initializer.rb, line 3
def initialize(model_class, scope_name = nil, position_column = nil)
  @model_class = model_class
  @scope_name = scope_name
  @position_column = position_column
  @position_column ||= :position
end

Public Instance Methods

positionalize() click to toggle source
# File lib/rails_core_extensions/position_initializer.rb, line 10
def positionalize
  groups.each do |objects|
    objects.each.with_index do |object, index|
      next if object.position == index + 1
      scope = @model_class.where(id: object.id)
      scope.update_all(@position_column => index + 1)
    end
  end
end

Private Instance Methods

groups() click to toggle source
# File lib/rails_core_extensions/position_initializer.rb, line 22
def groups
  objects = @model_class.order(@position_column)
  @scope_name ? objects.group_by(&@scope_name.to_sym).values : [objects]
end