Module: ActiveRecord::Acts::List::InstanceMethods

Defined in:
lib/active_record/acts/list.rb

Overview

All the methods available to a record that has had acts_as_list specified. Each method works by assuming the object to be the item in the list, so chapter.move_lower would move that chapter lower in the list of all chapters. Likewise, chapter.first? would return true if that chapter is the first in the list of all chapters.

Instance Method Summary collapse

Instance Method Details

#decrement_positionObject



115
116
117
# File 'lib/active_record/acts/list.rb', line 115

def decrement_position
  update_attribute position_column, self.send(position_column).to_i - 1
end

#first?Boolean

Returns:

  • (Boolean)


119
120
121
# File 'lib/active_record/acts/list.rb', line 119

def first?
  self.send(position_column) == 1
end

#higher_itemObject



127
128
129
130
131
# File 'lib/active_record/acts/list.rb', line 127

def higher_item
  self.class.find_first(
    "#{scope_condition} AND #{position_column} = #{(send(position_column).to_i - 1).to_s}"
  )
end

#increment_positionObject



111
112
113
# File 'lib/active_record/acts/list.rb', line 111

def increment_position
  update_attribute position_column, self.send(position_column).to_i + 1
end

#last?Boolean

Returns:

  • (Boolean)


123
124
125
# File 'lib/active_record/acts/list.rb', line 123

def last?
  self.send(position_column) == bottom_position_in_list
end

#lower_itemObject



133
134
135
136
137
# File 'lib/active_record/acts/list.rb', line 133

def lower_item
  self.class.find_first(
    "#{scope_condition} AND #{position_column} = #{(send(position_column).to_i + 1).to_s}"
  )
end

#move_higherObject



83
84
85
86
87
88
89
90
# File 'lib/active_record/acts/list.rb', line 83

def move_higher
  return unless higher_item

  self.class.transaction do
    higher_item.increment_position
    decrement_position
  end
end

#move_lowerObject



74
75
76
77
78
79
80
81
# File 'lib/active_record/acts/list.rb', line 74

def move_lower
  return unless lower_item

  self.class.transaction do
    lower_item.decrement_position
    increment_position
  end
end

#move_to_bottomObject



92
93
94
95
96
97
# File 'lib/active_record/acts/list.rb', line 92

def move_to_bottom
  self.class.transaction do
    decrement_positions_on_lower_items
    assume_bottom_position
  end
end

#move_to_topObject



99
100
101
102
103
104
# File 'lib/active_record/acts/list.rb', line 99

def move_to_top
  self.class.transaction do
    increment_positions_on_higher_items
    assume_top_position
  end
end

#remove_from_listObject



106
107
108
# File 'lib/active_record/acts/list.rb', line 106

def remove_from_list
  decrement_positions_on_lower_items
end