From b31bdbb325965a2bf7cc8ffa3b423a972229e570 Mon Sep 17 00:00:00 2001 From: Miles Gould Date: Sat, 24 Aug 2013 00:00:43 +0100 Subject: [PATCH 1/8] Make "rake" depend on "rake db:test:prepare". This also tests for pending migrations. --- lib/tasks/testing.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/testing.rake b/lib/tasks/testing.rake index cb58df2c9..1f7f000ef 100644 --- a/lib/tasks/testing.rake +++ b/lib/tasks/testing.rake @@ -2,7 +2,7 @@ require 'rake' begin require 'rspec/core/rake_task' task(:spec).clear - RSpec::Core::RakeTask.new(:spec) do |t| + RSpec::Core::RakeTask.new(:spec => 'db:test:prepare') do |t| t.verbose = false end rescue LoadError From 1ad416269d60ba7278349fbb369a29f1a6f522d5 Mon Sep 17 00:00:00 2001 From: Skud Date: Mon, 26 Aug 2013 11:33:16 +1000 Subject: [PATCH 2/8] Added owner to planting Previously we got the owner indirectly, through the garden in which the planting was planted. Now we're directly specifying an owner. This allows us to let people plant things in each other's gardens. Tests are probably broken at this point; we're about to refactor ALL THE THINGS. --- app/models/member.rb | 2 +- app/models/planting.rb | 4 ++-- .../20130826012139_add_owner_to_planting.rb | 5 +++++ db/schema.rb | 3 ++- spec/factories/planting.rb | 1 + spec/models/member_spec.rb | 8 +++----- spec/models/planting_spec.rb | 15 ++++++++++----- 7 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 db/migrate/20130826012139_add_owner_to_planting.rb diff --git a/app/models/member.rb b/app/models/member.rb index 4d93bce4a..97dff0c25 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -7,7 +7,7 @@ class Member < ActiveRecord::Base has_many :forums, :foreign_key => 'owner_id' has_many :gardens, :foreign_key => 'owner_id' - has_many :plantings, :through => :gardens + has_many :plantings, :foreign_key => 'owner_id' has_many :seeds, :foreign_key => 'owner_id' diff --git a/app/models/planting.rb b/app/models/planting.rb index cf9e9aea3..02f0fc6a8 100644 --- a/app/models/planting.rb +++ b/app/models/planting.rb @@ -3,11 +3,11 @@ class Planting < ActiveRecord::Base friendly_id :planting_slug, use: :slugged attr_accessible :crop_id, :description, :garden_id, :planted_at, - :quantity, :sunniness, :planted_from + :quantity, :sunniness, :planted_from, :owner_id belongs_to :garden + belongs_to :owner, :class_name => 'Member' belongs_to :crop, :counter_cache => true - has_one :owner, :through => :garden has_and_belongs_to_many :photos before_destroy {|planting| planting.photos.clear} diff --git a/db/migrate/20130826012139_add_owner_to_planting.rb b/db/migrate/20130826012139_add_owner_to_planting.rb new file mode 100644 index 000000000..0f32568b2 --- /dev/null +++ b/db/migrate/20130826012139_add_owner_to_planting.rb @@ -0,0 +1,5 @@ +class AddOwnerToPlanting < ActiveRecord::Migration + def change + add_column :plantings, :owner_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 2237703ee..3c6a2f151 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130821073736) do +ActiveRecord::Schema.define(:version => 20130826012139) do create_table "account_types", :force => true do |t| t.string "name", :null => false @@ -192,6 +192,7 @@ ActiveRecord::Schema.define(:version => 20130821073736) do t.string "slug" t.string "sunniness" t.string "planted_from" + t.integer "owner_id" end add_index "plantings", ["slug"], :name => "index_plantings_on_slug", :unique => true diff --git a/spec/factories/planting.rb b/spec/factories/planting.rb index 58f67f653..6bfe8554c 100644 --- a/spec/factories/planting.rb +++ b/spec/factories/planting.rb @@ -1,6 +1,7 @@ FactoryGirl.define do factory :planting do garden + owner crop planted_at Date.today quantity 33 diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb index 2dc6be3c6..870375f91 100644 --- a/spec/models/member_spec.rb +++ b/spec/models/member_spec.rb @@ -68,11 +68,9 @@ describe 'member' do @member.gardens.first.name.should eq "Garden" end - it 'has many plantings through gardens' do + it 'has many plantings' do @member.save - @planting = FactoryGirl.create(:planting, - :garden => @member.gardens.first - ) + @planting = FactoryGirl.create(:planting, :owner => @member) @member.plantings.count.should eq 1 end @@ -263,7 +261,7 @@ describe 'member' do @member4 = FactoryGirl.create(:unconfirmed_member) [@member1, @member2, @member3, @member4].each do |m| - FactoryGirl.create(:planting, :garden => m.gardens.first) + FactoryGirl.create(:planting, :owner => m) end @member1.updated_at = 3.days.ago diff --git a/spec/models/planting_spec.rb b/spec/models/planting_spec.rb index d730414aa..5828a15d1 100644 --- a/spec/models/planting_spec.rb +++ b/spec/models/planting_spec.rb @@ -4,15 +4,20 @@ describe Planting do before(:each) do @crop = FactoryGirl.create(:tomato) - @member = FactoryGirl.create(:member) - @garden = FactoryGirl.create(:garden, :owner => @member) + @garden_owner = FactoryGirl.create(:member) + @garden = FactoryGirl.create(:garden, :owner => @garden_owner) @planting = FactoryGirl.create(:planting, :crop => @crop, :garden => @garden) end - it "generates an owner" do + it 'has an owner' do @planting.owner.should be_an_instance_of Member - @planting.owner.login_name.should match /^member\d+$/ + end + + it "owner isn't necessarily the garden owner" do + # a new owner should be created automatically by FactoryGirl + # note that formerly, the planting belonged to an owner through the garden + @planting.owner.should_not eq @garden_owner end it "generates a location" do @@ -194,7 +199,7 @@ describe Planting do # this one is newer, and has the same owner, through the garden @planting2 = FactoryGirl.create(:planting, :created_at => 1.minute.ago, - :garden_id => @planting1.garden.id + :owner_id => @planting1.owner.id ) @planting2.photos << FactoryGirl.create(:photo) @planting2.save From 475a4021330acd9c5189652d970ff82b7635c721 Mon Sep 17 00:00:00 2001 From: Skud Date: Mon, 26 Aug 2013 12:17:23 +1000 Subject: [PATCH 3/8] Refactor ALL THE THINGS Refactored tests to take into account that plantings now have owners directly, not via gardens. Mostly this was just tweaking FactoryGirl calls to do the right thing. --- app/models/planting.rb | 2 +- app/views/plantings/_list.html.haml | 2 +- spec/controllers/photos_controller_spec.rb | 7 +++---- spec/models/planting_spec.rb | 2 +- spec/views/home/_members.html.haml_spec.rb | 2 +- spec/views/home/index_spec.rb | 2 +- spec/views/plantings/index.html.haml_spec.rb | 3 ++- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/models/planting.rb b/app/models/planting.rb index 02f0fc6a8..751b262e5 100644 --- a/app/models/planting.rb +++ b/app/models/planting.rb @@ -53,7 +53,7 @@ class Planting < ActiveRecord::Base "#{owner.login_name}-#{garden}-#{crop}".downcase.gsub(' ', '-') end - # location = owner + garden, i.e. "Skud's backyard" + # location = garden owner + garden name, i.e. "Skud's backyard" def location return "#{garden.owner.login_name}'s #{garden}" end diff --git a/app/views/plantings/_list.html.haml b/app/views/plantings/_list.html.haml index 6c9812222..5374c815a 100644 --- a/app/views/plantings/_list.html.haml +++ b/app/views/plantings/_list.html.haml @@ -7,7 +7,7 @@ = link_to p.crop, p.crop in = succeed "'s" do - = link_to p.owner, p.owner + = link_to p.garden.owner, p.garden.owner = link_to p.garden, p.garden %br/ %small diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb index 9618c5b45..a73981e4c 100644 --- a/spec/controllers/photos_controller_spec.rb +++ b/spec/controllers/photos_controller_spec.rb @@ -4,7 +4,6 @@ describe PhotosController do login_member - def valid_attributes member = FactoryGirl.create(:member) { @@ -67,7 +66,7 @@ describe PhotosController do member = FactoryGirl.create(:member) controller.stub(:current_member) { member } garden = FactoryGirl.create(:garden, :owner => member) - planting = FactoryGirl.create(:planting, :garden => garden) + planting = FactoryGirl.create(:planting, :garden => garden, :owner => member) photo = FactoryGirl.create(:photo, :owner => member) post :create, {:photo => { :flickr_photo_id => photo.flickr_photo_id }, :planting_id => planting.id } @@ -78,7 +77,7 @@ describe PhotosController do member = FactoryGirl.create(:member) controller.stub(:current_member) { member } garden = FactoryGirl.create(:garden, :owner => member) - planting = FactoryGirl.create(:planting, :garden => garden) + planting = FactoryGirl.create(:planting, :garden => garden, :owner => member) photo = FactoryGirl.create(:photo, :owner => member) post :create, {:photo => { :flickr_photo_id => photo.flickr_photo_id }, :planting_id => planting.id } @@ -104,7 +103,7 @@ describe PhotosController do member = FactoryGirl.create(:member) controller.stub(:current_member) { member } garden = FactoryGirl.create(:garden, :owner => member) - planting = FactoryGirl.create(:planting, :garden => garden) + planting = FactoryGirl.create(:planting, :garden => garden, :owner => member) photo = FactoryGirl.create(:photo, :owner => member) post :create, {:photo => { :flickr_photo_id => photo.flickr_photo_id }, :planting_id => planting.id } diff --git a/spec/models/planting_spec.rb b/spec/models/planting_spec.rb index 5828a15d1..dfc7bbe39 100644 --- a/spec/models/planting_spec.rb +++ b/spec/models/planting_spec.rb @@ -21,7 +21,7 @@ describe Planting do end it "generates a location" do - @planting.location.should match /^member\d+'s Springfield Community Garden$/ + @planting.location.should eq "#{@garden_owner.login_name}'s #{@garden.name}" end it "sorts plantings in descending order of creation" do diff --git a/spec/views/home/_members.html.haml_spec.rb b/spec/views/home/_members.html.haml_spec.rb index 84570662f..f6498c243 100644 --- a/spec/views/home/_members.html.haml_spec.rb +++ b/spec/views/home/_members.html.haml_spec.rb @@ -6,7 +6,7 @@ describe 'home/_members.html.haml', :type => "view" do @member.updated_at = 2.days.ago assign(:members, [@member]) - @planting = FactoryGirl.create(:planting, :garden => @member.gardens.first) + @planting = FactoryGirl.create(:planting, :owner => @member) render end diff --git a/spec/views/home/index_spec.rb b/spec/views/home/index_spec.rb index 478f5815b..f94892b9c 100644 --- a/spec/views/home/index_spec.rb +++ b/spec/views/home/index_spec.rb @@ -9,7 +9,7 @@ describe 'home/index.html.haml', :type => "view" do @post = FactoryGirl.create(:post, :author => @member) assign(:posts, [@post]) - @planting = FactoryGirl.create(:planting, :garden => @member.gardens.first) + @planting = FactoryGirl.create(:planting, :owner => @member) assign(:plantings, [@planting]) @crop = FactoryGirl.create(:crop) diff --git a/spec/views/plantings/index.html.haml_spec.rb b/spec/views/plantings/index.html.haml_spec.rb index b660fe2a1..a3df530bd 100644 --- a/spec/views/plantings/index.html.haml_spec.rb +++ b/spec/views/plantings/index.html.haml_spec.rb @@ -14,7 +14,8 @@ describe "plantings/index" do pager.replace([ FactoryGirl.create(:planting, :garden => @garden, - :crop => @tomato + :crop => @tomato, + :owner => @member ), FactoryGirl.create(:planting, :garden => @garden, From ff2a3cf8b21084af6bb9231be6ee450a3b04e29e Mon Sep 17 00:00:00 2001 From: Skud Date: Mon, 26 Aug 2013 12:23:41 +1000 Subject: [PATCH 4/8] Set planting owner automatically in controller --- app/controllers/plantings_controller.rb | 1 + spec/controllers/plantings_controller_spec.rb | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/app/controllers/plantings_controller.rb b/app/controllers/plantings_controller.rb index 740edb5b3..a5b781bab 100644 --- a/app/controllers/plantings_controller.rb +++ b/app/controllers/plantings_controller.rb @@ -58,6 +58,7 @@ class PlantingsController < ApplicationController # POST /plantings # POST /plantings.json def create + params[:planting][:owner_id] = current_member.id params[:planted_at] = parse_date(params[:planted_at]) @planting = Planting.new(params[:planting]) diff --git a/spec/controllers/plantings_controller_spec.rb b/spec/controllers/plantings_controller_spec.rb index 2bc3367ec..7e6a75d22 100644 --- a/spec/controllers/plantings_controller_spec.rb +++ b/spec/controllers/plantings_controller_spec.rb @@ -49,6 +49,11 @@ describe PlantingsController do assigns(:planting).planted_at.should == Date.today end + it "sets the owner automatically" do + post :create, { :planting => valid_attributes } + assigns(:planting).owner.should eq subject.current_member + end + end end From 73b7897c2837cd170e7447ce49a3c94e517259b7 Mon Sep 17 00:00:00 2001 From: Skud Date: Mon, 26 Aug 2013 12:28:01 +1000 Subject: [PATCH 5/8] Added rake task to update planting owner (using planting.garden.owner) --- lib/tasks/growstuff.rake | 10 ++++++++++ script/deploy-tasks.sh | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/tasks/growstuff.rake b/lib/tasks/growstuff.rake index 8b9a1bada..c0be3f8c3 100644 --- a/lib/tasks/growstuff.rake +++ b/lib/tasks/growstuff.rake @@ -147,5 +147,15 @@ namespace :growstuff do end end + + desc "August 2013: set planting owner" + task :set_planting_owner => :environment do + Planting.find_each do |p| + p.owner = p.garden.owner + p.save + end + end + end + end diff --git a/script/deploy-tasks.sh b/script/deploy-tasks.sh index c7b85de08..4238ae50c 100755 --- a/script/deploy-tasks.sh +++ b/script/deploy-tasks.sh @@ -6,8 +6,8 @@ # when it was added. This will help us know which ones have been run # and can safely be commented out or removed. -echo "2013-08-18 - reset crop planting counts" -rake growstuff:oneoff:reset_crop_plantings_count - echo "2013-08-21 - set default crop creator" rake growstuff:oneoff:set_default_crop_creator + +echo "2013-08-26 - set planting owner" +rake growstuff:oneoff:set_planting_owner From 42e3b5e04edda58b0366ae17b4d6b0aa2afff595 Mon Sep 17 00:00:00 2001 From: Skud Date: Mon, 26 Aug 2013 12:41:10 +1000 Subject: [PATCH 6/8] Added plantings_count (i.e. counter_cache) to Member Also removed the superfluous .plantings_count method on Crop, which was causing some confusion. A thing we learned today: we should use .size to find the size of ActiveRecord collections, not .count, because .count doesn't use the cache (while .size does). --- app/models/planting.rb | 2 +- db/migrate/20130826023159_add_plantings_count_to_member.rb | 5 +++++ db/schema.rb | 3 ++- lib/tasks/growstuff.rake | 7 +++++++ script/deploy-tasks.sh | 3 +++ 5 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20130826023159_add_plantings_count_to_member.rb diff --git a/app/models/planting.rb b/app/models/planting.rb index 751b262e5..61188f184 100644 --- a/app/models/planting.rb +++ b/app/models/planting.rb @@ -6,7 +6,7 @@ class Planting < ActiveRecord::Base :quantity, :sunniness, :planted_from, :owner_id belongs_to :garden - belongs_to :owner, :class_name => 'Member' + belongs_to :owner, :class_name => 'Member', :counter_cache => true belongs_to :crop, :counter_cache => true has_and_belongs_to_many :photos diff --git a/db/migrate/20130826023159_add_plantings_count_to_member.rb b/db/migrate/20130826023159_add_plantings_count_to_member.rb new file mode 100644 index 000000000..06819f61c --- /dev/null +++ b/db/migrate/20130826023159_add_plantings_count_to_member.rb @@ -0,0 +1,5 @@ +class AddPlantingsCountToMember < ActiveRecord::Migration + def change + add_column :members, :plantings_count, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 3c6a2f151..179f7e82b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130826012139) do +ActiveRecord::Schema.define(:version => 20130826023159) do create_table "account_types", :force => true do |t| t.string "name", :null => false @@ -116,6 +116,7 @@ ActiveRecord::Schema.define(:version => 20130826012139) do t.float "longitude" t.boolean "send_notification_email", :default => true t.text "bio" + t.integer "plantings_count" end add_index "members", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true diff --git a/lib/tasks/growstuff.rake b/lib/tasks/growstuff.rake index c0be3f8c3..90e36df29 100644 --- a/lib/tasks/growstuff.rake +++ b/lib/tasks/growstuff.rake @@ -156,6 +156,13 @@ namespace :growstuff do end end + desc "August 2013: initialize member planting counter" + task :initialize_member_planting_count => :environment do + Member.find_each do |m| + Member.reset_counters m.id, :plantings + end + end + end end diff --git a/script/deploy-tasks.sh b/script/deploy-tasks.sh index 4238ae50c..d94f03ed9 100755 --- a/script/deploy-tasks.sh +++ b/script/deploy-tasks.sh @@ -11,3 +11,6 @@ rake growstuff:oneoff:set_default_crop_creator echo "2013-08-26 - set planting owner" rake growstuff:oneoff:set_planting_owner + +echo "2013-08-26 - initialize member planting count" +rake growstuff:oneoff:initialize_member_planting_count From 99bfc704dc4789cdc42d0e1518654394f41948c9 Mon Sep 17 00:00:00 2001 From: Skud Date: Mon, 26 Aug 2013 12:41:10 +1000 Subject: [PATCH 7/8] Added plantings_count (i.e. counter_cache) to Member Also removed the superfluous .plantings_count method on Crop, which was causing some confusion. A thing we learned today: we should use .size to find the size of ActiveRecord collections, not .count, because .count doesn't use the cache (while .size does). --- app/models/crop.rb | 4 ---- app/models/planting.rb | 2 +- app/views/crops/_index_card.html.haml | 2 +- app/views/crops/_popover.html.haml | 2 +- app/views/crops/_thumbnail.html.haml | 2 +- app/views/crops/show.html.haml | 6 +++--- app/views/members/_popover.html.haml | 6 +++--- db/migrate/20130826023159_add_plantings_count_to_member.rb | 5 +++++ db/schema.rb | 3 ++- lib/tasks/growstuff.rake | 7 +++++++ script/deploy-tasks.sh | 3 +++ spec/models/crop_spec.rb | 7 ++++--- spec/models/member_spec.rb | 4 ++-- 13 files changed, 33 insertions(+), 20 deletions(-) create mode 100644 db/migrate/20130826023159_add_plantings_count_to_member.rb diff --git a/app/models/crop.rb b/app/models/crop.rb index 46eadf535..9717eb1da 100644 --- a/app/models/crop.rb +++ b/app/models/crop.rb @@ -39,10 +39,6 @@ class Crop < ActiveRecord::Base end end - def plantings_count - return plantings.count - end - # crop.default_photo # currently returns the first available photo, but exists so that # later we can choose a default photo based on different criteria, diff --git a/app/models/planting.rb b/app/models/planting.rb index 751b262e5..61188f184 100644 --- a/app/models/planting.rb +++ b/app/models/planting.rb @@ -6,7 +6,7 @@ class Planting < ActiveRecord::Base :quantity, :sunniness, :planted_from, :owner_id belongs_to :garden - belongs_to :owner, :class_name => 'Member' + belongs_to :owner, :class_name => 'Member', :counter_cache => true belongs_to :crop, :counter_cache => true has_and_belongs_to_many :photos diff --git a/app/views/crops/_index_card.html.haml b/app/views/crops/_index_card.html.haml index c63f6ea05..640a3bcda 100644 --- a/app/views/crops/_index_card.html.haml +++ b/app/views/crops/_index_card.html.haml @@ -12,7 +12,7 @@ %p %b Planted - = pluralize(crop.plantings_count, "time") + = pluralize(crop.plantings.size, "time") by #{Growstuff::Application.config.site_name} members - if can? :create, Planting diff --git a/app/views/crops/_popover.html.haml b/app/views/crops/_popover.html.haml index c692f3d51..0c40b6ec7 100644 --- a/app/views/crops/_popover.html.haml +++ b/app/views/crops/_popover.html.haml @@ -5,4 +5,4 @@ = crop.scientific_names.first.scientific_name %br/ Planted - = pluralize(crop.plantings_count, "time") + = pluralize(crop.plantings.size, "time") diff --git a/app/views/crops/_thumbnail.html.haml b/app/views/crops/_thumbnail.html.haml index 1337b8f0d..aaaead82c 100644 --- a/app/views/crops/_thumbnail.html.haml +++ b/app/views/crops/_thumbnail.html.haml @@ -11,4 +11,4 @@ %br/ %small Planted - = pluralize(crop.plantings_count, "time") + = pluralize(crop.plantings.size, "time") diff --git a/app/views/crops/show.html.haml b/app/views/crops/show.html.haml index 713445005..952d6c5e4 100644 --- a/app/views/crops/show.html.haml +++ b/app/views/crops/show.html.haml @@ -9,9 +9,9 @@ = render :partial => 'planting_advice', :locals => { :crop => @crop } %p - - if @crop.plantings_count > 0 + - if @crop.plantings.size > 0 Planted - = pluralize(@crop.plantings_count, "time") + = pluralize(@crop.plantings.size, "time") by #{Growstuff::Application.config.site_name} members - else Nobody is growing this yet. You could be the first! @@ -25,7 +25,7 @@ - if can? :create, Seed = link_to 'Add seeds to stash', new_seed_path(:params => { :crop_id => @crop.id }), :class => 'btn btn-primary' - - if @crop.plantings_count > 0 + - if @crop.plantings.size > 0 - @crop.plantings.each do |p| = render :partial => "plantings/thumbnail", :locals => { :planting => p, :title => 'owner' } diff --git a/app/views/members/_popover.html.haml b/app/views/members/_popover.html.haml index 8e17a48e0..1cd295f73 100644 --- a/app/views/members/_popover.html.haml +++ b/app/views/members/_popover.html.haml @@ -8,9 +8,9 @@ = distance_of_time_in_words(member.created_at, Time.zone.now) ago. %p - = pluralize(member.gardens.count, "garden") + = pluralize(member.gardens.size, "garden") %br/ - = pluralize(member.plantings.count, "planting") + = pluralize(member.plantings.size, "planting") %br/ - = pluralize(member.seeds.count, "seed") + = pluralize(member.seeds.size, "seed") diff --git a/db/migrate/20130826023159_add_plantings_count_to_member.rb b/db/migrate/20130826023159_add_plantings_count_to_member.rb new file mode 100644 index 000000000..06819f61c --- /dev/null +++ b/db/migrate/20130826023159_add_plantings_count_to_member.rb @@ -0,0 +1,5 @@ +class AddPlantingsCountToMember < ActiveRecord::Migration + def change + add_column :members, :plantings_count, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 3c6a2f151..179f7e82b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130826012139) do +ActiveRecord::Schema.define(:version => 20130826023159) do create_table "account_types", :force => true do |t| t.string "name", :null => false @@ -116,6 +116,7 @@ ActiveRecord::Schema.define(:version => 20130826012139) do t.float "longitude" t.boolean "send_notification_email", :default => true t.text "bio" + t.integer "plantings_count" end add_index "members", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true diff --git a/lib/tasks/growstuff.rake b/lib/tasks/growstuff.rake index c0be3f8c3..90e36df29 100644 --- a/lib/tasks/growstuff.rake +++ b/lib/tasks/growstuff.rake @@ -156,6 +156,13 @@ namespace :growstuff do end end + desc "August 2013: initialize member planting counter" + task :initialize_member_planting_count => :environment do + Member.find_each do |m| + Member.reset_counters m.id, :plantings + end + end + end end diff --git a/script/deploy-tasks.sh b/script/deploy-tasks.sh index 4238ae50c..d94f03ed9 100755 --- a/script/deploy-tasks.sh +++ b/script/deploy-tasks.sh @@ -11,3 +11,6 @@ rake growstuff:oneoff:set_default_crop_creator echo "2013-08-26 - set planting owner" rake growstuff:oneoff:set_planting_owner + +echo "2013-08-26 - initialize member planting count" +rake growstuff:oneoff:initialize_member_planting_count diff --git a/spec/models/crop_spec.rb b/spec/models/crop_spec.rb index 55386a7b4..f7f606736 100644 --- a/spec/models/crop_spec.rb +++ b/spec/models/crop_spec.rb @@ -61,9 +61,10 @@ describe Crop do it 'counts plantings' do @crop = FactoryGirl.create(:tomato) - @crop.plantings_count.should eq 0 - FactoryGirl.create(:planting, :crop => @crop) - @crop.plantings_count.should eq 1 + @crop.plantings.size.should eq 0 + @planting = FactoryGirl.create(:planting, :crop => @crop) + @crop.reload + @crop.plantings.size.should eq 1 end it 'validates en_wikipedia_url' do diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb index 870375f91..d798bd286 100644 --- a/spec/models/member_spec.rb +++ b/spec/models/member_spec.rb @@ -32,7 +32,7 @@ describe 'member' do it 'should have a default garden' do @member.save - @member.gardens.count.should == 1 + @member.gardens.size.should == 1 end it 'should have a accounts entry' do @@ -71,7 +71,7 @@ describe 'member' do it 'has many plantings' do @member.save @planting = FactoryGirl.create(:planting, :owner => @member) - @member.plantings.count.should eq 1 + @member.plantings.size.should eq 1 end it "has many comments" do From 7b307ab907c602c664c17117349f74fb59cb2f25 Mon Sep 17 00:00:00 2001 From: Skud Date: Tue, 27 Aug 2013 11:18:41 +1000 Subject: [PATCH 8/8] reined in over-enthusiastic rake task --- lib/tasks/growstuff.rake | 12 ++++++++---- script/deploy-tasks.sh | 8 +++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/tasks/growstuff.rake b/lib/tasks/growstuff.rake index 8b9a1bada..ef458bea3 100644 --- a/lib/tasks/growstuff.rake +++ b/lib/tasks/growstuff.rake @@ -138,12 +138,16 @@ namespace :growstuff do cropbot.account.account_type = AccountType.find_by_name("Staff") # set this just because it's nice cropbot.account.save Crop.find_each do |crop| - crop.creator = cropbot - crop.save + unless crop.creator + crop.creator = cropbot + crop.save + end end ScientificName.find_each do |sn| - sn.creator = cropbot - sn.save + unless sn.creator + sn.creator = cropbot + sn.save + end end end diff --git a/script/deploy-tasks.sh b/script/deploy-tasks.sh index c7b85de08..c0361841e 100755 --- a/script/deploy-tasks.sh +++ b/script/deploy-tasks.sh @@ -6,8 +6,6 @@ # when it was added. This will help us know which ones have been run # and can safely be commented out or removed. -echo "2013-08-18 - reset crop planting counts" -rake growstuff:oneoff:reset_crop_plantings_count - -echo "2013-08-21 - set default crop creator" -rake growstuff:oneoff:set_default_crop_creator +# Default format is: +# echo "YYYY-MM-DD - do something or other" +# rake growstuff:oneoff:something