Merge branch 'sun_shade_metadata' of https://github.com/Skud/growstuff into Skud-sun_shade_metadata

This commit is contained in:
Skud
2013-07-18 10:21:11 +10:00
7 changed files with 192 additions and 21 deletions

View File

@@ -43,4 +43,24 @@ class Crop < ActiveRecord::Base
return photos.first
end
def sunniness
sunniness = Hash.new(0)
plantings.each do |p|
if !p.sunniness.blank?
sunniness[p.sunniness] += 1
end
end
return sunniness
end
def planted_from
planted_from = Hash.new(0)
plantings.each do |p|
if !p.planted_from.blank?
planted_from[p.planted_from] += 1
end
end
return planted_from
end
end

View File

@@ -14,6 +14,16 @@
= succeed ":" do
= @crop.system_name
!= @crop.varieties.map{ |c| link_to c, c }.join(", ")
- if @crop.planted_from.length > 0
%p
Plant from:
- planted_from = @crop.planted_from.sort_by {|s, freq| freq }.reverse
= planted_from.map {|s, freq| "#{s} (#{freq})" }.join(", ")
- if @crop.sunniness.length > 0
%p
Plant in:
- sunniness = @crop.sunniness.sort_by {|s, freq| freq }.reverse
= sunniness.map {|s, freq| "#{s} (#{freq})" }.join(", ")
- if @crop.plantings_count > 0
%p

View File

@@ -5,7 +5,29 @@ FactoryGirl.define do
planted_at Date.today
quantity 33
description "This is a *really* good plant."
sunniness 'sun'
planted_from 'seed'
factory :seed_planting do
planted_from 'seed'
end
factory :seedling_planting do
planted_from 'seedling'
end
factory :cutting_planting do
planted_from 'cutting'
end
factory :sunny_planting do
sunniness 'sun'
end
factory :semi_shady_planting do
sunniness 'semi-shade'
end
factory :shady_planting do
sunniness 'shade'
end
end
end

View File

@@ -79,4 +79,64 @@ describe Crop do
@crop.default_photo.should be_an_instance_of Photo
end
end
context 'sunniness' do
before(:each) do
@crop = FactoryGirl.create(:tomato)
end
it 'returns a hash of sunniness values' do
planting1 = FactoryGirl.create(:sunny_planting, :crop => @crop)
planting2 = FactoryGirl.create(:sunny_planting, :crop => @crop)
planting3 = FactoryGirl.create(:semi_shady_planting, :crop => @crop)
planting4 = FactoryGirl.create(:shady_planting, :crop => @crop)
@crop.sunniness.should be_an_instance_of Hash
end
it 'counts each sunniness value' do
planting1 = FactoryGirl.create(:sunny_planting, :crop => @crop)
planting2 = FactoryGirl.create(:sunny_planting, :crop => @crop)
planting3 = FactoryGirl.create(:semi_shady_planting, :crop => @crop)
planting4 = FactoryGirl.create(:shady_planting, :crop => @crop)
@crop.sunniness.should == { 'sun' => 2, 'shade' => 1, 'semi-shade' => 1 }
end
it 'ignores unused sunniness values' do
planting1 = FactoryGirl.create(:sunny_planting, :crop => @crop)
planting2 = FactoryGirl.create(:sunny_planting, :crop => @crop)
planting3 = FactoryGirl.create(:semi_shady_planting, :crop => @crop)
@crop.sunniness.should == { 'sun' => 2, 'semi-shade' => 1 }
end
end
context 'planted_from' do
before(:each) do
@crop = FactoryGirl.create(:tomato)
end
it 'returns a hash of sunniness values' do
planting1 = FactoryGirl.create(:seed_planting, :crop => @crop)
planting2 = FactoryGirl.create(:seed_planting, :crop => @crop)
planting3 = FactoryGirl.create(:seedling_planting, :crop => @crop)
planting4 = FactoryGirl.create(:cutting_planting, :crop => @crop)
@crop.planted_from.should be_an_instance_of Hash
end
it 'counts each planted_from value' do
planting1 = FactoryGirl.create(:seed_planting, :crop => @crop)
planting2 = FactoryGirl.create(:seed_planting, :crop => @crop)
planting3 = FactoryGirl.create(:seedling_planting, :crop => @crop)
planting4 = FactoryGirl.create(:cutting_planting, :crop => @crop)
@crop.planted_from.should == { 'seed' => 2, 'seedling' => 1, 'cutting' => 1 }
end
it 'ignores unused planted_from values' do
planting1 = FactoryGirl.create(:seed_planting, :crop => @crop)
planting2 = FactoryGirl.create(:seed_planting, :crop => @crop)
planting3 = FactoryGirl.create(:seedling_planting, :crop => @crop)
@crop.planted_from.should == { 'seed' => 2, 'seedling' => 1 }
end
end
end

View File

@@ -50,6 +50,10 @@ describe Planting do
end
context 'sunniness' do
before(:each) do
@planting = FactoryGirl.create(:sunny_planting)
end
it 'should have a sunniness value' do
@planting.sunniness.should eq 'sun'
end
@@ -70,6 +74,7 @@ describe Planting do
context 'planted from' do
it 'should have a planted_from value' do
@planting = FactoryGirl.create(:seed_planting)
@planting.planted_from.should eq 'seed'
end

View File

@@ -6,15 +6,7 @@ describe "crops/show" do
@crop = FactoryGirl.create(:maize,
:scientific_names => [ FactoryGirl.create(:zea_mays) ]
)
@owner = FactoryGirl.create(:member)
@garden = FactoryGirl.create(:garden, :owner => @owner)
@planting = FactoryGirl.create(:planting,
:garden => @garden,
:crop => @crop
)
assign(:crop, @crop)
end
it "shows the wikipedia URL" do
@@ -38,18 +30,71 @@ describe "crops/show" do
assert_select("a[href=#{new_planting_path}?crop_id=#{@crop.id}]")
end
it "links to people who are growing this crop" do
render
rendered.should contain /member\d+/
rendered.should contain "Springfield Community Garden"
end
context "has plantings" do
before(:each) do
@owner = FactoryGirl.create(:member)
@garden = FactoryGirl.create(:garden, :owner => @owner)
@planting = FactoryGirl.create(:planting,
:garden => @garden,
:crop => @crop
)
end
it "doesn't show sunniness if none are set" do
render
rendered.should_not contain "Plant in:"
end
it "shows sunniness frequencies" do
FactoryGirl.create(:sunny_planting, :crop => @crop)
render
rendered.should contain "Plant in:"
rendered.should contain "sun (1)"
end
it "shows multiple sunniness frequencies" do
FactoryGirl.create(:sunny_planting, :crop => @crop)
FactoryGirl.create(:sunny_planting, :crop => @crop)
FactoryGirl.create(:shady_planting, :crop => @crop)
render
rendered.should contain "Plant in:"
rendered.should contain "sun (2), shade (1)"
end
it "doesn't show planted_from if none are set" do
render
rendered.should_not contain "Plant from:"
end
it "shows planted_from frequencies" do
FactoryGirl.create(:seed_planting, :crop => @crop)
render
rendered.should contain "Plant from:"
rendered.should contain "seed (1)"
end
it "shows multiple planted_from frequencies" do
FactoryGirl.create(:seed_planting, :crop => @crop)
FactoryGirl.create(:seed_planting, :crop => @crop)
FactoryGirl.create(:cutting_planting, :crop => @crop)
render
rendered.should contain "Plant from:"
rendered.should contain "seed (2), cutting (1)"
end
it "links to people who are growing this crop" do
render
rendered.should contain /member\d+/
rendered.should contain "Springfield Community Garden"
end
it "shows photos where available" do
@photo = FactoryGirl.create(:photo)
@planting.photos << @photo
render
assert_select "img", :src => @photo.thumbnail_url
end
it "shows photos where available" do
@planting = FactoryGirl.create(:planting, :crop => @crop)
@photo = FactoryGirl.create(:photo)
@planting.photos << @photo
render
assert_select "img", :src => @photo.thumbnail_url
end
context 'varieties' do

View File

@@ -16,6 +16,11 @@ describe "plantings/show" do
end
context 'sunniness' do
before(:each) do
@p = assign(:planting,
FactoryGirl.create(:sunny_planting)
)
end
it "shows the sunniness" do
render
@@ -33,6 +38,10 @@ describe "plantings/show" do
end
context 'planted from' do
before(:each) do
@p = assign(:planting, FactoryGirl.create(:seed_planting))
end
it "shows planted_from" do
render
rendered.should contain 'Planted from:'