Forked from dbc-challenges/phase0_unit2_drawer_debugger.rb
Last active
January 4, 2016 21:39
-
-
Save carolineartz/154d40e206419f93f3b9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Drawer | |
| #don't need attribute reader for content at this point | |
| def initialize | |
| @contents = [] | |
| @open = true | |
| end | |
| def open | |
| @open = true | |
| end | |
| def close | |
| @open = false | |
| end | |
| def add_item(item) | |
| raise ArgumentError.new('Whoops! Open the drawer first!') unless @open | |
| @contents << item | |
| end | |
| def remove_item(item = @contents.last) #default won't pop last item off until passes test for contains item | |
| raise ArgumentError.new('Hmmm..don\'t see one of those...') unless @contents.include?(item) | |
| @contents.delete(item) | |
| end | |
| def dump # clears drawer and calls #view_contents which puts message about drawer being empty | |
| @contents.clear | |
| view_contents | |
| end | |
| def view_contents | |
| if @contents.empty? | |
| puts 'Your drawer is empty.' | |
| else | |
| puts 'The drawer contains:' | |
| @contents.each { |silverware| puts '- ' + silverware.type } | |
| end | |
| end | |
| end | |
| class Silverware | |
| attr_reader :type | |
| def initialize(type, clean = true) | |
| @type = type | |
| @clean = clean | |
| end | |
| def clean | |
| @clean = true | |
| end | |
| def eat | |
| puts "eating with the #{@type}" | |
| @clean = false | |
| end | |
| def is_clean? | |
| puts "This #{@type} is all clean!" if @clean | |
| puts "This #{@type} is dirty!" unless @clean | |
| end | |
| end | |
| silverware_drawer = Drawer.new | |
| knife1 = Silverware.new('knife') | |
| silverware_drawer.add_item(knife1) | |
| silverware_drawer.add_item(Silverware.new('spoon')) | |
| silverware_drawer.add_item(Silverware.new('fork')) | |
| silverware_drawer.view_contents ##should have knife, spoon, fork | |
| silverware_drawer.remove_item | |
| silverware_drawer.view_contents ##removed default last item (fork), should have knife, spoon | |
| sharp_knife = Silverware.new('sharp_knife') | |
| silverware_drawer.add_item(sharp_knife) | |
| silverware_drawer.view_contents ##added item: sharp knife. should have knife, spoon, sharp_knife | |
| silverware_drawer.remove_item(sharp_knife) | |
| silverware_drawer.view_contents ##gonna eat, so remove sharp_knife; should have knife and spoon | |
| sharp_knife.eat | |
| sharp_knife.is_clean? ##sharp knife should be dirty | |
| sharp_knife.clean | |
| sharp_knife.is_clean? ##cleaned sharp knife. now it should be clean | |
| silverware_drawer.add_item(sharp_knife) | |
| silverware_drawer.view_contents ##added back in sharp knife: should have knife, spoon, sharp_knife | |
| silverware_drawer.dump ##emptying drawer, should be empty | |
| silverware_drawer.view_contents ##showing contents to double check its empty | |
| fork = Silverware.new('fork') | |
| silverware_drawer.add_item(fork) | |
| silverware_drawer.view_contents ##got a new fork; should have only a fork | |
| silverware_drawer.remove_item(fork) | |
| silverware_drawer.view_contents ##removed fork; drawer should be empty | |
| silverware_drawer.close ##closed the drawer | |
| fork.eat ##eat with fork | |
| fork.is_clean? ##fork should be dirty | |
| fork.clean | |
| fork.is_clean? ##cleaned my fork, should be clean | |
| silverware_drawer.add_item(fork) #raise argument error, can't add item before opening the drawer! | |
| silverware_drawer.open ##opened the drawer | |
| silverware_drawer.add_item(fork) | |
| silverware_drawer.view_contents ##added fork, should have only a fork | |
| spork = Silverware.new('spork') #for testing argument error | |
| silverware_drawer.remove_item(spork) #raise argument error, can't remove item not in drawer | |
| ###################################REFLECTION####################################### | |
| # This challenge was a little difficult to get started. It was tough to really understand what it was | |
| # modeling. It seems a little weird to have `item` and `type` as they are and not have an is-a | |
| # relationship: item is a type (e.g, sharp knife is a knife). But I guess that isn't what's going on. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment