Merge branch 'dev' into places2

Conflicts:
	app/views/members/_popover.html.haml
This commit is contained in:
Miles Gould
2013-08-28 13:02:25 +01:00
25 changed files with 95 additions and 51 deletions

View File

@@ -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])

View File

@@ -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,

View File

@@ -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'

View File

@@ -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', :counter_cache => true
belongs_to :crop, :counter_cache => true
has_one :owner, :through => :garden
has_and_belongs_to_many :photos
before_destroy {|planting| planting.photos.clear}
@@ -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

View File

@@ -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

View File

@@ -5,4 +5,4 @@
= crop.scientific_names.first.scientific_name
%br/
Planted
= pluralize(crop.plantings_count, "time")
= pluralize(crop.plantings.size, "time")

View File

@@ -11,4 +11,4 @@
%br/
%small
Planted
= pluralize(crop.plantings_count, "time")
= pluralize(crop.plantings.size, "time")

View File

@@ -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' }

View File

@@ -8,8 +8,8 @@
= 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")

View File

@@ -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

View File

@@ -0,0 +1,5 @@
class AddOwnerToPlanting < ActiveRecord::Migration
def change
add_column :plantings, :owner_id, :integer
end
end

View File

@@ -0,0 +1,5 @@
class AddPlantingsCountToMember < ActiveRecord::Migration
def change
add_column :members, :plantings_count, :integer
end
end

View File

@@ -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 => 20130826023159) do
create_table "account_types", :force => true do |t|
t.string "name", :null => false
@@ -116,6 +116,7 @@ ActiveRecord::Schema.define(:version => 20130821073736) 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
@@ -192,6 +193,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

View File

@@ -138,14 +138,35 @@ 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
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
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

View File

@@ -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

View File

@@ -6,8 +6,12 @@
# 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
# Default format is:
# echo "YYYY-MM-DD - do something or other"
# rake growstuff:oneoff:something
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
echo "2013-08-26 - initialize member planting count"
rake growstuff:oneoff:initialize_member_planting_count

View File

@@ -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 }

View File

@@ -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

View File

@@ -1,6 +1,7 @@
FactoryGirl.define do
factory :planting do
garden
owner
crop
planted_at Date.today
quantity 33

View File

@@ -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

View File

@@ -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
@@ -68,12 +68,10 @@ 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
)
@member.plantings.count.should eq 1
@planting = FactoryGirl.create(:planting, :owner => @member)
@member.plantings.size.should eq 1
end
it "has many comments" do
@@ -275,7 +273,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

View File

@@ -4,19 +4,24 @@ 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
@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
@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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,