diff options
author | Marius Mathiesen <marius@shortcut.no> | 2009-12-07 13:26:26 +0100 |
---|---|---|
committer | Marius Mathiesen <marius@shortcut.no> | 2009-12-07 14:18:15 +0100 |
commit | 2bd6ef4a7f02db37021263e4c9a257b20948c57f (patch) | |
tree | c77358025ec396df023152ad899ebbf8d08e2b38 | |
parent | 14e3443fa0fbfd570a74bc9424aed793e8f12ca0 (diff) | |
download | gitorious-mainline-outdated-2bd6ef4a7f02db37021263e4c9a257b20948c57f.zip gitorious-mainline-outdated-2bd6ef4a7f02db37021263e4c9a257b20948c57f.tar.gz gitorious-mainline-outdated-2bd6ef4a7f02db37021263e4c9a257b20948c57f.tar.bz2 |
Make merge requests watchable
- Moved linking logic into FavoritesHelper
- Favorites know of their project
-rw-r--r-- | app/helpers/event_rendering_helper.rb | 3 | ||||
-rw-r--r-- | app/helpers/favorites_helper.rb | 20 | ||||
-rw-r--r-- | app/helpers/users_helper.rb | 1 | ||||
-rw-r--r-- | app/models/favorite.rb | 10 | ||||
-rw-r--r-- | app/models/merge_request.rb | 1 | ||||
-rw-r--r-- | app/views/merge_requests/show.html.erb | 5 | ||||
-rw-r--r-- | app/views/users/show.html.erb | 5 | ||||
-rw-r--r-- | test/functional/favorites_controller_test.rb | 19 |
8 files changed, 57 insertions, 7 deletions
diff --git a/app/helpers/event_rendering_helper.rb b/app/helpers/event_rendering_helper.rb index 27f6d5c..24e7638 100644 --- a/app/helpers/event_rendering_helper.rb +++ b/app/helpers/event_rendering_helper.rb @@ -381,8 +381,7 @@ module EventRenderingHelper favorite_class = event.body.constantize repo = favorite_class.find(event.data) action = action_for_event(:event_added_favorite) do - link_to(repo_title(repo, repo.project), repo_owner_path(repo, [repo.project, repo])) - + link_to_watchable(repo) end body = event.body diff --git a/app/helpers/favorites_helper.rb b/app/helpers/favorites_helper.rb index d2881f0..9d78fa8 100644 --- a/app/helpers/favorites_helper.rb +++ b/app/helpers/favorites_helper.rb @@ -26,7 +26,7 @@ module FavoritesHelper content_tag(:div, link, :class => "white-button round-10 small-button favorite") end - + def create_favorite_link_to(watchable) class_name = watchable.class.name link_to("Start watching", @@ -42,4 +42,22 @@ module FavoritesHelper :method => :delete, :"data-request-method" => "delete", :class => "watch-link enabled round-10") end + + # Builds a link to the target of a favorite event + def link_to_watchable(watchable) + case watchable + when Repository + link_to(repo_title(watchable, watchable.project), repo_owner_path(watchable, [watchable.project, watchable])) + when MergeRequest + link_to(h(truncate(watchable.summary, :length => 32)), + repo_owner_path(watchable.target_repository, + [watchable.source_repository.project, + watchable.target_repository, + watchable])) + else + link_to(favorite.inspect, "/") + end + end + + end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index b77aa7d..94c5020 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -20,6 +20,7 @@ #++ module UsersHelper + include FavoritesHelper def encoded_mail_to(email) mail_to(email, nil, :replace_at => "AT@NOSPAM@", :replace_dot => "DOT", :encode => "javascript") diff --git a/app/models/favorite.rb b/app/models/favorite.rb index ac22006..58c3bc0 100644 --- a/app/models/favorite.rb +++ b/app/models/favorite.rb @@ -29,9 +29,17 @@ class Favorite < ActiveRecord::Base def event_options {:action => Action::ADD_FAVORITE, :data => watchable.id, - :body => watchable.class.name, :project_id => watchable.project.id, + :body => watchable.class.name, :project_id => project.id, :target_type => "User", :target_id => user.id} end + + def project + if MergeRequest === watchable + watchable.target_repository.project + else + watchable.project + end + end def create_event user.events.create(event_options) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index a72c326..67ea0a0 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -22,6 +22,7 @@ class MergeRequest < ActiveRecord::Base include ActiveMessaging::MessageSender + include Watchable belongs_to :user belongs_to :source_repository, :class_name => 'Repository' diff --git a/app/views/merge_requests/show.html.erb b/app/views/merge_requests/show.html.erb index 5b43913..ca58daa 100644 --- a/app/views/merge_requests/show.html.erb +++ b/app/views/merge_requests/show.html.erb @@ -52,6 +52,11 @@ [@merge_request.source_repository.project, @merge_request.target_repository]) -%> </li> <li>Created at: <%= @merge_request.created_at.to_s(:long_ordinal) -%></li> + <% if logged_in? %> + <li> + <%= favorite_link_to(@merge_request) -%> + </li> + <% end %> </ul> </div> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index c891354..d48b0b1 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -107,9 +107,8 @@ <% pull_box(favorites_heading_for(@user)) do %> <ul class="with_icons"> <% @favorites.each do |favorite| %> - <li class="favorite <%= favorite.class.name.downcase -%>"> - <%= link_to(repo_title(favorite, favorite.project), - repo_owner_path(favorite, [favorite.project, favorite])) %> + <li class="favorite <%= favorite.class.name.underscore -%>"> + <%= link_to_watchable(favorite) -%> </li> <% end %> <p class="hint"><%= no_watchings_notice_for(@user) if @favorites.blank? %></p> diff --git a/test/functional/favorites_controller_test.rb b/test/functional/favorites_controller_test.rb index 8b92d77..fc58185 100644 --- a/test/functional/favorites_controller_test.rb +++ b/test/functional/favorites_controller_test.rb @@ -86,6 +86,25 @@ class FavoritesControllerTest < ActionController::TestCase end end + context "Watching a merge request" do + setup { + login_as :johan + @merge_request = merge_requests(:moes_to_johans) + } + + should "create it" do + do_create_post(@merge_request.class.name, @merge_request.id, + {:format => "js"}) + assert_response :created + end + + should "destroy it" do + favorite = users(:johan).favorites.create(:watchable => @merge_request) + delete :destroy, :id => favorite, :format => "js" + assert_response :ok + end + end + context "Deleting a favorite" do setup { login_as :johan |