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

Jacob Inman Congenial Doodle IC6 #8

Open
wants to merge 21 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
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
55 changes: 55 additions & 0 deletions lib/carnival.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
class Carnival
attr_reader :name, :duration, :rides, :visitors

def initialize(name, duration)
@name = name
@duration = duration
@rides = []
@visitors = []
@summary = {
visitor_count: 0,
revenue_earned: 0,
visitors: [],
rides: []
}
end

def add_ride(ride)
@rides << ride
end

def add_visitor(visitor)
@visitors << visitor
@summary[:visitor_count] += 1
end

def most_popular_ride
@rides.max_by do |ride|
ride.total_trips
end
end

def most_profitable_ride
@rides.max_by do |ride|
ride.total_revenue
end
end

def total_revenue
@rides.sum do |ride|
ride.total_revenue
end
end

def summary
@summary[:revenue_earned] = total_revenue
@summary[:visitors] = @visitors
@summary[:rides] = @rides

# @rides.each do |ride|
# @summary[:rides] << { ride: ride, riders: ride.rider_log, total_revenue: ride.total_revenue}
# end

@summary
end
end
35 changes: 35 additions & 0 deletions lib/ride.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
class Ride
attr_reader :name,
:min_height,
:admission_fee,
:excitement,
:total_revenue
:rider_log

def initialize(details)
@name = details[:name]
@min_height = details[:min_height]
@admission_fee = details[:admission_fee]
@excitement = details[:excitement]
@total_revenue = 0
@rider_log = Hash.new(0)
end

def rider_log
@rider_log
end

def board_rider(rider)
if rider.height >= @min_height && rider.preferences.include?(@excitement) && rider.spending_money >= @admission_fee
rider.spending_money -= @admission_fee
@total_revenue += @admission_fee
@rider_log[rider] += 1
end
end

def total_trips
@rider_log.sum do |rider, trips|
trips
end
end
end
23 changes: 23 additions & 0 deletions lib/visitor.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class Visitor
attr_reader :name, :height, :spending_money, :preferences
attr_writer :spending_money

def initialize(name, height, spending_money)
@name = name
@height = height
@spending_money = spending_money.delete('$').to_i
@preferences = []
end

def add_preference(trait)
@preferences << trait
end

def tall_enough?(req_height)
if @height >= req_height
true
else
false
end
end
end
129 changes: 129 additions & 0 deletions spec/carnival_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
require 'rspec'
require 'pry'
require './lib/visitor'
require './lib/ride'
require './lib/carnival'

RSpec.describe Carnival do
before (:each) do
@carnival1 = Carnival.new("Toad Circus", 14)

@ride1 = Ride.new({ name: 'Carousel', min_height: 24, admission_fee: 1, excitement: :gentle })
@ride2 = Ride.new({ name: 'Ferris Wheel', min_height: 36, admission_fee: 5, excitement: :gentle })
@ride3 = Ride.new({ name: 'Roller Coaster', min_height: 54, admission_fee: 2, excitement: :thrilling })

@visitor1 = Visitor.new('Bruce', 54, '$10')
@visitor2 = Visitor.new('Tucker', 36, '$5')
@visitor3 = Visitor.new('Penny', 64, '$15')

@visitor1.add_preference(:gentle)
@visitor2.add_preference(:gentle)
@visitor2.add_preference(:thrilling)
@visitor3.add_preference(:thrilling)
end

describe '#initialize' do
it 'exists' do
expect(@carnival1).to be_a Carnival
expect(@carnival1.name).to eq ("Toad Circus")
expect(@carnival1.duration).to eq 14
end
end

describe 'rides at the carnival' do
it 'can add rides' do
expect(@carnival1.rides).to eq []

@carnival1.add_ride(@ride1)
@carnival1.add_ride(@ride2)
@carnival1.add_ride(@ride3)

expect(@carnival1.rides).to eq [@ride1, @ride2, @ride3]
end

it 'can tell the most popular ride' do
@carnival1.add_ride(@ride1)
@carnival1.add_ride(@ride2)
@carnival1.add_ride(@ride3)

@ride1.board_rider(@visitor1)
@ride1.board_rider(@visitor2)
@ride1.board_rider(@visitor1)
@ride3.board_rider(@visitor3)
@ride3.board_rider(@visitor3)

expect(@carnival1.most_popular_ride).to eq @ride1
end

it 'can tell the most profitable ride' do
@carnival1.add_ride(@ride1)
@carnival1.add_ride(@ride2)
@carnival1.add_ride(@ride3)

@ride1.board_rider(@visitor1)
@ride1.board_rider(@visitor2)
@ride1.board_rider(@visitor1)
@ride3.board_rider(@visitor3)
@ride3.board_rider(@visitor3)

expect(@carnival1.most_profitable_ride).to eq @ride3
end
end

describe '#total_revenue' do
it 'can add up total revenue from all rides' do
@carnival1.add_ride(@ride1)
@carnival1.add_ride(@ride2)
@carnival1.add_ride(@ride3)

@ride1.board_rider(@visitor1)
@ride1.board_rider(@visitor2)
@ride1.board_rider(@visitor1)
@ride3.board_rider(@visitor3)
@ride3.board_rider(@visitor3)

expect(@carnival1.total_revenue).to eq 7
end
end

describe 'iteration 4' do
it '#add visitor helper method' do
@carnival1.add_visitor(@visitor1)
@carnival1.add_visitor(@visitor2)
@carnival1.add_visitor(@visitor3)

expect(@carnival1.visitors).to eq [@visitor1, @visitor2, @visitor3]
end

it '#summary' do
@carnival1.add_ride(@ride1)
@carnival1.add_ride(@ride2)
@carnival1.add_ride(@ride3)

@carnival1.add_visitor(@visitor1)
@carnival1.add_visitor(@visitor2)
@carnival1.add_visitor(@visitor3)

@ride1.board_rider(@visitor1)
@ride1.board_rider(@visitor2)
@ride1.board_rider(@visitor1)
@ride3.board_rider(@visitor3)
@ride3.board_rider(@visitor3)

expect(@carnival1.summary).to eq ({
visitor_count: 3,
revenue_earned: 7,
visitors: [@visitor1, @visitor2, @visitor3],
rides: [@ride1, @ride2, @ride3]
})
end
end
end

# visitors: [@visitor1, @visitor2, @visitor3],
# rides: [{ ride: @ride1,
# riders: [@visitor1, @visitor2],
# total_revenue: 3},
# { ride: @ride3,
# riders: [@visitor3],
# total_revenue: 4}]
72 changes: 72 additions & 0 deletions spec/ride_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
require 'rspec'
require 'pry'
require './lib/visitor'
require './lib/ride'

RSpec.describe Ride do
before (:each) do
@ride1 = Ride.new({ name: 'Carousel', min_height: 24, admission_fee: 1, excitement: :gentle })
@ride2 = Ride.new({ name: 'Ferris Wheel', min_height: 36, admission_fee: 5, excitement: :gentle })
@ride3 = Ride.new({ name: 'Roller Coaster', min_height: 54, admission_fee: 2, excitement: :thrilling })

@visitor1 = Visitor.new('Bruce', 54, '$10')
@visitor2 = Visitor.new('Tucker', 36, '$5')
@visitor3 = Visitor.new('Penny', 64, '$15')
@visitor4 = Visitor.new('Jacob', 70, "$0")

@visitor1.add_preference(:gentle)
@visitor2.add_preference(:gentle)
@visitor2.add_preference(:thrilling)
@visitor3.add_preference(:thrilling)
@visitor4.add_preference(:thrilling)
end

describe '#initialize' do
it 'exists' do
expect(@ride1).to be_a Ride
expect(@ride1.name).to eq 'Carousel'
expect(@ride1.min_height).to eq 24
expect(@ride1.admission_fee).to eq 1
expect(@ride1.excitement).to eq :gentle
expect(@ride1.total_revenue).to eq 0
end
end

describe '#board_rider' do
it 'can tell and update info based on ride' do
@ride1.board_rider(@visitor1)
@ride1.board_rider(@visitor2)
@ride1.board_rider(@visitor1)

expect(@ride1.rider_log).to eq({@visitor1 => 2, @visitor2 => 1})

expect(@visitor1.spending_money).to eq 8
expect(@visitor2.spending_money).to eq 4

expect(@ride1.total_revenue).to eq 3

@ride3.board_rider(@visitor1)
@ride3.board_rider(@visitor2)
@ride3.board_rider(@visitor3)
@ride3.board_rider(@visitor4)

expect(@visitor1.spending_money).to eq 8
expect(@visitor2.spending_money).to eq 4
expect(@visitor3.spending_money).to eq 13
expect(@visitor4.spending_money).to eq 0

expect(@ride3.rider_log).to eq({@visitor3 => 1})
expect(@ride3.total_revenue).to eq 2
end
end

describe '#total_trips' do
it 'can tell how many rides total a ride has given' do
@ride1.board_rider(@visitor1)
@ride1.board_rider(@visitor2)
@ride1.board_rider(@visitor1)

expect(@ride1.total_trips).to eq 3
end
end
end
39 changes: 39 additions & 0 deletions spec/visitor_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
require 'rspec'
require 'pry'
require './lib/visitor'

RSpec.describe Visitor do
before(:each) do
@visitor1 = Visitor.new('Bruce', 54, '$10')
@visitor2 = Visitor.new('Tucker', 36, '$5')
@visitor3 = Visitor.new('Penny', 64, "$15")
end

describe 'initialize' do
it 'exists' do
expect(@visitor1).to be_a Visitor
expect(@visitor1.name).to eq 'Bruce'
expect(@visitor1.height).to eq 54
expect(@visitor1.spending_money).to eq 10
expect(@visitor1.preferences).to eq []
end
end

describe '#add_preference' do
it 'can add preferences' do
@visitor1.add_preference(:gentle)
@visitor1.add_preference(:thrilling)

expect(@visitor1.preferences).to eq [:gentle, :thrilling]
end
end

describe '#tall_enough?' do
it 'can ensure the visitor is tall enough' do
expect(@visitor1.tall_enough?(54)).to eq true
expect(@visitor2.tall_enough?(54)).to eq false
expect(@visitor3.tall_enough?(54)).to eq true
expect(@visitor1.tall_enough?(64)).to eq false
end
end
end