aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/acts
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2004-12-29 21:14:58 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2004-12-29 21:14:58 +0000
commit4290267959e8c91b8f2a4898d3fa33b15b8b7d57 (patch)
tree080250de03a99e133150ce58614073d771309897 /activerecord/lib/active_record/acts
parent84d5519b74f831d31caf00a018ca0c3b60ebb643 (diff)
downloadrails-4290267959e8c91b8f2a4898d3fa33b15b8b7d57.tar.gz
rails-4290267959e8c91b8f2a4898d3fa33b15b8b7d57.tar.bz2
rails-4290267959e8c91b8f2a4898d3fa33b15b8b7d57.zip
Moved support into Active Support
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@277 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/lib/active_record/acts')
-rw-r--r--activerecord/lib/active_record/acts/list.rb101
1 files changed, 56 insertions, 45 deletions
diff --git a/activerecord/lib/active_record/acts/list.rb b/activerecord/lib/active_record/acts/list.rb
index e8f7f64db1..3c0105bbe6 100644
--- a/activerecord/lib/active_record/acts/list.rb
+++ b/activerecord/lib/active_record/acts/list.rb
@@ -36,19 +36,31 @@ module ActiveRecord
configuration[:scope] = "#{configuration[:scope]}_id".intern if configuration[:scope].is_a?(Symbol) && configuration[:scope].to_s !~ /_id$/
+ if configuration[:scope].is_a?(Symbol)
+ scope_condition_method = %(
+ def scope_condition
+ if #{configuration[:scope].to_s}.nil?
+ "#{configuration[:scope].to_s} IS NULL"
+ else
+ "#{configuration[:scope].to_s} = \#{#{configuration[:scope].to_s}}"
+ end
+ end
+ )
+ else
+ scope_condition_method = "def scope_condition() \"#{configuration[:scope]}\" end"
+ end
+
class_eval <<-EOV
include ActiveRecord::Acts::List::InstanceMethods
def position_column
'#{configuration[:column]}'
end
-
- def scope_condition
- "#{configuration[:scope].is_a?(Symbol) ? configuration[:scope].to_s + " = \#{" + configuration[:scope].to_s + "}" : configuration[:scope]}"
- end
+
+ #{scope_condition_method}
before_destroy :remove_from_list
- before_create :add_to_list_bottom
+ before_create :add_to_list_bottom
EOV
end
end
@@ -123,55 +135,54 @@ module ActiveRecord
end
private
-
- def add_to_list_top
- increment_positions_on_all_items
- end
+ def add_to_list_top
+ increment_positions_on_all_items
+ end
- def add_to_list_bottom
- write_attribute(position_column, bottom_position_in_list.to_i + 1)
- end
+ def add_to_list_bottom
+ write_attribute(position_column, bottom_position_in_list.to_i + 1)
+ end
- # Overwrite this method to define the scope of the list changes
- def scope_condition() "1" end
+ # Overwrite this method to define the scope of the list changes
+ def scope_condition() "1" end
- def bottom_position_in_list
- item = bottom_item
- item ? item.send(position_column) : 0
- end
+ def bottom_position_in_list
+ item = bottom_item
+ item ? item.send(position_column) : 0
+ end
- def bottom_item
- self.class.find_first(
- "#{scope_condition} ",
- "#{position_column} DESC"
- )
- end
+ def bottom_item
+ self.class.find_first(
+ "#{scope_condition} ",
+ "#{position_column} DESC"
+ )
+ end
- def assume_bottom_position
- update_attribute position_column, bottom_position_in_list.to_i + 1
- end
+ def assume_bottom_position
+ update_attribute position_column, bottom_position_in_list.to_i + 1
+ end
- def assume_top_position
- update_attribute position_column, 1
- end
+ def assume_top_position
+ update_attribute position_column, 1
+ end
- 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}"
- )
- end
+ 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}"
+ )
+ end
- 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}"
- )
- end
+ 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}"
+ )
+ end
- def increment_positions_on_all_items
- self.class.update_all(
- "#{position_column} = (#{position_column} + 1)", "#{scope_condition}"
- )
- end
+ def increment_positions_on_all_items
+ self.class.update_all(
+ "#{position_column} = (#{position_column} + 1)", "#{scope_condition}"
+ )
+ end
end
end
end