Skip to content

Commit

Permalink
quick commit, added activity observer to automatically add page_items…
Browse files Browse the repository at this point in the history
… when a user creates a project, experiment or note
  • Loading branch information
Dan Engle committed Aug 14, 2009
1 parent 7a10fbe commit d66cf3d
Show file tree
Hide file tree
Showing 11 changed files with 730 additions and 16 deletions.
8 changes: 2 additions & 6 deletions app/controllers/experiments_controller.rb
Expand Up @@ -42,13 +42,9 @@ def edit
# POST /experiments
# POST /experiments.xml
def create
@experiment = @project.experiments.new(params[:experiment])
@experiment.user_id = current_user.id
@experiment = @project.experiments.new(params[:experiment].merge({ :user_id => current_user.id }))
respond_to do |format|
if @experiment.save
@page_item = current_user.todays_page.page_items.new
@page_item.resource = @experiment
@page_item.save
if current_user.save_object(@experiment)
flash[:notice] = 'Experiment was successfully created.'
format.html { redirect_to([@project,@experiment]) }
format.xml { render :xml => @experiment, :status => :created, :location => @experiment }
Expand Down
8 changes: 3 additions & 5 deletions app/controllers/notes_controller.rb
Expand Up @@ -43,12 +43,10 @@ def edit
# POST /notes.xml
def create
@note = @experiment.notes.new(params[:note])

logger.info { "\nparams[:note].class = #{params[:note].class}\n\n" }
respond_to do |format|
if @note.save
@page_item = current_user.todays_page.page_items.new
@page_item.resource = @note
@page_item.save
if current_user.save_object(@note)

flash[:notice] = 'Note was successfully created.'
format.html { redirect_to([@project, @experiment]) }
format.xml { render :xml => @note, :status => :created, :location => @note }
Expand Down
5 changes: 1 addition & 4 deletions app/controllers/projects_controller.rb
Expand Up @@ -43,11 +43,8 @@ def create
@project = Project.new(params[:project])

respond_to do |format|
if @project.save
if current_user.save_object(@project)
current_user.projects << @project
@page_item = current_user.todays_page.page_items.new
@page_item.resource = @project
@page_item.save
flash[:notice] = 'Project was successfully created.'
format.html { redirect_to(@project) }
format.xml { render :xml => @project, :status => :created, :location => @project }
Expand Down
9 changes: 9 additions & 0 deletions app/models/activity_observer.rb
@@ -0,0 +1,9 @@
class ActivityObserver < ActiveRecord::Observer
observe :project, :experiment, :note

def after_create(record)
page_item = record.user.todays_page.page_items.new
page_item.resource = record
page_item.save
end
end
2 changes: 2 additions & 0 deletions app/models/experiment.rb
Expand Up @@ -3,4 +3,6 @@ class Experiment < ActiveRecord::Base
belongs_to :user
has_many :notes, :dependent => :destroy
has_one :page_item, :as => :resource

attr_accessor :user
end
2 changes: 2 additions & 0 deletions app/models/note.rb
@@ -1,4 +1,6 @@
class Note < ActiveRecord::Base
belongs_to :experiment
has_one :page_item, :as => :resource

attr_accessor :user
end
2 changes: 2 additions & 0 deletions app/models/project.rb
Expand Up @@ -3,4 +3,6 @@ class Project < ActiveRecord::Base
has_many :experiments, :dependent => :destroy

validates_presence_of :title, :description

attr_accessor :user
end
5 changes: 5 additions & 0 deletions app/models/user.rb
Expand Up @@ -59,6 +59,11 @@ def todays_page
p
end

def save_object(object)
object.user = self if object.respond_to?(:user=)
object.save
end

protected

def make_activation_code
Expand Down
2 changes: 1 addition & 1 deletion config/environment.rb
Expand Up @@ -30,7 +30,7 @@

# Activate observers that should always be running
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
config.active_record.observers = :user_observer
config.active_record.observers = :user_observer, :activity_observer
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names.
config.time_zone = 'UTC'
Expand Down
695 changes: 695 additions & 0 deletions log/development.log

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions test/unit/activity_observer_test.rb
@@ -0,0 +1,8 @@
require 'test_helper'

class ActivityObserverTest < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end

0 comments on commit d66cf3d

Please sign in to comment.