Module: ActiveRecord::Acts::List::InstanceMethods
- Defined in:
- lib/acts_as_list/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
-
#decrement_position ⇒ Object
Decrease the position of this item without adjusting the rest of the list.
- #default_position ⇒ Object
- #default_position? ⇒ Boolean
- #first? ⇒ Boolean
-
#higher_item ⇒ Object
Return the next higher item in the list.
-
#higher_items(limit = nil) ⇒ Object
Return the next n higher items in the list selects all higher items by default.
-
#in_list? ⇒ Boolean
Test if this record is in a list.
-
#increment_position ⇒ Object
Increase the position of this item without adjusting the rest of the list.
-
#insert_at(position = acts_as_list_top) ⇒ Object
Insert the item at the given position (defaults to the top position of 1).
- #last? ⇒ Boolean
-
#lower_item ⇒ Object
Return the next lower item in the list.
-
#lower_items(limit = nil) ⇒ Object
Return the next n lower items in the list selects all lower items by default.
-
#move_higher ⇒ Object
Swap positions with the next higher item, if one exists.
-
#move_lower ⇒ Object
Swap positions with the next lower item, if one exists.
-
#move_to_bottom ⇒ Object
Move to the bottom of the list.
-
#move_to_top ⇒ Object
Move to the top of the list.
-
#move_within_scope(scope_id) ⇒ Object
Move the item within scope.
- #not_in_list? ⇒ Boolean
-
#remove_from_list ⇒ Object
Removes the item from the list.
-
#set_list_position(new_position) ⇒ Object
Sets the new position and saves it.
Instance Method Details
#decrement_position ⇒ Object
Decrease the position of this item without adjusting the rest of the list.
242 243 244 245 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 242 def decrement_position return unless in_list? set_list_position(self.send(position_column).to_i - 1) end |
#default_position ⇒ Object
300 301 302 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 300 def default_position acts_as_list_class.columns_hash[position_column.to_s].default end |
#default_position? ⇒ Boolean
304 305 306 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 304 def default_position? default_position && default_position.to_i == send(position_column) end |
#first? ⇒ Boolean
247 248 249 250 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 247 def first? return false unless in_list? !higher_item end |
#higher_item ⇒ Object
Return the next higher item in the list.
258 259 260 261 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 258 def higher_item return nil unless in_list? higher_items(1).first end |
#higher_items(limit = nil) ⇒ Object
Return the next n higher items in the list selects all higher items by default
265 266 267 268 269 270 271 272 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 265 def higher_items(limit=nil) limit ||= acts_as_list_list.count position_value = send(position_column) acts_as_list_list. where("#{quoted_position_column_with_table_name} < ?", position_value). order("#{quoted_position_column_with_table_name} DESC"). limit(limit) end |
#in_list? ⇒ Boolean
Test if this record is in a list
292 293 294 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 292 def in_list? !not_in_list? end |
#increment_position ⇒ Object
Increase the position of this item without adjusting the rest of the list.
236 237 238 239 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 236 def increment_position return unless in_list? set_list_position(self.send(position_column).to_i + 1) end |
#insert_at(position = acts_as_list_top) ⇒ Object
Insert the item at the given position (defaults to the top position of 1).
168 169 170 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 168 def insert_at(position = acts_as_list_top) insert_at_position(position) end |
#last? ⇒ Boolean
252 253 254 255 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 252 def last? return false unless in_list? !lower_item end |
#lower_item ⇒ Object
Return the next lower item in the list.
275 276 277 278 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 275 def lower_item return nil unless in_list? lower_items(1).first end |
#lower_items(limit = nil) ⇒ Object
Return the next n lower items in the list selects all lower items by default
282 283 284 285 286 287 288 289 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 282 def lower_items(limit=nil) limit ||= acts_as_list_list.count position_value = send(position_column) acts_as_list_list. where("#{quoted_position_column_with_table_name} > ?", position_value). order("#{quoted_position_column_with_table_name} ASC"). limit(limit) end |
#move_higher ⇒ Object
Swap positions with the next higher item, if one exists.
187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 187 def move_higher return unless higher_item acts_as_list_class.transaction do if higher_item.send(position_column) != self.send(position_column) swap_positions(higher_item, self) else higher_item.increment_position decrement_position end end end |
#move_lower ⇒ Object
Swap positions with the next lower item, if one exists.
173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 173 def move_lower return unless lower_item acts_as_list_class.transaction do if lower_item.send(position_column) != self.send(position_column) swap_positions(lower_item, self) else lower_item.decrement_position increment_position end end end |
#move_to_bottom ⇒ Object
Move to the bottom of the list. If the item is already in the list, the items below it have their position adjusted accordingly.
202 203 204 205 206 207 208 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 202 def move_to_bottom return unless in_list? acts_as_list_class.transaction do decrement_positions_on_lower_items assume_bottom_position end end |
#move_to_top ⇒ Object
Move to the top of the list. If the item is already in the list, the items above it have their position adjusted accordingly.
212 213 214 215 216 217 218 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 212 def move_to_top return unless in_list? acts_as_list_class.transaction do increment_positions_on_higher_items assume_top_position end end |
#move_within_scope(scope_id) ⇒ Object
Move the item within scope. If a position within the new scope isn’t supplied, the item will be appended to the end of the list.
230 231 232 233 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 230 def move_within_scope(scope_id) send("#{scope_name}=", scope_id) save! end |
#not_in_list? ⇒ Boolean
296 297 298 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 296 def not_in_list? send(position_column).nil? end |
#remove_from_list ⇒ Object
Removes the item from the list.
221 222 223 224 225 226 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 221 def remove_from_list if in_list? decrement_positions_on_lower_items set_list_position(nil) end end |
#set_list_position(new_position) ⇒ Object
Sets the new position and saves it
309 310 311 312 |
# File 'lib/acts_as_list/active_record/acts/list.rb', line 309 def set_list_position(new_position) write_attribute position_column, new_position save(validate: false) end |