Commit d46486643c475436b7938b955e7d1582ef1a90c2

Moved events to be primarily pivoting around the project.

Commit diff

app/controllers/comments_controller.rb

 
2929 @comment.project = @project
3030 respond_to do |format|
3131 if @comment.save
32 current_user.create_event(Action::COMMENT, @comment)
32 @project.create_event(Action::COMMENT, @comment, current_user)
3333 format.html do
3434 flash[:success] = "Your comment was added"
3535 redirect_to project_repository_comments_path(@project, @repository)
toggle raw diff

app/controllers/committers_controller.rb

 
2222 respond_to do |format|
2323 if @repository.add_committer(@committer)
2424 @committership = @repository.committerships.find_by_user_id(@committer.id)
25 current_user.create_event(Action::ADD_COMMITTER, @committership)
25 @project.create_event(Action::ADD_COMMITTER, @committership, current_user)
2626 format.html { redirect_to([@repository.project, @repository]) }
2727 format.xml do
2828 render :xml => @committer
4040
4141 respond_to do |format|
4242 if @committership.destroy
43 current_user.create_event(Action::REMOVE_COMMITTER, @repository, params[:id])
43 @project.create_event(Action::REMOVE_COMMITTER, @repository, current_user, params[:id])
4444 flash[:success] = "User removed from repository"
4545 format.html { redirect_to [@repository.project, @repository] }
4646 format.xml { render :nothing, :status => :ok }
toggle raw diff

app/controllers/merge_requests_controller.rb

 
3131 @merge_request.user = current_user
3232 respond_to do |format|
3333 if @merge_request.save
34 current_user.create_event(Action::REQUEST_MERGE, @merge_request)
34 @project.create_event(Action::REQUEST_MERGE, @merge_request, current_user)
3535 format.html {
3636 flash[:success] = %Q{You sent a merge request to "#{@merge_request.target_repository.name}"}
3737 redirect_to project_repository_path(@project, @repository) and return
5151 # TODO: put to change status
5252 @merge_request.status = params[:merge_request][:status]
5353 if @merge_request.save
54 current_user.create_event(Action::RESOLVE_MERGE_REQUEST, @merge_request)
54 @project.create_event(Action::RESOLVE_MERGE_REQUEST, @merge_request, current_user)
5555 flash[:notice] = "The merge request was marked as #{@merge_request.status_string}"
5656 end
5757 redirect_to [@project, @repository, @merge_request]
6464 def update
6565 @merge_request.attributes = params[:merge_request]
6666 if @merge_request.save
67 current_user.create_event(Action::UPDATE_MERGE_REQUEST, @merge_request)
67 @project.create_event(Action::UPDATE_MERGE_REQUEST, @merge_request, current_user)
6868 flash[:success] = "Merge request was updated"
6969 redirect_to [@project, @repository, @merge_request]
7070 else
7575
7676 def destroy
7777 @merge_request.destroy
78 current_user.create_event(Action::DELETE_MERGE_REQUEST, @repository)
78 @project.create_event(Action::DELETE_MERGE_REQUEST, @repository, current_user)
7979 flash[:success] = "Merge request was retracted"
8080 redirect_to project_repository_path(@project, @repository)
8181 end
toggle raw diff

app/controllers/projects_controller.rb

 
4646 @project = Project.new(params[:project])
4747 @project.user = current_user
4848 if @project.save
49 current_user.create_event(Action::CREATE_PROJECT, @project)
49 @project.create_event(Action::CREATE_PROJECT, @project, current_user)
5050 redirect_to projects_path
5151 else
5252 render :action => 'new'
6565 end
6666 @project.attributes = params[:project]
6767 if @project.save
68 current_user.create_event(Action::UPDATE_PROJECT, @project)
68 @project.create_event(Action::UPDATE_PROJECT, @project, current_user)
6969 redirect_to project_path(@project)
7070 else
7171 render :action => 'new'
8181 if @project.can_be_deleted_by?(current_user)
8282 project_title = @project.title
8383 @project.destroy
84 current_user.create_event(Action::DELETE_PROJECT, nil, project_title)
84 #current_user.create_event(Action::DELETE_PROJECT, nil, project_title)
8585 else
8686 flash[:error] = "You're not the owner of this project, or the project has clones"
8787 end
toggle raw diff

app/controllers/repositories_controller.rb

 
6161
6262 respond_to do |format|
6363 if @repository.save
64 current_user.create_event(Action::CLONE_REPOSITORY, @repository, @repository_to_clone.id)
64 @project.create_event(Action::CLONE_REPOSITORY, @repository, current_user, @repository_to_clone.id)
6565
6666 location = project_repository_path(@project, @repository)
6767 format.html { redirect_to location }
9494 repo_name = @repository.name
9595 flash[:notice] = "The repository was deleted"
9696 @repository.destroy
97 current_user.create_event(Action::DELETE_REPOSITORY, @project, repo_name)
97 @project.create_event(Action::DELETE_REPOSITORY, @project, current_user, repo_name)
9898 else
9999 flash[:error] = "You're not the owner of this repository"
100100 end
toggle raw diff

app/models/action.rb

 
3030 when DELETE_REPOSITORY
3131 "delete repository"
3232 when COMMIT
33 "delete commit"
33 "commit"
3434 when CREATE_BRANCH
3535 "create branch"
3636 when DELETE_BRANCH
toggle raw diff

app/models/event.rb

 
11class Event < ActiveRecord::Base
22 belongs_to :user
3 belongs_to :project
34 belongs_to :target, :polymorphic => true
45end
toggle raw diff

app/models/project.rb

 
99 :class_name => "Repository"
1010 has_many :repository_clones, :conditions => ["mainline = ?", false],
1111 :class_name => "Repository"
12 has_many :events, :as => :target, :dependent => :destroy
12 has_many :events, :order => "created_at asc"
1313
1414 is_indexed :fields => ["title", "description", "slug"],
1515 :concatenate => [
133133 }
134134 super({:procs => [info]}.merge(opts))
135135 end
136
137 def create_event(action_id, target, user, data = nil, body = nil)
138 events.create(:action => action_id, :target => target, :user => user, :body => body, :data => data)
139 end
136140
137141 protected
138142 def create_mainline_repository
toggle raw diff

app/models/user.rb

 
120120 super({:except => [:activation_code, :crypted_password, :remember_token, :remember_token_expires_at, :salt, :ssh_key_id]}.merge(opts))
121121 end
122122
123 def create_event(action_id, target, data = nil, body = nil)
124 events.create(:action => action_id, :target => target, :body => body, :data => data)
125 end
126
127123 protected
128124 # before filter
129125 def encrypt_password
toggle raw diff

app/views/events/_events.html.erb

 
44 <li>
55 <div style="margin: 20px; padding-bottom: 10px;" >
66 <% unless action.empty? %>
7 <%= link_to event.user.login, user_path(event.user) %> <%= action %> <%= time_ago_in_words(event.date) %>
7 <%= link_to event.user.login, user_path(event.user) %> <%= action %> <%= time_ago_in_words(event.created_at) %>
88 <% end %><br/>
99 <div style="float: left; margin: 5px;">
1010 <%= gravatar(event.user.email, :size => 32) %>
toggle raw diff

data/hooks/post-receive

 
7070
7171 user = User.find_by_email(hash[:email])
7272 if user.nil?
73 # TODO: no user should be ok, no need to skip
7374 $stdout.puts "** The email '#{hash[:email]}' is not registered."
7475 next
7576 end
123123
124124 next unless action_id
125125
126 puts "#{hash[:author]}: #{Action.name(action_id)} #{ref} on #{slug} [#{hash[:date]}]"
127 puts " #{hash[:message]}"
126 # puts "#{hash[:author]}: #{Action.name(action_id)} #{ref} on #{slug} [#{hash[:date]}]"
127 # puts " #{hash[:message]}"
128128
129 user.create_event(action_id, repository, ref, hash[:message])
129 project.create_event(action_id, repository, user, ref, hash[:message])
130130end
131131
132132puts "=> Thanks! http://#{GitoriousConfig['gitorious_host']}/events"
toggle raw diff

db/migrate/024_create_events.rb

 
22 def self.up
33 create_table :events do |t|
44 t.integer :user_id, :null => false
5 t.integer :project_id, :null => false
56 t.integer :action, :null => false
67 t.string :data # Additional data
78 t.text :body
1414 end
1515
1616 add_index :events, :user_id
17 add_index :events, :project_id
1718 end
1819
1920 def self.down
toggle raw diff

spec/controllers/events_controller_spec.rb

 
1212 end
1313
1414 it "shows news" do
15 users(:johan).create_event(Action::CREATE_PROJECT, @repository, "", "")
15 projects(:johans).create_event(Action::CREATE_PROJECT, @repository, users(:johan), "", "")
1616 do_get
1717 response.should be_success
1818 end
toggle raw diff

spec/models/event_spec.rb

 
55 @event = new_event
66 @user = users(:johan)
77 @repository = repositories(:johans)
8 @project = @repository.project
89 end
910
1011 def new_event(opts={})
1414 :body => "blabla"
1515 }.merge(opts))
1616 c.user = opts[:user] || users(:johan)
17 c.project = opts[:project] || @project
1718 c
1819 end
1920
2021 it "should have valid associations" do
2122 @event.should have_valid_associations
22 end
23
24 it "should create an event from the action name" do
25 @user.create_event(Action::CREATE_PROJECT, @repository, "", "").should_not == nil
26 end
27
28 it "should create an event even without a valid id" do
29 @user.create_event(52342, @repository).should_not == nil
30 end
31
23 end
3224
3325end
3426
toggle raw diff

spec/models/project_spec.rb

 
113113 project.send(attr).should be_blank
114114 end
115115 end
116
117 describe "Project events" do
118 before(:each) do
119 @project = projects(:johans)
120 @user = users(:johan)
121 @repository = @project.repositories.first
122 end
123
124 it "should create an event from the action name" do
125 @project.create_event(Action::CREATE_PROJECT, @repository, @user, "", "").should_not == nil
126 end
127
128 it "should create an event even without a valid id" do
129 @project.create_event(52342, @repository, @user).should_not == nil
130 end
131
132 it "creates valid attributes on the event" do
133 e = @project.create_event(Action::COMMIT, @repository, @user, "somedata", "a body")
134 e.should be_valid
135 e.new_record?.should == false
136 e.reload
137 e.action.should == Action::COMMIT
138 e.target.should == @repository
139 e.project.should == @project
140 e.user.should == @user
141 e.data.should == "somedata"
142 e.body.should == "a body"
143 end
144 end
116145
117146end
toggle raw diff