dashboard

This commit is contained in:
gitlabhq 2011-11-02 22:14:03 +02:00
parent 83c1194d52
commit 020e1a8eee
7 changed files with 115 additions and 22 deletions

View file

@ -1,9 +1,30 @@
module DashboardHelper module DashboardHelper
def path_to_object(project, object) def dashboard_feed_path(project, object)
case object.class.name.to_s case object.class.name.to_s
when "Issue" then project_issues_path(project, project.issues.find(object.id)) when "Issue" then project_issues_path(project, project.issues.find(object.id))
when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first) when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first)
else "#" when "Note"
then
note = object
case note.noteable_type
when "Issue" then project_issue_path(project, note.noteable_id)
when "Snippet" then project_snippet_path(project, note.noteable_id)
when "Commit" then project_commit_path(project, :id => note.noteable_id)
else wall_project_path(project)
end
else "#"
end end
rescue
"#"
end
def dashboard_feed_title(object)
title = case object.class.name.to_s
when "Note" then markdown(object.note)
when "Issue" then object.title
when "Grit::Commit" then object.safe_message
else ""
end
"[#{object.class.name}] #{truncate(sanitize(title, :tags => []), :length => 60)} "
end end
end end

View file

@ -136,7 +136,7 @@ class Project < ActiveRecord::Base
notes.fresh.limit(n) notes.fresh.limit(n)
].compact.flatten.sort do |x, y| ].compact.flatten.sort do |x, y|
y.created_at <=> x.created_at y.created_at <=> x.created_at
end[0..n] end[0...n]
end end
def commit(commit_id = nil) def commit(commit_id = nil)
@ -160,7 +160,7 @@ class Project < ActiveRecord::Base
y.committed_date <=> x.committed_date y.committed_date <=> x.committed_date
end end
commits[0..n] commits[0...n]
end end
def commits_since(date) def commits_since(date)

View file

@ -3,12 +3,13 @@
#dashboard-content.dashboard-content.content #dashboard-content.dashboard-content.content
%aside %aside
%h4 %h4
%a.button-small.button-green{:href => ""} New Repository - if current_user.can_create_project?
%a.button-small.button-green{:href => new_project_path} New Repository
Your Repositories Your Repositories
%ol.project-list %ol.project-list
- @projects.each do |project| - @projects.each do |project|
%li %li
%a{:href => "#"} %a{:href => project_path(project)}
%span.arrow → %span.arrow →
%span.project-name= project.name %span.project-name= project.name
%span.time %span.time
@ -18,19 +19,20 @@
%h2.icon %h2.icon
%span> %span>
Dashboard Dashboard
- @active_projects.each do |project| - @active_projects.first(3).each do |project|
.project-box.project-updates.ui-box.ui-box-small.ui-box-big .project-box.project-updates.ui-box.ui-box-small.ui-box-big
%h3= project.name %h3= project.name
.data .data
- project.updates.each do |update| - project.updates.each do |update|
%a.project-update{:href => path_to_object(project, update)} %a.project-update{:href => dashboard_feed_path(project, update)}
%img{:src => "http://placehold.it/40x40"} = image_tag gravatar_icon(update.author.email), :class => "left", :width => 40
%span.update-title [#{update.class.name}] added a matcher that helps debugging matching problems %span.update-title
%span.update-author = dashboard_feed_title(update)
%strong= update.author.name %span.update-author
authored %strong= update.author.name
= time_ago_in_words(update.created_at) authored
ago = time_ago_in_words(update.created_at)
ago
%br %br
/ .project-update / .project-update
/ .project-updates / .project-updates

View file

@ -22,9 +22,9 @@
<%= link_to projects_path, :class => current_page?(projects_path) ? "current project" : "project" do %> <%= link_to projects_path, :class => current_page?(projects_path) ? "current project" : "project" do %>
<span></span>Projects <span></span>Projects
<% end %> <% end %>
<%= link_to( admin_root_path, :class => admin_namespace? ? "current admin" : "admin" ) do %> <%= link_to((current_user.is_admin? ? admin_root_path : "#"), :class => (admin_namespace? ? "current admin" : "admin")) do %>
<span></span>Admin <span></span>Admin
<% end if current_user.is_admin? %> <% end %>
</nav> </nav>
</header> </header>
<!-- eo Page Header --> <!-- eo Page Header -->

View file

@ -62,6 +62,51 @@ describe Project do
end end
end end
describe "updates" do
let(:project) { Factory :project }
before do
@issue = Factory :issue,
:project => project,
:author => Factory(:user),
:assignee => Factory(:user)
@note = Factory :note,
:project => project,
:author => Factory(:user)
@commit = project.fresh_commits(1).first
end
describe "return commit, note & issue" do
it { project.updates(3).count.should == 3 }
it { project.updates(3).last.id.should == @commit.id }
it { project.updates(3).include?(@issue).should be_true }
it { project.updates(3).include?(@note).should be_true }
end
end
describe "last_activity" do
let(:project) { Factory :project }
before do
@note = Factory :note,
:project => project,
:author => Factory(:user)
end
it { project.last_activity.should == @note }
it { project.last_activity_date.to_s.should == @note.created_at.to_s }
end
describe "fresh commits" do
let(:project) { Factory :project }
it { project.fresh_commits(3).count.should == 3 }
it { project.fresh_commits.first.id.should == "2fb376f61875b58bceee0492e270e9c805294b1a" }
it { project.fresh_commits.last.id.should == "0dac878dbfe0b9c6104a87d65fe999149a8d862c" }
end
describe "Git methods" do describe "Git methods" do
let(:project) { Factory :project } let(:project) { Factory :project }

View file

@ -0,0 +1,30 @@
require 'spec_helper'
describe "Dashboard" do
before { login_as :user }
describe "GET /dashboard" do
before do
@project = Factory :project
@project.add_access(@user, :read, :write)
visit dashboard_path
end
it "should be on dashboard page" do
current_path.should == dashboard_path
end
it "should have projects panel" do
within ".project-list" do
page.should have_content(@project.name)
end
end
it "should have news feed" do
within "#news-feed" do
page.should have_content(@project.commit.author.name)
page.should have_content(@project.commit.safe_message)
end
end
end
end

View file

@ -105,11 +105,6 @@ describe "Issues" do
Notify.should_not_receive(:new_issue_email) Notify.should_not_receive(:new_issue_email)
click_button "Save" click_button "Save"
end end
it "should send valid email to user with email & password" do
click_button "Save"
ActionMailer::Base.deliveries.last.should be_nil
end
end end
describe 'assign to other' do describe 'assign to other' do