aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-04-17 06:50:17 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-04-17 06:50:17 +0000
commited46cc3058ac9406f61220c9720c51f4edd172f9 (patch)
tree205a1dd63b8051859facfaddaedcea049d0935f6 /activerecord/lib
parent949294e0f79fbc0d7fca509f7da81ebf2df89cfc (diff)
downloadrails-ed46cc3058ac9406f61220c9720c51f4edd172f9.tar.gz
rails-ed46cc3058ac9406f61220c9720c51f4edd172f9.tar.bz2
rails-ed46cc3058ac9406f61220c9720c51f4edd172f9.zip
Added insert_at(position) to acts_as_list #1083 [DeLynnB]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1179 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/acts/list.rb32
1 files changed, 28 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/acts/list.rb b/activerecord/lib/active_record/acts/list.rb
index abd295d4e9..4d649726b2 100644
--- a/activerecord/lib/active_record/acts/list.rb
+++ b/activerecord/lib/active_record/acts/list.rb
@@ -71,6 +71,10 @@ module ActiveRecord
# lower in the list of all chapters. Likewise, <tt>chapter.first?</tt> would return true if that chapter is
# the first in the list of all chapters.
module InstanceMethods
+ def insert_at(position = 1)
+ position == 1 ? add_to_list_top : insert_at_position(position)
+ end
+
def move_lower
return unless lower_item
@@ -107,7 +111,6 @@ module ActiveRecord
decrement_positions_on_lower_items
end
-
def increment_position
update_attribute position_column, self.send(position_column).to_i + 1
end
@@ -168,24 +171,45 @@ module ActiveRecord
update_attribute(position_column, 1)
end
+ # This has the effect of moving all the higher items up one.
+ def decrement_positions_on_higher_items(position)
+ self.class.update_all(
+ "#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} <= #{position}"
+ )
+ end
+
# This has the effect of moving all the lower items up one.
def decrement_positions_on_lower_items
self.class.update_all(
- "#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} > #{send(position_column).to_i}"
+ "#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} > #{send(position_column).to_i}"
)
end
-
+
+ # This has the effect of moving all the higher items down one.
def increment_positions_on_higher_items
self.class.update_all(
- "#{position_column} = (#{position_column} + 1)", "#{scope_condition} AND #{position_column} < #{send(position_column).to_i}"
+ "#{position_column} = (#{position_column} + 1)", "#{scope_condition} AND #{position_column} < #{send(position_column).to_i}"
)
end
+ # This has the effect of moving all the lower items down one.
+ def increment_positions_on_lower_items(position)
+ self.class.update_all(
+ "#{position_column} = (#{position_column} + 1)", "#{scope_condition} AND #{position_column} >= #{position}"
+ )
+ end
+
def increment_positions_on_all_items
self.class.update_all(
"#{position_column} = (#{position_column} + 1)", "#{scope_condition}"
)
end
+
+ def insert_at_position(position)
+ remove_from_list
+ increment_positions_on_lower_items(position)
+ self.update_attribute(position_column, position)
+ end
end
end
end