mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-05-18 21:56:55 -04:00
Merge branch 'dev' into places2
Conflicts: app/views/members/_popover.html.haml
This commit is contained in:
@@ -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])
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -5,4 +5,4 @@
|
||||
= crop.scientific_names.first.scientific_name
|
||||
%br/
|
||||
Planted
|
||||
= pluralize(crop.plantings_count, "time")
|
||||
= pluralize(crop.plantings.size, "time")
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
%br/
|
||||
%small
|
||||
Planted
|
||||
= pluralize(crop.plantings_count, "time")
|
||||
= pluralize(crop.plantings.size, "time")
|
||||
|
||||
@@ -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' }
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
5
db/migrate/20130826012139_add_owner_to_planting.rb
Normal file
5
db/migrate/20130826012139_add_owner_to_planting.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
class AddOwnerToPlanting < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :plantings, :owner_id, :integer
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddPlantingsCountToMember < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :members, :plantings_count, :integer
|
||||
end
|
||||
end
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
FactoryGirl.define do
|
||||
factory :planting do
|
||||
garden
|
||||
owner
|
||||
crop
|
||||
planted_at Date.today
|
||||
quantity 33
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user