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

Jillian Bleggi- Museums 2410 #3

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 8 additions & 0 deletions lib/exhibit.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class Exhibit
attr_reader :name, :cost

def initialize(info)
@name = info[:name]
@cost = info[:cost]
end
end
62 changes: 62 additions & 0 deletions lib/museum.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
class Museum
attr_reader :name, :exhibits, :patrons

def initialize(name)
@name = name
@exhibits = []
@patrons = []
end

def add_exhibit(exhibit)
@exhibits << exhibit
end

def recommend_exhibits(patron)
@exhibits.select { |exhibit| patron.interests.include?(exhibit.name) }
end

def admit(patron)
@patrons << patron
end

def patrons_by_exhibit_interest
exhibit_interest = {}

@exhibits.each do |exhibit|
interested_patrons = @patrons.select { |patron| patron.interests.include?(exhibit.name) }

exhibit_interest[exhibit] = interested_patrons
end

exhibit_interest
end

def ticket_lottery_contestants(exhibit)
contestants = []

@patrons.each do |patron|
if patron.interests.include?(exhibit.name) && patron.spending_money < exhibit.cost
contestants << patron
end
end

contestants
end

def draw_lottery_winner(exhibit)
contestants = ticket_lottery_contestants(exhibit)
return nil if contestants.empty?

contestants.sample.name
end

def announce_lottery_winner(exhibit)
winner = draw_lottery_winner(exhibit)

if winner
"#{winner} has won the #{exhibit.name} lottery!"
else
"No winners for this lottery."
end
end
end
14 changes: 14 additions & 0 deletions lib/patron.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Patron
attr_reader :name, :spending_money, :interests

def initialize(name, spending_money)
@name = name
@spending_money = spending_money
@interests = []
end

def add_interest(interest)
@interests << (interest)
end

end
16 changes: 16 additions & 0 deletions spec/exhibit_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require './lib/exhibit'
require './lib/patron'

RSpec.describe Exhibit do
it 'has a name' do
exhibit = Exhibit.new({name: "Gems and Minerals", cost: 0})

expect(exhibit.name).to eq "Gems and Minerals"
end

it 'has a cost' do
exhibit = Exhibit.new({name: "Gems and Minerals", cost: 0})

expect(exhibit.cost).to eq 0
end
end
223 changes: 223 additions & 0 deletions spec/museum_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
require './lib/museum'
require './lib/patron'
require './lib/exhibit'
require 'rspec'

RSpec.describe Museum do
describe "instantiation" do
it 'has a name' do
dmns = Museum.new("Denver Museum of Nature and Science")

expect(dmns.name).to eq "Denver Museum of Nature and Science"
end

it 'can have exhibits' do
dmns = Museum.new("Denver Museum of Nature and Science")

expect(dmns.exhibits).to eq []
end

it 'can list patrons' do
dmns = Museum.new("Denver Museum of Nature and Science")

expect(dmns.patrons).to eq []
end
end

describe "behaviors" do
it 'can add exhibits' do
dmns = Museum.new("Denver Museum of Nature and Science")

gems_and_minerals = Exhibit.new({name: "Gems and Minerals", cost: 0})
dead_sea_scrolls = Exhibit.new({name: "Dead Sea Scrolls", cost: 10})
imax = Exhibit.new({name: "IMAX",cost: 15})

dmns.add_exhibit(gems_and_minerals)
dmns.add_exhibit(dead_sea_scrolls)
dmns.add_exhibit(imax)

expect(dmns.exhibits.count).to eq 3
end

it 'can recommend interests to patrons' do
dmns = Museum.new("Denver Museum of Nature and Science")

gems_and_minerals = Exhibit.new({name: "Gems and Minerals", cost: 0})
dead_sea_scrolls = Exhibit.new({name: "Dead Sea Scrolls", cost: 10})
imax = Exhibit.new({name: "IMAX",cost: 15})

dmns.add_exhibit(gems_and_minerals)
dmns.add_exhibit(dead_sea_scrolls)
dmns.add_exhibit(imax)

patron_1 = Patron.new("Bob", 20)
patron_1.add_interest("Dead Sea Scrolls")
patron_1.add_interest("Gems and Minerals")

patron_2 = Patron.new("Sally", 20)
patron_2.add_interest("IMAX")

expect(dmns.recommend_exhibits(patron_1).count).to eq 2
expect(dmns.recommend_exhibits(patron_2).count).to eq 1
end

it 'can admit patrons' do
dmns = Museum.new("Denver Museum of Nature and Science")

patron_1 = Patron.new("Bob", 0)
patron_2 = Patron.new("Sally", 20)
patron_3 = Patron.new("Johnny", 5)

dmns.admit(patron_1)
dmns.admit(patron_2)
dmns.admit(patron_3)

expect(dmns.patrons.count).to eq 3
end

it 'can return a hash of exhibits and interested patrons' do
dmns = Museum.new("Denver Museum of Nature and Science")

gems_and_minerals = Exhibit.new({name: "Gems and Minerals", cost: 0})
dead_sea_scrolls = Exhibit.new({name: "Dead Sea Scrolls", cost: 10})
imax = Exhibit.new({name: "IMAX",cost: 15})
dmns.add_exhibit(gems_and_minerals)
dmns.add_exhibit(dead_sea_scrolls)
dmns.add_exhibit(imax)

patron_1 = Patron.new("Bob", 0)
patron_1.add_interest("Gems and Minerals")
patron_1.add_interest("Dead Sea Scrolls")

patron_2 = Patron.new("Sally", 20)
patron_2.add_interest("Dead Sea Scrolls")

patron_3 = Patron.new("Johnny", 5)
patron_3.add_interest("Dead Sea Scrolls")

dmns.admit(patron_1)
dmns.admit(patron_2)
dmns.admit(patron_3)

expect(dmns.patrons_by_exhibit_interest).to be_a Hash
end
end

describe "lottery system" do
it 'can return an array of patrons whose #spending_money < #exhibit.cost' do
dmns = Museum.new("Denver Museum of Nature and Science")

gems_and_minerals = Exhibit.new({name: "Gems and Minerals", cost: 0})
dead_sea_scrolls = Exhibit.new({name: "Dead Sea Scrolls", cost: 10})
imax = Exhibit.new({name: "IMAX",cost: 15})
dmns.add_exhibit(gems_and_minerals)
dmns.add_exhibit(dead_sea_scrolls)
dmns.add_exhibit(imax)

patron_1 = Patron.new("Bob", 0)
patron_1.add_interest("Gems and Minerals")
patron_1.add_interest("Dead Sea Scrolls")

patron_2 = Patron.new("Sally", 20)
patron_2.add_interest("Dead Sea Scrolls")

patron_3 = Patron.new("Johnny", 5)
patron_3.add_interest("Dead Sea Scrolls")

dmns.admit(patron_1)
dmns.admit(patron_2)
dmns.admit(patron_3)

expect(dmns.ticket_lottery_contestants(dead_sea_scrolls)).to be_a Array
expect(dmns.ticket_lottery_contestants(dead_sea_scrolls).count).to eq 2

expect(dmns.ticket_lottery_contestants(gems_and_minerals)).to eq []
expect(dmns.ticket_lottery_contestants(imax)).to eq []
end

it 'can draw a lottery winner if there are entrants' do
dmns = Museum.new("Denver Museum of Nature and Science")

gems_and_minerals = Exhibit.new({name: "Gems and Minerals", cost: 0})
dead_sea_scrolls = Exhibit.new({name: "Dead Sea Scrolls", cost: 10})
imax = Exhibit.new({name: "IMAX",cost: 15})
dmns.add_exhibit(gems_and_minerals)
dmns.add_exhibit(dead_sea_scrolls)
dmns.add_exhibit(imax)

patron_1 = Patron.new("Bob", 0)
patron_1.add_interest("Gems and Minerals")
patron_1.add_interest("Dead Sea Scrolls")

patron_2 = Patron.new("Sally", 20)
patron_2.add_interest("Dead Sea Scrolls")

patron_3 = Patron.new("Johnny", 5)
patron_3.add_interest("Dead Sea Scrolls")

dmns.admit(patron_1)
dmns.admit(patron_2)
dmns.admit(patron_3)

expect(dmns.draw_lottery_winner(dead_sea_scrolls)).to be_a String
end

it 'will return #nil if there are no entrants' do
dmns = Museum.new("Denver Museum of Nature and Science")

gems_and_minerals = Exhibit.new({name: "Gems and Minerals", cost: 0})
dead_sea_scrolls = Exhibit.new({name: "Dead Sea Scrolls", cost: 10})
imax = Exhibit.new({name: "IMAX",cost: 15})
dmns.add_exhibit(gems_and_minerals)
dmns.add_exhibit(dead_sea_scrolls)
dmns.add_exhibit(imax)

patron_1 = Patron.new("Bob", 0)
patron_1.add_interest("Gems and Minerals")
patron_1.add_interest("Dead Sea Scrolls")

patron_2 = Patron.new("Sally", 20)
patron_2.add_interest("Dead Sea Scrolls")

patron_3 = Patron.new("Johnny", 5)
patron_3.add_interest("Dead Sea Scrolls")

dmns.admit(patron_1)
dmns.admit(patron_2)
dmns.admit(patron_3)

expect(dmns.draw_lottery_winner(gems_and_minerals)).to eq nil
expect(dmns.draw_lottery_winner(imax)).to eq nil
end

it 'can announce a lottery winner' do
dmns = Museum.new("Denver Museum of Nature and Science")

gems_and_minerals = Exhibit.new({name: "Gems and Minerals", cost: 0})
dead_sea_scrolls = Exhibit.new({name: "Dead Sea Scrolls", cost: 10})
imax = Exhibit.new({name: "IMAX",cost: 15})
dmns.add_exhibit(gems_and_minerals)
dmns.add_exhibit(dead_sea_scrolls)
dmns.add_exhibit(imax)

patron_1 = Patron.new("Bob", 0)
patron_1.add_interest("Gems and Minerals")
patron_1.add_interest("Dead Sea Scrolls")

patron_2 = Patron.new("Sally", 20)
patron_2.add_interest("Dead Sea Scrolls")

patron_3 = Patron.new("Johnny", 5)
patron_3.add_interest("Dead Sea Scrolls")

dmns.admit(patron_1)
dmns.admit(patron_2)
dmns.admit(patron_3)

expect(dmns.announce_lottery_winner(dead_sea_scrolls)).to be_a String

expect(dmns.announce_lottery_winner(gems_and_minerals)).to eq "No winners for this lottery."
expect(dmns.announce_lottery_winner(imax)).to eq "No winners for this lottery."
end
end
end
33 changes: 33 additions & 0 deletions spec/patron_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
require './lib/exhibit'
require './lib/patron'

RSpec.describe Patron do
describe "instantiation" do
it 'has a name' do
patron_1 = Patron.new("Bob", 20)

expect(patron_1.name).to eq "Bob"
end

it 'has spending money' do
patron_1 = Patron.new("Bob", 20)

expect(patron_1.spending_money).to eq 20
end

it 'can have interests' do
patron_1 = Patron.new("Bob", 20)

expect(patron_1.interests).to eq []
end
end

it 'can add interests' do
patron_1 = Patron.new("Bob", 20)

patron_1.add_interest("Dead Sea Scrolls")
patron_1.add_interest("Gems and Minerals")

expect(patron_1.interests).to eq ["Dead Sea Scrolls", "Gems and Minerals"]
end
end