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



125
126
127
128
# File 'lib/active_record/acts/list.rb', line 125

def decrement_position
  return unless in_list?
  update_attribute position_column, self.send(position_column).to_i - 1
end

#first?Boolean

Returns:

  • (Boolean)


130
131
132
133
# File 'lib/active_record/acts/list.rb', line 130

def first?
  return false unless in_list?
  self.send(position_column) == 1
end

#higher_itemObject



140
141
142
143
144
145
# File 'lib/active_record/acts/list.rb', line 140

def higher_item
  return nil unless in_list?
  acts_as_list_class.find(:first, :conditions =>
    "#{scope_condition} AND #{position_column} = #{(send(position_column).to_i - 1).to_s}"
  )
end

#in_list?Boolean

Returns:

  • (Boolean)


154
155
156
# File 'lib/active_record/acts/list.rb', line 154

def in_list?
  !send(position_column).nil?
end

#increment_positionObject



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

def increment_position
  return unless in_list?
  update_attribute position_column, self.send(position_column).to_i + 1
end

#insert_at(position = 1) ⇒ Object



78
79
80
# File 'lib/active_record/acts/list.rb', line 78

def insert_at(position = 1)
  insert_at_position(position)
end

#last?Boolean

Returns:

  • (Boolean)


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

def last?
  return false unless in_list?
  self.send(position_column) == bottom_position_in_list
end

#lower_itemObject



147
148
149
150
151
152
# File 'lib/active_record/acts/list.rb', line 147

def lower_item
  return nil unless in_list?
  acts_as_list_class.find(:first, :conditions =>
    "#{scope_condition} AND #{position_column} = #{(send(position_column).to_i + 1).to_s}"
  )
end

#move_higherObject



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

def move_higher
  return unless higher_item

  acts_as_list_class.transaction do
    higher_item.increment_position
    decrement_position
  end
end

#move_lowerObject



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

def move_lower
  return unless lower_item

  acts_as_list_class.transaction do
    lower_item.decrement_position
    increment_position
  end
end

#move_to_bottomObject



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

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_topObject



108
109
110
111
112
113
114
# File 'lib/active_record/acts/list.rb', line 108

def move_to_top
  return unless in_list?
  acts_as_list_class.transaction do
    increment_positions_on_higher_items
    assume_top_position
  end
end

#remove_from_listObject



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

def remove_from_list
  decrement_positions_on_lower_items if in_list?
end