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



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

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

#first?Boolean

Returns:

  • (Boolean)


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

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

#higher_itemObject



136
137
138
139
140
141
# File 'lib/active_record/acts/list.rb', line 136

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

#in_list?Boolean

Returns:

  • (Boolean)


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

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

#increment_positionObject



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

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

#insert_at(position = 1) ⇒ Object



74
75
76
# File 'lib/active_record/acts/list.rb', line 74

def insert_at(position = 1)
  position == 1 ? add_to_list_top : insert_at_position(position)
end

#last?Boolean

Returns:

  • (Boolean)


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

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

#lower_itemObject



143
144
145
146
147
148
# File 'lib/active_record/acts/list.rb', line 143

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

#move_higherObject



87
88
89
90
91
92
93
94
# File 'lib/active_record/acts/list.rb', line 87

def move_higher
  return unless higher_item

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

#move_lowerObject



78
79
80
81
82
83
84
85
# File 'lib/active_record/acts/list.rb', line 78

def move_lower
  return unless lower_item

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

#move_to_bottomObject



96
97
98
99
100
101
102
# File 'lib/active_record/acts/list.rb', line 96

def move_to_bottom
  return unless in_list?
  self.class.transaction do
    decrement_positions_on_lower_items
    assume_bottom_position
  end
end

#move_to_topObject



104
105
106
107
108
109
110
# File 'lib/active_record/acts/list.rb', line 104

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

#remove_from_listObject



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

def remove_from_list
  decrement_positions_on_lower_items if in_list?
end