module OpenStax::Utilities::ActsAsNumberable::ContainerInstanceMethods

Public Instance Methods

me_and_peers() click to toggle source
# File lib/openstax/utilities/acts_as_numberable.rb, line 197
def me_and_peers
  my_class.where(container_column => self.send(container_column))
end
move_to_container!(new_container) click to toggle source
# File lib/openstax/utilities/acts_as_numberable.rb, line 159
def move_to_container!(new_container)
  return if new_container.id == self.send(container_column)
  ActiveRecord::Base.transaction do
    remove_from_container!

    self.send container + "=", new_container

    self.assign_number
    self.save!
    self.changed_sets = true
  end
end
my_class() click to toggle source
# File lib/openstax/utilities/acts_as_numberable.rb, line 193
def my_class
  table_class || self.class
end
remove_from_container!() click to toggle source
# File lib/openstax/utilities/acts_as_numberable.rb, line 172
def remove_from_container!
  later_items = my_class.where(container_column => self.send(container_column))
                        .where("#{number_field} > ?", self.send(number_field))

  if !self.destroyed
    self.send "#{number_field}=", nil
    self.send container_column + '=', nil
    self.save!
  end

  # Do this to make sure that the reordering below doesn't
  # cause a number to be duplicated temporarily (which would
  # cause a validation error)
  later_items.sort_by!{|item| item.send(number_field)}

  later_items.each do |later|
    later.send("#{number_field}=", later.send(number_field)-1)
    later.save!
  end
end

Protected Instance Methods

assign_number() click to toggle source
# File lib/openstax/utilities/acts_as_numberable.rb, line 203
def assign_number
  if self.send(number_field).nil?
    self.send("#{number_field}=", 
              my_class
                .where(container_column => self.send(container_column))
                .count) 
  end
end