From 955975a115b0c0ee5ca9c0f9ebdce284c9ed9998 Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:16:30 +1000 Subject: [PATCH 01/14] rearranged navbar to include Your Stuff --- app/views/layouts/_header.html.haml | 29 +++++-- spec/views/layouts/_header_spec.rb | 105 +++++++++++++++++++++++++ spec/views/layouts/application_spec.rb | 73 ++--------------- 3 files changed, 137 insertions(+), 70 deletions(-) create mode 100644 spec/views/layouts/_header_spec.rb diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml index 9f6bf78f9..dc34aa144 100644 --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -8,11 +8,31 @@ %a.brand(href=root_path)= Growstuff::Application.config.site_name .nav-collapse.collapse %ul.nav + - if member_signed_in? + %li.dropdown< + %a.dropdown-toggle{'data-toggle' => 'dropdown', :href => root_path} + Your Stuff + %b.caret + %ul.dropdown-menu + %li= link_to "Profile", member_path(current_member) + %li= link_to "Gardens", gardens_path(:owner_id => current_member.id) + %li= link_to "Plantings", plantings_path(:owner_id => current_member.id) + %li= link_to "Seeds", seeds_path(:owner_id => current_member.id) + %li= link_to "Posts", posts_path(:author_id => current_member.id) + + %ul.dropdown-menu %li= link_to "Crops", crops_path - %li= link_to "Members", members_path - %li= link_to "Posts", posts_path - %li= link_to "Forums", forums_path - %li= link_to "Shop", shop_path + %li= link_to "Seeds", seeds_path + %li.dropdown< + %a.dropdown-toggle{'data-toggle' => 'dropdown', :href => members_path} + Community + %b.caret + %ul.dropdown-menu + %li= link_to "Members", members_path + %li= link_to "Posts", posts_path + %li= link_to "Forums", forums_path + - if member_signed_in? + %li= link_to "Shop", shop_path -if member_signed_in? and current_member.has_role?(:admin) %li= link_to "Admin", admin_path %li.divider-vertical @@ -22,7 +42,6 @@ = current_member.login_name %b.caret %ul.dropdown-menu - %li= link_to "Profile", member_path(current_member) %li= link_to "Settings", edit_member_registration_path %li= link_to "Account", orders_path %li= link_to "Sign out", destroy_member_session_path, :method => :delete diff --git a/spec/views/layouts/_header_spec.rb b/spec/views/layouts/_header_spec.rb new file mode 100644 index 000000000..806e05d89 --- /dev/null +++ b/spec/views/layouts/_header_spec.rb @@ -0,0 +1,105 @@ +require 'spec_helper' + +describe 'layouts/_header.html.haml', :type => "view" do + context "when not logged in" do + before(:each) do + controller.stub(:current_user) { nil } + render + end + + it 'shows the title' do + rendered.should contain Growstuff::Application.config.site_name + end + + it 'should have signup/signin links' do + rendered.should contain 'Sign up' + rendered.should contain 'Sign in' + end + + it 'has a Crops link' do + rendered.should contain "Crops" + end + + it 'has a Seeds link' do + rendered.should contain "Seeds" + end + + it 'has a Community section' do + rendered.should contain "Community" + end + + it 'links to members' do + assert_select("a[href=#{members_path}]", 'Members') + end + + it 'links to posts' do + assert_select("a[href=#{posts_path}]", 'Posts') + end + + it 'links to forums' do + assert_select("a[href=#{forums_path}]", 'Forums') + end + + end + + context "logged in" do + + before(:each) do + @member = FactoryGirl.create(:member) + sign_in @member + controller.stub(:current_user) { @member } + render + end + + context "your stuff" do + it 'should have a Your Stuff section' do + rendered.should contain "Your Stuff" + end + it "should show link to member's profile" do + assert_select("a[href=#{member_path(@member)}]", "Profile") + end + it "should show link to member's gardens" do + assert_select("a[href=#{gardens_path(:owner_id => @member.id)}]", "Gardens") + end + it "should show link to member's plantings" do + assert_select("a[href=#{plantings_path(:owner_id => @member.id)}]", "Plantings") + end + it "should show link to member's seeds" do + assert_select("a[href=#{seeds_path(:owner_id => @member.id)}]", "Seeds") + end + it "should show link to member's posts" do + assert_select("a[href=#{posts_path(:author_id => @member.id)}]", "Posts") + end + end + + it 'should show login name' do + rendered.should contain /member\d+/ + end + + it "should show settings link" do + assert_select "a[href=/members/edit]", "Settings" + end + + it "should show account link" do + assert_select "a[href=#{orders_path}]", "Account" + end + + it 'should show signout link' do + rendered.should contain 'Sign out' + end + + it 'should show inbox link' do + rendered.should contain 'Inbox' + rendered.should_not match(/Inbox \(\d+\)/) + end + + context 'has notifications' do + it 'should show inbox count' do + FactoryGirl.create(:notification, :recipient => @member) + render + rendered.should contain 'Inbox (1)' + end + end + + end +end diff --git a/spec/views/layouts/application_spec.rb b/spec/views/layouts/application_spec.rb index 0637faf80..fba5cbeca 100644 --- a/spec/views/layouts/application_spec.rb +++ b/spec/views/layouts/application_spec.rb @@ -1,72 +1,15 @@ require 'spec_helper' describe 'layouts/application.html.haml', :type => "view" do - context "when not logged in" do - - before(:each) do - controller.stub(:current_user) { nil } - render - end - - it 'shows the title' do - rendered.should contain Growstuff::Application.config.site_name - end - - it 'should have signup/login links' do - rendered.should contain 'Sign up' - rendered.should contain 'Sign in' - end - + before(:each) do + controller.stub(:current_user) { nil } + render end - context "logged in" do - - before(:each) do - @member = FactoryGirl.create(:member) - sign_in @member - controller.stub(:current_user) { @member } - render - end - - it 'should show login name' do - rendered.should contain /member\d+/ - end - - it "should show member's name" do - assert_select("a[href=/members/#{@member.login_name}]", "Profile") - end - - it "should show settings link" do - assert_select "a[href=/members/edit]", "Settings" - end - - it "should show settings link" do - assert_select "a[href=#{orders_path}]", "Account" - end - - it 'should show logout link' do - rendered.should contain 'Sign out' - end - - it 'should show inbox link' do - rendered.should contain 'Inbox' - rendered.should_not match(/Inbox \(\d+\)/) - end - - context 'has notifications' do - it 'should show inbox count' do - FactoryGirl.create(:notification, :recipient => @member) - render - rendered.should contain 'Inbox (1)' - end - end - - it 'includes the analytics code' do - Growstuff::Application.config.analytics_code = '' - render - assert_select "script", :text => 'alert("foo!")' - rendered.should_not contain 'script' - end - + it 'includes the analytics code' do + Growstuff::Application.config.analytics_code = '' + assert_select "script", :text => 'alert("foo!")' + rendered.should_not contain 'script' end + end From 1ac5683557dfdae3405226495c7ce723d0bae7e5 Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:22:49 +1000 Subject: [PATCH 02/14] display plantings in table form, like seeds --- app/controllers/plantings_controller.rb | 4 ++ app/views/plantings/index.html.haml | 54 +++++++++++++++---- spec/controllers/plantings_controller_spec.rb | 8 +++ spec/views/plantings/index.html.haml_spec.rb | 7 +-- 4 files changed, 57 insertions(+), 16 deletions(-) diff --git a/app/controllers/plantings_controller.rb b/app/controllers/plantings_controller.rb index 9d4b3f0b9..2f0569b5c 100644 --- a/app/controllers/plantings_controller.rb +++ b/app/controllers/plantings_controller.rb @@ -7,6 +7,10 @@ class PlantingsController < ApplicationController # GET /plantings.json def index @plantings = Planting.paginate(:page => params[:page]) + @owner = Member.find_by_id(params[:owner_id]) + if @owner + @plantings = @owner.plantings.paginate(:page => params[:page]) + end respond_to do |format| format.html # index.html.erb diff --git a/app/views/plantings/index.html.haml b/app/views/plantings/index.html.haml index 6e98960ad..2d85d1ecd 100644 --- a/app/views/plantings/index.html.haml +++ b/app/views/plantings/index.html.haml @@ -1,14 +1,46 @@ -=content_for :title, "What's been planted recently?" +- content_for :title, @owner ? "#{@owner}'s plantings" : "Everyone's plantings" -%p Here are the latest things planted by #{Growstuff::Application.config.site_name} members. +%p + - if can? :create, Planting + - if @owner + %p + - if @owner == current_member + = link_to 'Plant something', new_planting_path, :class => 'btn btn-primary' + = link_to "View everyone's plantings", plantings_path, :class => 'btn' + - else # everyone's plantings + = link_to 'Plant something', new_planting_path, :class => 'btn btn-primary' + - if current_member + = link_to 'View your plantings', plantings_path(:owner_id => current_member.id), :class => 'btn' + - else + = render :partial => 'shared/signin_signup', :locals => { :to => "track what you've planted" } -%div.pagination - = page_entries_info @plantings, :model => "plantings" - = will_paginate @plantings +- if @plantings.length > 0 + %table.table.table-striped + %tr + - unless @owner + %th Owner + %th Crop + %th Garden + %th Description + %th Quantity + %th Planted on + %th Sun/shade? + %th Planted from + %th -- @plantings.each do |p| - = render :partial => "plantings/thumbnail", :locals => { :planting => p } - -%div.pagination - = page_entries_info @plantings, :model => "plantings" - = will_paginate @plantings + - @plantings.each do |planting| + %tr + - unless @owner + %td= link_to planting.owner.login_name, planting.owner + %td= link_to planting.crop.system_name, planting.crop + %td= link_to planting.garden.name, planting.garden + %td + :markdown + #{ strip_tags planting.description } + %td= planting.quantity + %td= planting.planted_at + %td= planting.sunniness + %td= planting.planted_from + %td= link_to 'Details', planting, :class => 'btn btn-mini' +- else + %p There are no plantings to display. diff --git a/spec/controllers/plantings_controller_spec.rb b/spec/controllers/plantings_controller_spec.rb index dff4e2909..783ade032 100644 --- a/spec/controllers/plantings_controller_spec.rb +++ b/spec/controllers/plantings_controller_spec.rb @@ -11,6 +11,14 @@ describe PlantingsController do } end + describe "GET index" do + it "picks up owner from params" do + owner = FactoryGirl.create(:member) + get :index, {:owner_id => owner.id} + assigns(:owner).should eq(owner) + end + end + describe "GET new" do it "picks up crop from params" do diff --git a/spec/views/plantings/index.html.haml_spec.rb b/spec/views/plantings/index.html.haml_spec.rb index 16339f665..b660fe2a1 100644 --- a/spec/views/plantings/index.html.haml_spec.rb +++ b/spec/views/plantings/index.html.haml_spec.rb @@ -31,7 +31,8 @@ describe "plantings/index" do it "renders a list of plantings" do rendered.should contain 'Tomato' rendered.should contain 'Maize' - rendered.should contain /member\d+'s Springfield Community Garden/ + rendered.should contain @member.login_name + rendered.should contain @garden.name end it "shows descriptions where they exist" do @@ -42,8 +43,4 @@ describe "plantings/index" do rendered.should contain 'January 13, 2013' end - it "renders markdown in the description" do - assert_select "em", "really" - end - end From 4a0cecff14418344537e0260b05a2115ca2a076c Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:23:46 +1000 Subject: [PATCH 03/14] strip tags from garden description --- app/views/gardens/show.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/gardens/show.html.haml b/app/views/gardens/show.html.haml index 8cfe8f2a3..c57f215fc 100644 --- a/app/views/gardens/show.html.haml +++ b/app/views/gardens/show.html.haml @@ -19,7 +19,7 @@ .span9 %div :markdown - #{@garden.description} + #{strip_tags @garden.description} - if can? :edit, @garden = link_to 'Edit garden', edit_garden_path(@garden), :class => 'btn btn-mini' - if can? :destroy, @garden From def6426e49d2f232d3ef620f275d7d06368e6abf Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:35:42 +1000 Subject: [PATCH 04/14] Fixed broken test for clicky analytics --- app/views/layouts/application.html.haml | 2 +- spec/views/layouts/application_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index cc67cedee..9f2a55272 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -7,7 +7,7 @@ .container .row .span12 - - if content_for?(:title) + - if content_for?(:title) %h1= yield(:title) - if notice .alert.alert-success diff --git a/spec/views/layouts/application_spec.rb b/spec/views/layouts/application_spec.rb index fba5cbeca..0c7bd8b50 100644 --- a/spec/views/layouts/application_spec.rb +++ b/spec/views/layouts/application_spec.rb @@ -3,11 +3,11 @@ require 'spec_helper' describe 'layouts/application.html.haml', :type => "view" do before(:each) do controller.stub(:current_user) { nil } - render end it 'includes the analytics code' do Growstuff::Application.config.analytics_code = '' + render assert_select "script", :text => 'alert("foo!")' rendered.should_not contain 'script' end From e2754a94d9e1fceb0d5b04bfc861a4f794440e6b Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:36:12 +1000 Subject: [PATCH 05/14] added pagination to seed and planting index pages --- app/controllers/seeds_controller.rb | 4 ++-- app/views/plantings/index.html.haml | 10 ++++++++++ app/views/seeds/index.html.haml | 9 +++++++++ spec/views/seeds/index.html.haml_spec.rb | 13 +++++++++++-- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/controllers/seeds_controller.rb b/app/controllers/seeds_controller.rb index 1920ebe11..6d41edca8 100644 --- a/app/controllers/seeds_controller.rb +++ b/app/controllers/seeds_controller.rb @@ -3,10 +3,10 @@ class SeedsController < ApplicationController # GET /seeds # GET /seeds.json def index - @seeds = Seed.all + @seeds = Seed.paginate(:page => params[:page]) @owner = Member.find_by_id(params[:owner_id]) if @owner - @seeds = @owner.seeds.all + @seeds = @owner.seeds.paginate(:page => params[:page]) end respond_to do |format| diff --git a/app/views/plantings/index.html.haml b/app/views/plantings/index.html.haml index 2d85d1ecd..5edfedaba 100644 --- a/app/views/plantings/index.html.haml +++ b/app/views/plantings/index.html.haml @@ -15,6 +15,11 @@ = render :partial => 'shared/signin_signup', :locals => { :to => "track what you've planted" } - if @plantings.length > 0 + + %div.pagination + = page_entries_info @plantings, :model => "plantings" + = will_paginate @plantings + %table.table.table-striped %tr - unless @owner @@ -42,5 +47,10 @@ %td= planting.sunniness %td= planting.planted_from %td= link_to 'Details', planting, :class => 'btn btn-mini' + + %div.pagination + = page_entries_info @plantings, :model => "plantings" + = will_paginate @plantings + - else %p There are no plantings to display. diff --git a/app/views/seeds/index.html.haml b/app/views/seeds/index.html.haml index 84a0de1d5..dedc4684d 100644 --- a/app/views/seeds/index.html.haml +++ b/app/views/seeds/index.html.haml @@ -15,6 +15,11 @@ = render :partial => 'shared/signin_signup', :locals => { :to => 'add seeds to your stash' } - if @seeds.length > 0 + + %div.pagination + = page_entries_info @seeds, :model => "seeds" + = will_paginate @seeds + %table.table.table-striped %tr %th Owner @@ -38,5 +43,9 @@ - if seed.tradable? = seed.owner.location.blank? ? "unspecified" : seed.owner.location %td= link_to 'Details', seed, :class => 'btn btn-mini' + + %div.pagination + = page_entries_info @seeds, :model => "seeds" + = will_paginate @seeds - else %p There are no seeds to display. diff --git a/spec/views/seeds/index.html.haml_spec.rb b/spec/views/seeds/index.html.haml_spec.rb index a2902a08f..b1b9a9173 100644 --- a/spec/views/seeds/index.html.haml_spec.rb +++ b/spec/views/seeds/index.html.haml_spec.rb @@ -6,7 +6,13 @@ describe "seeds/index" do sign_in @member controller.stub(:current_user) { @member } @seed1 = FactoryGirl.create(:seed, :owner => @member) - assign(:seeds, [@seed1, @seed1]) + @page = 1 + @per_page = 2 + @total_entries = 2 + seeds = WillPaginate::Collection.create(@page, @per_page, @total_entries) do |pager| + pager.replace([ @seed1, @seed1 ]) + end + assign(:seeds, seeds) end it "renders a list of seeds" do @@ -20,7 +26,10 @@ describe "seeds/index" do before(:each) do @owner = FactoryGirl.create(:london_member) @seed1 = FactoryGirl.create(:tradable_seed, :owner => @owner) - assign(:seeds, [@seed1, @seed1]) + seeds = WillPaginate::Collection.create(@page, @per_page, @total_entries) do |pager| + pager.replace([ @seed1, @seed1 ]) + end + assign(:seeds, seeds) render end From 82da4a09f076707ccf5221d4583cddfe7f8c5839 Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:37:12 +1000 Subject: [PATCH 06/14] added default sort (created at desc) to seeds --- app/models/seed.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/seed.rb b/app/models/seed.rb index cff7f348d..d1aecbfac 100644 --- a/app/models/seed.rb +++ b/app/models/seed.rb @@ -8,6 +8,8 @@ class Seed < ActiveRecord::Base belongs_to :crop belongs_to :owner, :class_name => 'Member', :foreign_key => 'owner_id' + default_scope order("created_at desc") + validates :quantity, :numericality => { :only_integer => true }, :allow_nil => true From ebb87655830079b0e56acfbdf92eca3d8baea295 Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:48:55 +1000 Subject: [PATCH 07/14] make gardens page look like plantings/seeds --- app/controllers/gardens_controller.rb | 6 +- app/views/gardens/index.html.haml | 72 ++++++++++++++++------ app/views/seeds/index.html.haml | 6 +- spec/views/gardens/index.html.haml_spec.rb | 14 +++-- 4 files changed, 73 insertions(+), 25 deletions(-) diff --git a/app/controllers/gardens_controller.rb b/app/controllers/gardens_controller.rb index 8eb5608a6..a9e112471 100644 --- a/app/controllers/gardens_controller.rb +++ b/app/controllers/gardens_controller.rb @@ -3,7 +3,11 @@ class GardensController < ApplicationController # GET /gardens # GET /gardens.json def index - @gardens = Garden.all + @gardens = Garden.paginate(:page => params[:page]) + @owner = Member.find_by_id(params[:owner_id]) + if @owner + @gardens = @owner.gardens.paginate(:page => params[:page]) + end respond_to do |format| format.html # index.html.erb diff --git a/app/views/gardens/index.html.haml b/app/views/gardens/index.html.haml index a020b9a8e..b86a5b494 100644 --- a/app/views/gardens/index.html.haml +++ b/app/views/gardens/index.html.haml @@ -1,23 +1,59 @@ -%h1 Listing gardens +- content_for :title, @owner ? "#{@owner}'s gardens" : "Everyone's gardens" -- if can? :create, Garden - %p= link_to 'New Garden', new_garden_path, :class => 'btn btn-primary' +%p + - if can? :create, Garden + - if @owner + %p + - if @owner == current_member + = link_to 'Add a garden', new_garden_path, :class => 'btn btn-primary' + = link_to "View everyone's gardens", gardens_path, :class => 'btn' + - else # everyone's gardens + = link_to 'Add a garden', new_garden_path, :class => 'btn btn-primary' + - if current_member + = link_to 'View your gardens', gardens_path(:owner_id => current_member.id), :class => 'btn' + - else + = render :partial => 'shared/signin_signup', :locals => { :to => 'add a new garden' } -%table - %tr - %th Name - %th User - %th Slug - %th - %th +- if @gardens.length > 0 - - @gardens.each do |garden| + %div.pagination + = page_entries_info @gardens, :model => "gardens" + = will_paginate @gardens + + %table.table.table-striped %tr - %td= link_to garden.name, garden - %td= garden.owner - %td= garden.slug - - if can? :edit, garden - %td= link_to 'Edit', edit_garden_path(garden), :class => 'btn btn-mini' - - if can? :destroy, garden - %td= link_to 'Delete', garden, method: :delete, data: { confirm: 'Are you sure?' }, :class => 'btn btn-mini' + - unless @owner + %th Owner + %th Garden name + %th Description + %th Plantings + %th + + - @gardens.each do |garden| + %tr + - unless @owner + %td= link_to garden.owner.login_name, garden.owner + %td= link_to garden.name, garden + %td= garden.description + %td + - if garden.plantings.empty? + None + - else + %ul + - garden.plantings.each do |p| + %li + = p.quantity + = link_to p.crop.system_name, p + - if p.planted_at + planted on + = p.planted_at + + %td= link_to 'Details', garden, :class => 'btn btn-mini' + + %div.pagination + = page_entries_info @gardens, :model => "gardens" + = will_paginate @gardens + +- else + %p There are no gardens to display. diff --git a/app/views/seeds/index.html.haml b/app/views/seeds/index.html.haml index dedc4684d..db1697506 100644 --- a/app/views/seeds/index.html.haml +++ b/app/views/seeds/index.html.haml @@ -22,7 +22,8 @@ %table.table.table-striped %tr - %th Owner + - unless @owner + %th Owner %th Crop %th Description %th Quantity @@ -33,7 +34,8 @@ - @seeds.each do |seed| %tr - %td= link_to seed.owner.login_name, seed.owner + - unless @owner + %td= link_to seed.owner.login_name, seed.owner %td= link_to seed.crop.system_name, seed.crop %td= seed.description %td= seed.quantity diff --git a/spec/views/gardens/index.html.haml_spec.rb b/spec/views/gardens/index.html.haml_spec.rb index 7a72b854a..17fcb5363 100644 --- a/spec/views/gardens/index.html.haml_spec.rb +++ b/spec/views/gardens/index.html.haml_spec.rb @@ -4,10 +4,16 @@ describe "gardens/index" do before(:each) do controller.stub(:current_user) { nil } @owner = FactoryGirl.create(:member) - assign(:gardens, [ - FactoryGirl.create(:garden, :owner => @owner), - FactoryGirl.create(:garden, :owner => @owner) - ]) + page = 1 + per_page = 2 + total_entries = 2 + gardens = WillPaginate::Collection.create(page, per_page, total_entries) do |pager| + pager.replace([ + FactoryGirl.create(:garden, :owner => @owner), + FactoryGirl.create(:garden, :owner => @owner) + ]) + end + assign(:gardens, gardens) end it "renders a list of gardens" do From ac684dd8ae6a2d8ece63c00c9518cfa01f72166b Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:55:47 +1000 Subject: [PATCH 08/14] add author choice to posts page --- app/controllers/posts_controller.rb | 4 ++++ app/views/posts/index.html.haml | 27 ++++++++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 4003d546a..b57c7b07e 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -8,6 +8,10 @@ class PostsController < ApplicationController def index @posts = Post.paginate(:page => params[:page]) + @author = Member.find_by_id(params[:author_id]) + if @author + @posts = @author.posts.paginate(:page => params[:page]) + end respond_to do |format| format.html # index.html.haml diff --git a/app/views/posts/index.html.haml b/app/views/posts/index.html.haml index 8d321f5ea..04fb34fdd 100644 --- a/app/views/posts/index.html.haml +++ b/app/views/posts/index.html.haml @@ -1,14 +1,27 @@ -= content_for :title, "Recent #{Growstuff::Application.config.site_name} member posts" +- content_for :title, @author ? "#{@author}'s posts" : "Everyone's posts" -%p= link_to 'Post something', new_post_path, :class => 'btn btn-primary' +%p + - if can? :create, Post + - if @author + %p + - if @author == current_member + = link_to 'Post something', new_post_path, :class => 'btn btn-primary' + = link_to "View everyone's posts", posts_path, :class => 'btn' + - else # everyone's posts + = link_to 'Post something', new_post_path, :class => 'btn btn-primary' + - if current_member + = link_to 'View your posts', posts_path(:author_id => current_member.id), :class => 'btn' + - else + = render :partial => 'shared/signin_signup', :locals => { :to => 'write a post' } %div.pagination = page_entries_info @posts, :model => "posts" = will_paginate @posts -- @posts.each do |post| - = render :partial => "single", :locals => { :post => post, :subject => true } +- unless @posts.empty? + - @posts.each do |post| + = render :partial => "single", :locals => { :post => post, :subject => true } -%div.pagination - = page_entries_info @posts, :model => "posts" - = will_paginate @posts + %div.pagination + = page_entries_info @posts, :model => "posts" + = will_paginate @posts From 5a3fb8f07447a6a0c7be4aa273c373d7e0da0370 Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 14:56:01 +1000 Subject: [PATCH 09/14] avoid redundant 'no items' messages --- app/views/plantings/index.html.haml | 7 ++----- app/views/seeds/index.html.haml | 10 ++++------ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/app/views/plantings/index.html.haml b/app/views/plantings/index.html.haml index 5edfedaba..c216892da 100644 --- a/app/views/plantings/index.html.haml +++ b/app/views/plantings/index.html.haml @@ -14,12 +14,12 @@ - else = render :partial => 'shared/signin_signup', :locals => { :to => "track what you've planted" } -- if @plantings.length > 0 - %div.pagination = page_entries_info @plantings, :model => "plantings" = will_paginate @plantings +- if @plantings.length > 0 + %table.table.table-striped %tr - unless @owner @@ -51,6 +51,3 @@ %div.pagination = page_entries_info @plantings, :model => "plantings" = will_paginate @plantings - -- else - %p There are no plantings to display. diff --git a/app/views/seeds/index.html.haml b/app/views/seeds/index.html.haml index db1697506..657c69818 100644 --- a/app/views/seeds/index.html.haml +++ b/app/views/seeds/index.html.haml @@ -14,11 +14,11 @@ - else = render :partial => 'shared/signin_signup', :locals => { :to => 'add seeds to your stash' } -- if @seeds.length > 0 +%div.pagination + = page_entries_info @seeds, :model => "seeds" + = will_paginate @seeds - %div.pagination - = page_entries_info @seeds, :model => "seeds" - = will_paginate @seeds +- if @seeds.length > 0 %table.table.table-striped %tr @@ -49,5 +49,3 @@ %div.pagination = page_entries_info @seeds, :model => "seeds" = will_paginate @seeds -- else - %p There are no seeds to display. From 15d7423f539abf24096e778e11bb0ddda63580d3 Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 15:02:17 +1000 Subject: [PATCH 10/14] made RSS feeds author/owner-aware --- app/views/plantings/index.rss.haml | 3 ++- app/views/posts/index.rss.haml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/views/plantings/index.rss.haml b/app/views/plantings/index.rss.haml index d6ed95542..59cdd5e43 100644 --- a/app/views/plantings/index.rss.haml +++ b/app/views/plantings/index.rss.haml @@ -1,7 +1,8 @@ %rss{:version => 2.0} %channel - %title #{Growstuff::Application.config.site_name} - Recent plantings from all members + %title + #{Growstuff::Application.config.site_name} - Recent plantings from #{ @owner ? @owner : 'all members' } %link= plantings_url - @plantings.each do |planting| %item diff --git a/app/views/posts/index.rss.haml b/app/views/posts/index.rss.haml index 12402d0cf..4056a6099 100644 --- a/app/views/posts/index.rss.haml +++ b/app/views/posts/index.rss.haml @@ -1,7 +1,8 @@ %rss{:version => 2.0} %channel - %title #{Growstuff::Application.config.site_name} - Recent posts from all members + %title + #{Growstuff::Application.config.site_name} - Recent posts from #{ @author ? @author : 'all members' } %link= posts_url - @posts.each do |post| %item From 7c6d7ba3a979971f9b354b4310f39fa6829e111a Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 15:29:30 +1000 Subject: [PATCH 11/14] rearranged routing to avoid ?owner_id=99 --- app/controllers/gardens_controller.rb | 2 +- app/controllers/plantings_controller.rb | 2 +- app/controllers/posts_controller.rb | 2 +- app/controllers/seeds_controller.rb | 2 +- app/views/gardens/index.html.haml | 2 +- app/views/home/index.html.haml | 2 +- app/views/layouts/_header.html.haml | 8 ++++---- app/views/plantings/index.html.haml | 2 +- app/views/posts/index.html.haml | 2 +- app/views/seeds/index.html.haml | 2 +- config/routes.rb | 11 ++++++++++- spec/controllers/plantings_controller_spec.rb | 2 +- spec/controllers/seeds_controller_spec.rb | 2 +- spec/views/layouts/_header_spec.rb | 8 ++++---- spec/views/posts/index.rss.haml_spec.rb | 6 +++--- 15 files changed, 32 insertions(+), 23 deletions(-) diff --git a/app/controllers/gardens_controller.rb b/app/controllers/gardens_controller.rb index a9e112471..a349f9326 100644 --- a/app/controllers/gardens_controller.rb +++ b/app/controllers/gardens_controller.rb @@ -4,7 +4,7 @@ class GardensController < ApplicationController # GET /gardens.json def index @gardens = Garden.paginate(:page => params[:page]) - @owner = Member.find_by_id(params[:owner_id]) + @owner = Member.find_by_slug(params[:owner]) if @owner @gardens = @owner.gardens.paginate(:page => params[:page]) end diff --git a/app/controllers/plantings_controller.rb b/app/controllers/plantings_controller.rb index 2f0569b5c..27721349f 100644 --- a/app/controllers/plantings_controller.rb +++ b/app/controllers/plantings_controller.rb @@ -7,7 +7,7 @@ class PlantingsController < ApplicationController # GET /plantings.json def index @plantings = Planting.paginate(:page => params[:page]) - @owner = Member.find_by_id(params[:owner_id]) + @owner = Member.find_by_slug(params[:owner]) if @owner @plantings = @owner.plantings.paginate(:page => params[:page]) end diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index b57c7b07e..c7abf48fd 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -8,7 +8,7 @@ class PostsController < ApplicationController def index @posts = Post.paginate(:page => params[:page]) - @author = Member.find_by_id(params[:author_id]) + @author = Member.find_by_slug(params[:author]) if @author @posts = @author.posts.paginate(:page => params[:page]) end diff --git a/app/controllers/seeds_controller.rb b/app/controllers/seeds_controller.rb index 6d41edca8..82411c87b 100644 --- a/app/controllers/seeds_controller.rb +++ b/app/controllers/seeds_controller.rb @@ -4,7 +4,7 @@ class SeedsController < ApplicationController # GET /seeds.json def index @seeds = Seed.paginate(:page => params[:page]) - @owner = Member.find_by_id(params[:owner_id]) + @owner = Member.find_by_slug(params[:owner]) if @owner @seeds = @owner.seeds.paginate(:page => params[:page]) end diff --git a/app/views/gardens/index.html.haml b/app/views/gardens/index.html.haml index b86a5b494..bc42de466 100644 --- a/app/views/gardens/index.html.haml +++ b/app/views/gardens/index.html.haml @@ -10,7 +10,7 @@ - else # everyone's gardens = link_to 'Add a garden', new_garden_path, :class => 'btn btn-primary' - if current_member - = link_to 'View your gardens', gardens_path(:owner_id => current_member.id), :class => 'btn' + = link_to 'View your gardens', gardens_by_owner_path(:owner => current_member.slug), :class => 'btn' - else = render :partial => 'shared/signin_signup', :locals => { :to => 'add a new garden' } diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index ac93bdd86..c2f3712bf 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -28,7 +28,7 @@ %p %b Your seed stash: - = link_to pluralize(current_member.seeds.count, "variety"), seeds_path(:owner_id => current_member.id) + = link_to pluralize(current_member.seeds.count, "variety"), seeds_by_owner_path(:owner => current_member.slug) = link_to 'Add', new_seed_path, :class => 'btn btn-mini' .span4 diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml index dc34aa144..ad9691a6e 100644 --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -15,10 +15,10 @@ %b.caret %ul.dropdown-menu %li= link_to "Profile", member_path(current_member) - %li= link_to "Gardens", gardens_path(:owner_id => current_member.id) - %li= link_to "Plantings", plantings_path(:owner_id => current_member.id) - %li= link_to "Seeds", seeds_path(:owner_id => current_member.id) - %li= link_to "Posts", posts_path(:author_id => current_member.id) + %li= link_to "Gardens", gardens_by_owner_path(:owner => current_member.slug) + %li= link_to "Plantings", plantings_by_owner_path(:owner => current_member.slug) + %li= link_to "Seeds", seeds_by_owner_path(:owner => current_member.slug) + %li= link_to "Posts", posts_by_author_path(:author => current_member.slug) %ul.dropdown-menu %li= link_to "Crops", crops_path diff --git a/app/views/plantings/index.html.haml b/app/views/plantings/index.html.haml index c216892da..434669cb9 100644 --- a/app/views/plantings/index.html.haml +++ b/app/views/plantings/index.html.haml @@ -10,7 +10,7 @@ - else # everyone's plantings = link_to 'Plant something', new_planting_path, :class => 'btn btn-primary' - if current_member - = link_to 'View your plantings', plantings_path(:owner_id => current_member.id), :class => 'btn' + = link_to 'View your plantings', plantings_by_owner_path(:owner => current_member.slug), :class => 'btn' - else = render :partial => 'shared/signin_signup', :locals => { :to => "track what you've planted" } diff --git a/app/views/posts/index.html.haml b/app/views/posts/index.html.haml index 04fb34fdd..e691f7b6f 100644 --- a/app/views/posts/index.html.haml +++ b/app/views/posts/index.html.haml @@ -10,7 +10,7 @@ - else # everyone's posts = link_to 'Post something', new_post_path, :class => 'btn btn-primary' - if current_member - = link_to 'View your posts', posts_path(:author_id => current_member.id), :class => 'btn' + = link_to 'View your posts', posts_by_author_path(:author => current_member.slug), :class => 'btn' - else = render :partial => 'shared/signin_signup', :locals => { :to => 'write a post' } diff --git a/app/views/seeds/index.html.haml b/app/views/seeds/index.html.haml index 657c69818..b22edee0e 100644 --- a/app/views/seeds/index.html.haml +++ b/app/views/seeds/index.html.haml @@ -10,7 +10,7 @@ - else # everyone's seeds = link_to 'Add seeds', new_seed_path, :class => 'btn btn-primary' - if current_member - = link_to 'View your seeds', seeds_path(:owner_id => current_member.id), :class => 'btn' + = link_to 'View your seeds', seeds_by_owner_path(:owner => current_member.slug), :class => 'btn' - else = render :partial => 'shared/signin_signup', :locals => { :to => 'add seeds to your stash' } diff --git a/config/routes.rb b/config/routes.rb index 23e7af55c..5c29f3feb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,12 +4,21 @@ Growstuff::Application.routes.draw do resources :members resources :photos - resources :seeds resources :authentications + resources :plantings + match '/plantings/owner/:owner' => 'plantings#index', :as => 'plantings_by_owner' + resources :gardens + match '/gardens/owner/:owner' => 'gardens#index', :as => 'gardens_by_owner' + + resources :seeds + match '/seeds/owner/:owner' => 'seeds#index', :as => 'seeds_by_owner' + resources :posts + match '/posts/author/:author' => 'posts#index', :as => 'posts_by_author' + resources :scientific_names resources :crops resources :comments diff --git a/spec/controllers/plantings_controller_spec.rb b/spec/controllers/plantings_controller_spec.rb index 783ade032..2bc3367ec 100644 --- a/spec/controllers/plantings_controller_spec.rb +++ b/spec/controllers/plantings_controller_spec.rb @@ -14,7 +14,7 @@ describe PlantingsController do describe "GET index" do it "picks up owner from params" do owner = FactoryGirl.create(:member) - get :index, {:owner_id => owner.id} + get :index, {:owner => owner.slug} assigns(:owner).should eq(owner) end end diff --git a/spec/controllers/seeds_controller_spec.rb b/spec/controllers/seeds_controller_spec.rb index 8023deb69..d41fe7c3b 100644 --- a/spec/controllers/seeds_controller_spec.rb +++ b/spec/controllers/seeds_controller_spec.rb @@ -4,7 +4,7 @@ describe SeedsController do describe "GET index" do it "picks up owner from params" do owner = FactoryGirl.create(:member) - get :index, {:owner_id => owner.id} + get :index, {:owner => owner.slug} assigns(:owner).should eq(owner) end end diff --git a/spec/views/layouts/_header_spec.rb b/spec/views/layouts/_header_spec.rb index 806e05d89..7680ca972 100644 --- a/spec/views/layouts/_header_spec.rb +++ b/spec/views/layouts/_header_spec.rb @@ -59,16 +59,16 @@ describe 'layouts/_header.html.haml', :type => "view" do assert_select("a[href=#{member_path(@member)}]", "Profile") end it "should show link to member's gardens" do - assert_select("a[href=#{gardens_path(:owner_id => @member.id)}]", "Gardens") + assert_select("a[href=#{gardens_by_owner_path(:owner => @member.slug)}]", "Gardens") end it "should show link to member's plantings" do - assert_select("a[href=#{plantings_path(:owner_id => @member.id)}]", "Plantings") + assert_select("a[href=#{plantings_by_owner_path(:owner => @member.slug)}]", "Plantings") end it "should show link to member's seeds" do - assert_select("a[href=#{seeds_path(:owner_id => @member.id)}]", "Seeds") + assert_select("a[href=#{seeds_by_owner_path(:owner => @member.slug)}]", "Seeds") end it "should show link to member's posts" do - assert_select("a[href=#{posts_path(:author_id => @member.id)}]", "Posts") + assert_select("a[href=#{posts_by_author_path(:author => @member.slug)}]", "Posts") end end diff --git a/spec/views/posts/index.rss.haml_spec.rb b/spec/views/posts/index.rss.haml_spec.rb index cd5f74c4d..1b32096d3 100644 --- a/spec/views/posts/index.rss.haml_spec.rb +++ b/spec/views/posts/index.rss.haml_spec.rb @@ -3,10 +3,10 @@ require 'spec_helper' describe 'posts/index.rss.haml', :type => "view" do before(:each) do controller.stub(:current_user) { nil } - @author = FactoryGirl.create(:member) + author = FactoryGirl.create(:member) assign(:posts, [ - FactoryGirl.build(:post, :id => 1, :author => @author), - FactoryGirl.build(:post, :id => 2, :author => @author) + FactoryGirl.build(:post, :id => 1, :author => author), + FactoryGirl.build(:post, :id => 2, :author => author) ]) render end From b8e0f135f0bc07626d3c66175127e42f9ab8baf2 Mon Sep 17 00:00:00 2001 From: Skud Date: Fri, 26 Jul 2013 15:45:13 +1000 Subject: [PATCH 12/14] rearranged navbar yet again --- app/views/layouts/_header.html.haml | 58 ++++++++++++++--------------- spec/views/layouts/_header_spec.rb | 8 ---- 2 files changed, 28 insertions(+), 38 deletions(-) diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml index ad9691a6e..e7bf95149 100644 --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -8,19 +8,6 @@ %a.brand(href=root_path)= Growstuff::Application.config.site_name .nav-collapse.collapse %ul.nav - - if member_signed_in? - %li.dropdown< - %a.dropdown-toggle{'data-toggle' => 'dropdown', :href => root_path} - Your Stuff - %b.caret - %ul.dropdown-menu - %li= link_to "Profile", member_path(current_member) - %li= link_to "Gardens", gardens_by_owner_path(:owner => current_member.slug) - %li= link_to "Plantings", plantings_by_owner_path(:owner => current_member.slug) - %li= link_to "Seeds", seeds_by_owner_path(:owner => current_member.slug) - %li= link_to "Posts", posts_by_author_path(:author => current_member.slug) - - %ul.dropdown-menu %li= link_to "Crops", crops_path %li= link_to "Seeds", seeds_path %li.dropdown< @@ -31,27 +18,38 @@ %li= link_to "Members", members_path %li= link_to "Posts", posts_path %li= link_to "Forums", forums_path - - if member_signed_in? - %li= link_to "Shop", shop_path - -if member_signed_in? and current_member.has_role?(:admin) - %li= link_to "Admin", admin_path + %li.divider-vertical + - if member_signed_in? %li.dropdown< - %a.dropdown-toggle{'data-toggle' => 'dropdown', :href => member_path(current_member)} - = current_member.login_name + %a.dropdown-toggle{'data-toggle' => 'dropdown', :href => root_path} + - if current_member.notifications.unread_count > 0 + Your Stuff (#{current_member.notifications.unread_count}) + - else + Your Stuff %b.caret - %ul.dropdown-menu - %li= link_to "Settings", edit_member_registration_path - %li= link_to "Account", orders_path - %li= link_to "Sign out", destroy_member_session_path, :method => :delete - %li - - if current_member.notifications.unread_count > 0 - = link_to("Inbox (#{current_member.notifications.unread_count})", notifications_path) - - else - = link_to("Inbox", notifications_path) + %ul.dropdown-menu + %li= link_to "Profile", member_path(current_member) + %li= link_to "Gardens", gardens_by_owner_path(:owner => current_member.slug) + %li= link_to "Plantings", plantings_by_owner_path(:owner => current_member.slug) + %li= link_to "Seeds", seeds_by_owner_path(:owner => current_member.slug) + %li= link_to "Posts", posts_by_author_path(:author => current_member.slug) + %li= link_to "Account", orders_path + %li + - if current_member.notifications.unread_count > 0 + = link_to("Inbox (#{current_member.notifications.unread_count})", notifications_path) + - else + = link_to("Inbox", notifications_path) + + %li= link_to "Shop", shop_path + - if current_member.has_role?(:admin) + %li= link_to "Admin", admin_path + + - if member_signed_in? + %li= link_to "Sign out", destroy_member_session_path, :method => :delete - else - %li.pull-right= link_to 'Sign in', new_member_session_path - %li.pull-right= link_to 'Sign up', new_member_registration_path + %li= link_to 'Sign in', new_member_session_path + %li= link_to 'Sign up', new_member_registration_path diff --git a/spec/views/layouts/_header_spec.rb b/spec/views/layouts/_header_spec.rb index 7680ca972..9e7778ec9 100644 --- a/spec/views/layouts/_header_spec.rb +++ b/spec/views/layouts/_header_spec.rb @@ -76,14 +76,6 @@ describe 'layouts/_header.html.haml', :type => "view" do rendered.should contain /member\d+/ end - it "should show settings link" do - assert_select "a[href=/members/edit]", "Settings" - end - - it "should show account link" do - assert_select "a[href=#{orders_path}]", "Account" - end - it 'should show signout link' do rendered.should contain 'Sign out' end From a56af4e88f23fea1f6f17340e895ad3e85043341 Mon Sep 17 00:00:00 2001 From: Skud Date: Sat, 27 Jul 2013 11:38:23 +1000 Subject: [PATCH 13/14] removed test for member name in navbar --- spec/views/layouts/_header_spec.rb | 7 ------- 1 file changed, 7 deletions(-) diff --git a/spec/views/layouts/_header_spec.rb b/spec/views/layouts/_header_spec.rb index 9e7778ec9..0c287aa8a 100644 --- a/spec/views/layouts/_header_spec.rb +++ b/spec/views/layouts/_header_spec.rb @@ -55,9 +55,6 @@ describe 'layouts/_header.html.haml', :type => "view" do it 'should have a Your Stuff section' do rendered.should contain "Your Stuff" end - it "should show link to member's profile" do - assert_select("a[href=#{member_path(@member)}]", "Profile") - end it "should show link to member's gardens" do assert_select("a[href=#{gardens_by_owner_path(:owner => @member.slug)}]", "Gardens") end @@ -72,10 +69,6 @@ describe 'layouts/_header.html.haml', :type => "view" do end end - it 'should show login name' do - rendered.should contain /member\d+/ - end - it 'should show signout link' do rendered.should contain 'Sign out' end From 9fe975378da0a21d3565d1bd819c7c71679de7a4 Mon Sep 17 00:00:00 2001 From: Skud Date: Mon, 29 Jul 2013 12:04:59 +1000 Subject: [PATCH 14/14] yet another slight rearrangement of the navbar --- app/views/layouts/_header.html.haml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml index e7bf95149..07c664a35 100644 --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -19,7 +19,7 @@ %li= link_to "Posts", posts_path %li= link_to "Forums", forums_path - %li.divider-vertical + %li.divider-vertical - if member_signed_in? %li.dropdown< @@ -46,7 +46,6 @@ - if current_member.has_role?(:admin) %li= link_to "Admin", admin_path - - if member_signed_in? %li= link_to "Sign out", destroy_member_session_path, :method => :delete - else