From 356728aadfb3dda7d3df74b9f7b7f7ec08f498a2 Mon Sep 17 00:00:00 2001 From: Boon Low Date: Thu, 25 Feb 2010 14:46:07 +0000 Subject: [PATCH] add a Group subclass (STI) called Homepage - a personal staging group per user account, modify User model to autmoatically create the homepage --- app/models/homepage.rb | 3 +++ app/models/user.rb | 14 ++++++++++++++ db/migrate/008_add_type_to_groups.rb | 9 +++++++++ 3 files changed, 26 insertions(+) create mode 100644 app/models/homepage.rb create mode 100644 db/migrate/008_add_type_to_groups.rb diff --git a/app/models/homepage.rb b/app/models/homepage.rb new file mode 100644 index 0000000..02c6c09 --- /dev/null +++ b/app/models/homepage.rb @@ -0,0 +1,3 @@ +class Homepage < Group + +end diff --git a/app/models/user.rb b/app/models/user.rb index 288fab7..20488c0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,8 +1,12 @@ class User < ActiveRecord::Base before_create :create_profile + + # Each user owns a homepage (subclass of group) + after_create :create_homepage has_one :profile, :dependent => :destroy + has_one :homepage, :dependent => :destroy has_many :memberships, :dependent => :destroy has_many :plain_memberships, :class_name => 'Membership', @@ -35,5 +39,15 @@ def network def create_profile self.profile ||= Profile.new end + + def create_homepage + @group = Homepage.new(:name=> self.login + "'s homepage", :description => "A personal space (homepage) of " + self.login + " where objects can be shared to or from, in various contexts such as posts, links.") + @group.author = self + @group.private = true + @group.save + @group.activate! + @group.join(self, true) + @group.activate_membership(self) + end end diff --git a/db/migrate/008_add_type_to_groups.rb b/db/migrate/008_add_type_to_groups.rb new file mode 100644 index 0000000..43a7323 --- /dev/null +++ b/db/migrate/008_add_type_to_groups.rb @@ -0,0 +1,9 @@ +class AddTypeToGroups < ActiveRecord::Migration + def self.up + add_column :groups, :type, :string + end + + def self.down + remove_column :groups, :type + end +end