diff options
author | Johan Sørensen <johan@johansorensen.com> | 2009-12-10 11:30:40 +0100 |
---|---|---|
committer | Johan Sørensen <johan@johansorensen.com> | 2009-12-10 11:54:59 +0100 |
commit | 0ccbb48e4b4a10c748a34b07f7044a741b05981f (patch) | |
tree | 8a1a186eae7db7b785bb46f61ddfbf0353f3c726 | |
parent | c2c20fe017a96c00811dcbd7939eceea5fd998ef (diff) | |
download | gitorious-mainline-outdated-0ccbb48e4b4a10c748a34b07f7044a741b05981f.zip gitorious-mainline-outdated-0ccbb48e4b4a10c748a34b07f7044a741b05981f.tar.gz gitorious-mainline-outdated-0ccbb48e4b4a10c748a34b07f7044a741b05981f.tar.bz2 |
Migration that adds objects owner as having favorited the object
So that they'll receive feed items when there's new events for their
own objects
-rw-r--r-- | db/migrate/20091210095437_add_object_owners_as_watchers.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/db/migrate/20091210095437_add_object_owners_as_watchers.rb b/db/migrate/20091210095437_add_object_owners_as_watchers.rb new file mode 100644 index 0000000..0c26c62 --- /dev/null +++ b/db/migrate/20091210095437_add_object_owners_as_watchers.rb @@ -0,0 +1,42 @@ +class AddObjectOwnersAsWatchers < ActiveRecord::Migration + def self.up + Favorite.class_eval do + # Don't create events for the favorites we're gonna add here + def event_should_be_created? + false + end + end + + transaction do + count = Project.count + Project.all.each_with_index do |project, idx| + say_with_time("Creating favorites for #{project.slug} #{idx+1}/#{count}") do + project_watchers = [] + if project.owned_by_group? + project.owner.members.each do |member| + member.favorites.create!(:watchable => project) + project_watchers << member + end + else + project.owner.favorites.create!(:watchable => project) + project_watchers << project.owner + end + + project.repositories.clones.each do |repo| + repo.committerships.map(&:members).flatten.compact.uniq.each do |user| + next if project_watchers.include?(user) + user.favorites.create!(:watchable => repo) + end + + repo.merge_requests.each do |mr| + mr.user.favorites.create!(:watchable => mr) + end + end + end # say_with_time + end + end + end + + def self.down + end +end |