Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alena's Ride Share #29

Open
wants to merge 61 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
0448660
created files in lib and specs, populated Rakefile and spec_helper
Spatterjaaay Mar 7, 2017
085b25a
added bare testing structure
Spatterjaaay Mar 7, 2017
575067b
pseudocode for Driver class
Spatterjaaay Mar 7, 2017
57572f4
created Rider class and initialize method
Spatterjaaay Mar 7, 2017
3a1941f
created Trip class and initialize method
Spatterjaaay Mar 7, 2017
6d4f6b5
added pseudocode and methods for rider.rb and trip.rb
Spatterjaaay Mar 7, 2017
5f65d7d
added testing for initialize method for Driver class, Rider class and…
Spatterjaaay Mar 7, 2017
d54917f
improved initialize methods in Classes Rider, Trip, and Driver and ad…
Spatterjaaay Mar 7, 2017
628f2fd
added test for Driver.all method
Spatterjaaay Mar 7, 2017
6476bd4
added code for Driver.all method
Spatterjaaay Mar 7, 2017
db999e9
added testing for Driver.find method
Spatterjaaay Mar 7, 2017
313f01a
added code to the Driver.find method
Spatterjaaay Mar 7, 2017
76c6e87
added tests for Rider.all
Spatterjaaay Mar 7, 2017
700c545
Added code for Rider.all method
Spatterjaaay Mar 7, 2017
3b15d91
added tests for Driver.find method
Spatterjaaay Mar 7, 2017
599692b
added code for Rider.find method
Spatterjaaay Mar 7, 2017
c211ca7
added tests for Trip.all method
Spatterjaaay Mar 7, 2017
dac4ff4
added code for Test.all method
Spatterjaaay Mar 7, 2017
1f8388c
added code for Trip.finds_trips_driver
Spatterjaaay Mar 8, 2017
6625cf1
added testing for Trip.find_trips_driver
Spatterjaaay Mar 8, 2017
1b45f1c
addred require csv
Spatterjaaay Mar 8, 2017
45365a8
added tests for Trip.find_trips_rider method
Spatterjaaay Mar 8, 2017
f5b894d
fixed class instance in before do block in trip#find_trips_rider
Spatterjaaay Mar 8, 2017
1b8a737
added code to Trip.find_trips_rider
Spatterjaaay Mar 8, 2017
a5bee22
created .gitignore
Spatterjaaay Mar 8, 2017
fddd513
refactored class methods using enumerables
Spatterjaaay Mar 8, 2017
8f3c7d8
refactored class methods using enumerables
Spatterjaaay Mar 8, 2017
8c5df57
fixed tests that are reading from a csv file
Spatterjaaay Mar 8, 2017
66286ea
improved Rider.find method using enumerables
Spatterjaaay Mar 8, 2017
1aced0a
added testing for driver method in class Trip
Spatterjaaay Mar 8, 2017
8771577
changed method descriptions in describe do block
Spatterjaaay Mar 8, 2017
cfcae16
added code for driver method in class Trip
Spatterjaaay Mar 8, 2017
2af117e
added tests for rider method in class Trip
Spatterjaaay Mar 8, 2017
644fed0
added tests to methods driver and rider in Trip class
Spatterjaaay Mar 8, 2017
bbe37c1
added tests for list-trips method in class Rider
Spatterjaaay Mar 8, 2017
5f9d0eb
fixed test for list_trips
Spatterjaaay Mar 8, 2017
21166e5
added tests for list_drivers method in Rider class
Spatterjaaay Mar 8, 2017
3ca74fb
Added code for list_drivers method
Spatterjaaay Mar 8, 2017
fde8237
added tests for list_trips method
Spatterjaaay Mar 8, 2017
1af4f72
added code to list_trips method
Spatterjaaay Mar 8, 2017
d04bc97
added test for list_drivers method
Spatterjaaay Mar 8, 2017
f9fdf5c
fixed list_drivers method using enumerables
Spatterjaaay Mar 9, 2017
5408fef
Added code to avg_method
Spatterjaaay Mar 12, 2017
71cb078
added error handling for an invalid id in Driver.find method and retu…
Spatterjaaay Mar 12, 2017
9539168
changed tests for Driver.find adding testing for errors and returning…
Spatterjaaay Mar 12, 2017
503d102
added error handling and returning nil for Rider.find method
Spatterjaaay Mar 12, 2017
7f970ae
added tests for error hadling and returning nil for Rider.find method
Spatterjaaay Mar 12, 2017
5e73105
change tests for Trip.rider and Trip.driver methods to return nil if …
Spatterjaaay Mar 12, 2017
97f9ebe
added check for vin being 17 characters long
Spatterjaaay Mar 12, 2017
cb1466f
added error raising for vin of wrong length
Spatterjaaay Mar 12, 2017
bbd7509
added testing of an error raining for wrong length of vin
Spatterjaaay Mar 12, 2017
ca1fc93
added tests for valid rating
Spatterjaaay Mar 12, 2017
877c17d
added code that checks for valid rating
Spatterjaaay Mar 12, 2017
7e3d453
added check for return trips for a driver, it returns instances of Trips
Spatterjaaay Mar 12, 2017
055f9e7
changed checking for returning nil values
Spatterjaaay Mar 12, 2017
a72d6c2
removed comments
Spatterjaaay Mar 12, 2017
598d521
added files for specific error
Spatterjaaay Mar 12, 2017
b4d32da
specified errors I am raising
Spatterjaaay Mar 12, 2017
663d7c0
changed tests involving errors to include more specific errors I created
Spatterjaaay Mar 12, 2017
41bf936
moved one test into correct location
Spatterjaaay Mar 12, 2017
64a2502
removed unnecessary return
Spatterjaaay Mar 13, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/coverage/
/specs/coverage/
9 changes: 9 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
# Fill me in!
require 'rake/testtask'

Rake::TestTask.new do |t|
t.libs = ["lib"]
t.warning = true
t.test_files = FileList['specs/*_spec.rb']
end

task default: :test
2 changes: 2 additions & 0 deletions lib/InvalidIDError.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class InvalidIDError < StandardError
end
2 changes: 2 additions & 0 deletions lib/InvalidRatingError.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class InvalidRatingError < StandardError
end
2 changes: 2 additions & 0 deletions lib/InvalidVinError.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class InvalidVinError < StandardError
end
48 changes: 48 additions & 0 deletions lib/driver.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
require 'csv'
require_relative 'trip'
require_relative 'InvalidVinError'
require_relative 'InvalidIDError'

class Driver
attr_reader :id, :name, :vin

@@all_drivers = nil

def initialize(id, name, vin)
@id = id
@name = name

if vin.length == 17
@vin = vin
else
raise InvalidVinError.new("vin must be 17 characters long")
end
end

def self.all
return @@all_drivers if @@all_drivers
drivers = CSV.read("support/drivers.csv", { :headers => true })

@@all_drivers = drivers.map { |line| Driver.new(line[0].to_i, line[1], line[2]) }
end

def self.find(driver_id)
unless (driver_id.is_a? Integer) && driver_id >= 0
raise InvalidIDError.new("driver ID:#{driver_id} is not valid")
end

Driver.all.find { |driver| driver.id == driver_id }
end

def list_trips
Trip.find_trips_driver(@id)
end

def avg_rating
ratings = list_trips.map { |trip| trip.rating.to_f }
return 0 if ratings == []
rating = (ratings.reduce(:+)) / ratings.length
rating.round(2)
end

end
42 changes: 42 additions & 0 deletions lib/rider.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
require 'csv'
require_relative 'trip'
require_relative 'driver'
require_relative 'InvalidIDError'

class Rider
attr_reader :id, :name, :phone_num

@@all_riders = nil

def initialize(id, name, phone_num)
@id = id
@name = name
@phone_num = phone_num
end

def self.all
return @@all_riders if @@all_riders
riders = CSV.read("support/riders.csv", { :headers => true })

@@all_riders = riders.map { |line| Rider.new(line[0].to_i, line[1], line[2]) }
end

def self.find(rider_id)
unless (rider_id.is_a? Integer) && rider_id >= 0
raise InvalidIDError.new("rider ID:#{rider_id} is not valid")
end

Rider.all.find { |rider| rider.id == rider_id }
end

def list_trips
Trip.find_trips_rider(@id)
end

def list_drivers
drivers = list_trips.map { |trip| Driver.find(trip.driver_id) }

drivers.uniq { |driver| driver.id }
end

end
47 changes: 47 additions & 0 deletions lib/trip.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
require 'csv'
require_relative 'InvalidRatingError'

class Trip
attr_reader :id, :driver_id, :rider_id, :date, :rating

@@all_trips = nil

def initialize(id, driver_id, rider_id, date, rating)
@id = id
@driver_id = driver_id
@rider_id = rider_id
@date = date

unless (rating.is_a? Integer) && (1..5).include?(rating)
raise InvalidRatingError.new("rating must be an integer within range 1-5")
else
@rating = rating
end
end

def self.all
return @@all_trips if @@all_trips
trips = CSV.read("support/trips.csv", { :headers => true })

@@all_trips = trips.map do |line|
Trip.new(line[0].to_i, line[1].to_i, line[2].to_i, line[3], line[4].to_i)
end
end

def self.find_trips_driver(driver_id)
Trip.all.select { |trip| trip.driver_id == driver_id }
end

def self.find_trips_rider(rider_id)
Trip.all.select { |trip| trip.rider_id == rider_id }
end

def driver
Driver.find(@driver_id)
end

def rider
Rider.find(@rider_id)
end

end
137 changes: 137 additions & 0 deletions specs/driver_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
require_relative 'spec_helper'

describe "Driver" do

describe "#initialize" do
it "Takes an ID, name, and vin" do
name = "Bob Belcher"
id = 12345
vin = "9e87e65r98302e984"
driver = Driver.new(id, name, vin)

driver.must_respond_to :id
driver.id.must_equal id

driver.must_respond_to :name
driver.name.must_equal name

driver.must_respond_to :vin
driver.vin.must_equal vin
end

it "Is a kind of Driver" do
name = "Bob Belcher"
id = 12345
vin = "9e87e65r98302e984"
driver = Driver.new(id, name, vin)

driver.must_be_kind_of Driver
end

it "Doesn't create a driver if vin is not 17 characters long" do
proc {
Driver.new(123, "Tina Belcher", "w3475rs78t")
}.must_raise InvalidVinError
end
end

describe "Driver.all" do

before do
@drivers = Driver.all
end

it "Returns an array of all drivers" do
@drivers.class.must_equal Array
@drivers.each { |driver| driver.must_be_instance_of Driver }
@drivers.length.must_equal 100

@drivers.first.id.must_equal 1
@drivers[0].name.must_equal "Bernardo Prosacco"
@drivers.first.vin.must_equal "WBWSS52P9NEYLVDE9"

@drivers.last.id.must_equal 100
@drivers[-1].name.must_equal "Minnie Dach"
@drivers.last.vin.must_equal "XF9Z0ST7X18WD41HT"

# index = 0
# CSV.read("support/drivers.csv", { :headers => true }).each do |line|
#
# @drivers[index].id.must_equal line[0].to_i
# @drivers[index].name.must_equal line[1].to_s
# @drivers[index].vin.must_equal line[2]
# index += 1
# end
end

end

describe "Driver.find" do

before do
@drivers = Driver.all
end

it "Returns a driver that exists" do
driver = Driver.find(54)
driver.must_be_instance_of Driver
end

it "Can find the first driver from the CSV" do
driver = Driver.find(1)
driver.name.must_equal @drivers.first.name
end

it "Can find the last driver from the CSV" do
driver = Driver.find(100)
driver.name.must_equal @drivers.last.name
end

it "Returns nil for a driver that doesn't exist" do
driver = Driver.find(101)
driver.must_be_nil
end

it "Raises an error for an invalid driver ID" do
proc {
Driver.find("a")
}.must_raise InvalidIDError
end
end

describe "Driver#list_trips" do
it "Returns a list of trips for a specific driver" do
driver = Driver.new(36, "Mr. Marcelina Jenkins", "WD3VLLK2X04HF50PL")
driver.list_trips.must_be_kind_of Array
driver.list_trips.each { |trip| trip.must_be_kind_of Trip }
end

it "Returns a correct number of trips for a specific driver" do
driver = Driver.new(1, "Bernardo Prosacco", "WBWSS52P9NEYLVDE9")
driver.list_trips.length.must_equal 9
end

it "Returns an empty array if there are no trips for that driver" do
driver = Driver.new(100, "Minnie Dach", "XF9Z0ST7X18WD41HT")
driver.list_trips.must_equal []
end
end

describe "Driver#avg_rating" do
it "Returns a number" do
driver = Driver.new(60, "Oma Swift DDS", "TAMCBRPM7EN5GD88L")
driver.avg_rating.must_be_kind_of Float
end

it "Returns correct average for a specific driver" do
driver = Driver.new(1, "Bernardo Prosacco", "WBWSS52P9NEYLVDE9")
driver.avg_rating.must_equal 2.33
end

it "Returns 0 if there are no trips for this driver" do
driver = Driver.new(100, "Minnie Dach", "XF9Z0ST7X18WD41HT")
driver.avg_rating.must_equal 0
end
end

end
Loading