Skip to content

Commit

Permalink
Proper associations, testing both ways
Browse files Browse the repository at this point in the history
  • Loading branch information
yesezra committed Jun 18, 2010
1 parent 6a773d6 commit d344130
Show file tree
Hide file tree
Showing 15 changed files with 169 additions and 50 deletions.
24 changes: 13 additions & 11 deletions app/models/farm.rb
@@ -1,24 +1,26 @@
# == Schema Information
# Schema version: 20100618185553
# Schema version: 20100618200803
#
# Table name: farms
#
# id :integer not null, primary key
# name :string(255)
# organic :boolean
# latitude :float
# longitude :float
# altitude :float
# created_at :datetime
# updated_at :datetime
# id :integer not null, primary key
# name :string(255)
# organic :boolean
# latitude :float
# longitude :float
# altitude :float
# created_at :datetime
# updated_at :datetime
# organic_certifier_id :integer
# farmer_id :integer
#

class Farm < ActiveRecord::Base
attr_accessible :name, :organic, :latitude, :longitude, :altitude

validates_presence_of :name, :latitude, :longitude, :altitude
validates_inclusion_of :organic, :in => [true, false]

belongs_to :organic_certifier
belongs_to :farmer
end
12 changes: 7 additions & 5 deletions app/models/farmer.rb
@@ -1,18 +1,20 @@
# == Schema Information
# Schema version: 20100618185553
# Schema version: 20100618200803
#
# Table name: farmers
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime
# updated_at :datetime
# id :integer not null, primary key
# name :string(255)
# created_at :datetime
# updated_at :datetime
# washing_station_id :integer
#

class Farmer < ActiveRecord::Base
attr_accessible :name

validates_presence_of :name

has_many :farms
belongs_to :washing_station
end
1 change: 1 addition & 0 deletions app/models/organic_certifier.rb
Expand Up @@ -14,4 +14,5 @@ class OrganicCertifier < ActiveRecord::Base
attr_accessible :name, :code

validates_presence_of :name, :code
has_many :farms
end
1 change: 1 addition & 0 deletions app/models/washing_station.rb
Expand Up @@ -14,4 +14,5 @@ class WashingStation < ActiveRecord::Base
attr_accessible :name, :code

validates_presence_of :name, :code
has_many :farmers
end
10 changes: 10 additions & 0 deletions db/migrate/20100618200656_add_washing_station_id_to_farmer.rb
@@ -0,0 +1,10 @@
class AddWashingStationIdToFarmer < ActiveRecord::Migration
def self.up
add_column :farmers, :washing_station_id, :integer
add_index :farmers, :washing_station_id
end

def self.down
remove_column :farmers, :washing_station_id
end
end
10 changes: 10 additions & 0 deletions db/migrate/20100618200737_add_organic_certifier_id_to_farm.rb
@@ -0,0 +1,10 @@
class AddOrganicCertifierIdToFarm < ActiveRecord::Migration
def self.up
add_column :farms, :organic_certifier_id, :integer
add_index :farms, :organic_certifier_id
end

def self.down
remove_column :farms, :organic_certifier_id
end
end
10 changes: 10 additions & 0 deletions db/migrate/20100618200803_add_farmer_id_to_farm.rb
@@ -0,0 +1,10 @@
class AddFarmerIdToFarm < ActiveRecord::Migration
def self.up
add_column :farms, :farmer_id, :integer
add_index :farms, :farmer_id
end

def self.down
remove_column :farms, :farmer_id
end
end
10 changes: 9 additions & 1 deletion db/schema.rb
Expand Up @@ -9,14 +9,17 @@
#
# It's strongly recommended to check this file into your version control system.

ActiveRecord::Schema.define(:version => 20100618185553) do
ActiveRecord::Schema.define(:version => 20100618200803) do

create_table "farmers", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "washing_station_id"
end

add_index "farmers", ["washing_station_id"], :name => "index_farmers_on_washing_station_id"

create_table "farms", :force => true do |t|
t.string "name"
t.boolean "organic"
Expand All @@ -25,8 +28,13 @@
t.float "altitude"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "organic_certifier_id"
t.integer "farmer_id"
end

add_index "farms", ["farmer_id"], :name => "index_farms_on_farmer_id"
add_index "farms", ["organic_certifier_id"], :name => "index_farms_on_organic_certifier_id"

create_table "organic_certifiers", :force => true do |t|
t.string "name"
t.string "code"
Expand Down
14 changes: 10 additions & 4 deletions spec/factories.rb
@@ -1,8 +1,14 @@
Factory.define :farmer do |farmer|
farmer.name "A Farmer"
end

Factory.define :washing_station do |washing_station|
washing_station.name "Washing Station 1"
washing_station.code "abcabc123"
end

Factory.define :organic_certifier do |organic_certifier|
organic_certifier.name "Organic Certifier 1"
organic_certifier.code "123abced"
end

Factory.define :farmer do |farmer|
farmer.name "A Farmer"
farmer.association :washing_station
end
11 changes: 6 additions & 5 deletions spec/fixtures/farmers.yml
@@ -1,12 +1,13 @@
# == Schema Information
# Schema version: 20100618185553
# Schema version: 20100618200803
#
# Table name: farmers
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime
# updated_at :datetime
# id :integer not null, primary key
# name :string(255)
# created_at :datetime
# updated_at :datetime
# washing_station_id :integer
#

# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
Expand Down
20 changes: 11 additions & 9 deletions spec/fixtures/farms.yml
@@ -1,16 +1,18 @@
# == Schema Information
# Schema version: 20100618185553
# Schema version: 20100618200803
#
# Table name: farms
#
# id :integer not null, primary key
# name :string(255)
# organic :boolean
# latitude :float
# longitude :float
# altitude :float
# created_at :datetime
# updated_at :datetime
# id :integer not null, primary key
# name :string(255)
# organic :boolean
# latitude :float
# longitude :float
# altitude :float
# created_at :datetime
# updated_at :datetime
# organic_certifier_id :integer
# farmer_id :integer
#

# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
Expand Down
31 changes: 31 additions & 0 deletions spec/models/farm_spec.rb
Expand Up @@ -2,6 +2,8 @@

describe Farm do
before(:each) do
@organic_certifier = Factory(:organic_certifier)
@farmer = Factory(:farmer)
@valid_attributes = {
:name => "Farm Name",
:organic => false,
Expand Down Expand Up @@ -39,4 +41,33 @@
no_altitude_farm = Farm.new(@valid_attributes.merge(:altitude => ""))
no_altitude_farm.should_not be_valid
end

describe "organic certifier associations" do
before(:each) do
@farm = @organic_certifier.farms.create(@valid_attributes)
end

it "should have an organic certifier attribute" do
@farm.should respond_to(:organic_certifier)
end

it "should have the right associated organic certifier" do
@farm.organic_certifier.should == @organic_certifier
end
end

describe "farmer associations" do
before(:each) do
@farm = @farmer.farms.create(@valid_attributes)
end

it "should have a farmer attribute" do
@farm.should respond_to(:farmer)
end

it "should have the right associated farmer" do
@farm.farmer.should == @farmer
end
end

end
44 changes: 29 additions & 15 deletions spec/models/farmer_spec.rb
@@ -1,33 +1,47 @@
require 'spec_helper'

describe Farmer do
@washing_station = Factory(:washing_station)

before(:each) do
@washing_station = Factory(:washing_station)
@valid_attributes = {
:name => "Farmer Name"
}
end

it "should create a new instance given valid attributes" do
Farmer.create!(@valid_attributes)
@washing_station.farmers.create!(@valid_attributes)
end

it "should require a name" do
no_name_farmer = Farmer.new(@valid_attributes.merge(:name => ""))
no_name_farmer.should_not be_valid
end

# describe "washing Station associations" do
# before(:each) do
# @farmer = @washing_station.farmer.create(@valid_attributes)
# end
#
# it "should have a washing station attribute" do
# @farmer.should respond_to(:washing_station)
# end
#
# it "should have the right associated washing station" do
# @farmer.washing_station.should == @washing_station
# end
# end
describe "washing station associations" do

before(:each) do
@farmer = @washing_station.farmers.create(@valid_attributes)
end

it "should have a washing station attribute" do
@farmer.should respond_to(:washing_station)
end

it "should have the right associated washing station" do
@farmer.washing_station.should == @washing_station
end
end

describe "farm associations" do

before(:each) do
@farmer = Farmer.create(@valid_attributes)
end

it "should have a farm attribute" do
@farmer.should respond_to(:farms)
end
end

end
11 changes: 11 additions & 0 deletions spec/models/organic_certifier_spec.rb
Expand Up @@ -22,4 +22,15 @@
no_code_organic_certifier.should_not be_valid
end

describe "farm associations" do

before(:each) do
@organic_certifier = OrganicCertifier.create(@valid_attributes)
end

it "should have a farm attribute" do
@organic_certifier.should respond_to(:farms)
end
end

end
10 changes: 10 additions & 0 deletions spec/models/washing_station_spec.rb
Expand Up @@ -22,4 +22,14 @@
no_code_washing_station.should_not be_valid
end

describe "farmer associations" do

before(:each) do
@washing_station = WashingStation.create(@valid_attributes)
end

it "should have a farmer attribute" do
@washing_station.should respond_to(:farmers)
end
end
end

0 comments on commit d344130

Please sign in to comment.