From b47d79e0e60301f8a5add2390c1c49da383ec1e8 Mon Sep 17 00:00:00 2001 From: Hugo Maia Vieira Date: Tue, 29 Nov 2011 15:02:48 -0200 Subject: [PATCH] Order contributor's projects by update date; --- app/models/comment.rb | 2 +- app/models/contributor.rb | 2 +- app/models/task.rb | 2 +- app/views/contributors/dashboard.html.slim | 19 +++++++++++-------- app/views/layouts/application.html.erb | 2 ++ app/views/projects/_form.html.slim | 2 +- spec/models/contributor_spec.rb | 7 +++++-- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/models/comment.rb b/app/models/comment.rb index 5ae5159..ee0b66e 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -1,5 +1,5 @@ class Comment < ActiveRecord::Base - belongs_to :task + belongs_to :task, :touch => true # TODO: Test the touch belongs_to :contributor end diff --git a/app/models/contributor.rb b/app/models/contributor.rb index 383a057..763c741 100644 --- a/app/models/contributor.rb +++ b/app/models/contributor.rb @@ -20,7 +20,7 @@ class Contributor < ActiveRecord::Base validates_format_of :username, :with => /^\w*$/ def projects - own_projects + contributions + (own_projects + contributions).sort { |x, y| y[:updated_at] <=> x[:updated_at] } end protected diff --git a/app/models/task.rb b/app/models/task.rb index b8f6e8b..9fbae1e 100644 --- a/app/models/task.rb +++ b/app/models/task.rb @@ -1,5 +1,5 @@ class Task < ActiveRecord::Base - belongs_to :project + belongs_to :project, :touch => true # TODO: Test the touch belongs_to :category has_and_belongs_to_many :contributors, :join_table => :contributors_tasks has_many :comments, :dependent => :delete_all diff --git a/app/views/contributors/dashboard.html.slim b/app/views/contributors/dashboard.html.slim index 1a20e18..80383fa 100644 --- a/app/views/contributors/dashboard.html.slim +++ b/app/views/contributors/dashboard.html.slim @@ -1,13 +1,16 @@ .page-header h1 Your projects -ul - - current_contributor.projects.each do |project| - li - = link_to project.name, project_board_path(project) - br - = project.description +- if current_contributor.projects.empty? + p You don't have projects yet. #{link_to 'Create your first project!', new_project_path} + br +- else + ul + - current_contributor.projects.each do |project| + li + = link_to project.name, project_board_path(project) + br + = project.description -p - = link_to 'New project', new_project_path, :class => 'btn primary' += link_to 'New project', new_project_path, :class => 'btn primary' diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 1904821..a76c43a 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -24,6 +24,8 @@ <% current_contributor.projects.each do |project| %>
  • <%= link_to project.name, project_board_path(project) %>
  • <% end %> +
  • +
  • <%= link_to 'New project', new_project_path %>
  • <%= link_to 'Sign out', destroy_contributor_session_path, :method => :delete %>
  • diff --git a/app/views/projects/_form.html.slim b/app/views/projects/_form.html.slim index 899a2b7..7739a16 100644 --- a/app/views/projects/_form.html.slim +++ b/app/views/projects/_form.html.slim @@ -7,7 +7,7 @@ li= msg = f.input :name, :input_html => { :autofocus => true } - = f.input :description + = f.input :description, :input_html => {:class => :span7} = f.input :contributor_tokens, :label => 'Contributors', \ :input_html => { 'data-pre' => @project.contributors_for_token_input } diff --git a/spec/models/contributor_spec.rb b/spec/models/contributor_spec.rb index af2a9b2..9b72263 100644 --- a/spec/models/contributor_spec.rb +++ b/spec/models/contributor_spec.rb @@ -10,15 +10,18 @@ lambda { project_1.reload }.should raise_error ActiveRecord::RecordNotFound end - it 'should return all projects, including his own and others the he contribute' do + it 'should return all projects, including his own and others the he contribute, ordered by update date' do hugo = Factory.create :contributor rodrigo = Factory.create :contributor my_project = Factory.create :project, :owner => hugo our_project = Factory.create :project, :owner => rodrigo, :contributors => [hugo] other_project = Factory.create :project, :owner => rodrigo hugo.reload - hugo.projects.should include(my_project, our_project) hugo.projects.should_not include(other_project) + hugo.projects.should == [our_project, my_project] + my_project.update_attribute(:name, 'Changed name') + hugo.reload + hugo.projects.should == [my_project, our_project] end context 'validates' do