Github Repo Link Github Repo
- The purpose The Burger Builder App will take online orders of customized burgers, where the user can select a range of ingredients, also the quantity of each selected ingredient.
- The problem it will solve: The App will make the process of ordering a burger more convenient and faster than the conventional in person ordering system as anyone with a smart phone or any other kind of web access can make a order in seconds. Also, having an online platform for the ordering proccess is relatively cheaper, easier, reliable and errorless than having a staff to manage the orders.
- Target audience Any major restaurant and potential customers.
- Usage The restaurant will insert a list of ingredients with its respective price that will compose the 'Ingredients Menu', the client will be prompted with a Ingredient Menu price list and asked to select an ingredient and its quantity, an order summary and total is displayed above the select menu. This process is repeated until all the desired ingredients is included in the order and the "done" button is clicked. Then the client is prompted to a new screen with message containing the order numer and price for "collect and pay in store".
- use of variables and the concept of variable scope
- loops and conditional control structures
- error handling
- Selecting Ingredients or Menu Ingredients: This feature output a single select menu, followed by a "done" option. The single select menu takes the method 'get_ingredients' from the instance menu class as a source of data and display an ordered list of ingredient names, followed by a "done" option and "clear order" option. The method 'get_ingredients' mentioned above exports data extracted from the instantiated menu class variable 'ingredients'. Once one menu item is selected, its value is allocated into a local variable and later included as an argument to the method add_to_order, this step will be explained in more details, at the next feature below. The 'done' option breaks the ordering loop and exit the user from the select menu and display the order number and instructions for collect and pay. The 'clear order" option erase the order items and its quantity.
- Getting the user input for Ingredient quantity : This feature output a question asking the user to inform the desired quantity for the ordered ingredient, and hit enter (This step is a complement for the step above). The inputed value is then allocated into a local variable and submitted to an error validation where the input is tested to be a number and higher than zero. If it does not pass the validation, an exception is raised and rescued, and an error message notification displayed to the user informing what the correct type of input and conditions it should be, also a loop is actioned returning the user to the input request, so the user is given a chance to give a correct input, the loop brakes when the input is valid and the method add_to_order is called with two arguments, the first one is the selected menu item and second argument is the validated inputed value, and allocates them into a class variable at the Order class instance.
- Displaying Order or Order Summary: This feature displays each ordered item and its quantity, taken from the class variable
@order_ingredients, from the Order class instance. This feature is actioned when the methoddisplay_orderis called. This method is called if the class variablehas_order, of type Boolean, has atruevalue. Initially this class variable has a value offalseand it is turned totrueby a method when the class order receives the first order. The user is kept on the ordering loop until the done option is selected. While in the loop, each time a new order item and its quantity is received by the class variable, the user is prompted back to the select menu and the Order Summary takes the updated data from class variable@order_ingredients. - Displaying ingredients Price List: This feature list each ingredient and its unit price. This feature is actioned as soon as the
burgerclass is instantiated and stays up until the ordering process is finished. This feature takes the class variableingredientsas a source of data and is called by the methoddisplay_ingredients, from the menu class instance.
- how the user will find out how to interact with / use each feature
- how the user will interact with / use each feature
- how errors will be handled by the application and displayed to the user
Each feature displays instructions to help with the interactivity.
The welcome is the first screen to show up, a big blue box is displayed with "press enter to continue" message, if "enter is pressed, the next screen will show up.
The next view will be a fixed read only banner with the "Price List".
Below to the price list will be a box with a message "Which ingredient would you like to add to your Custom Burger?", followed by some instructions as below
-"Select one item to continue or;", an item can be selected and the next step will be displayed.
-"Select 'Done' to finish shopping or;", if 'done' is selected and there is no order, the current screen is exited and a big green box is displayed with the following message "Thank you for visiting our Burger Builder App!!!", also the system closes. If 'done' is selected and there is order, the current screen is exited and a big yellow box is displayed with the a message containing a generated order number, total price and instructions such as 'Please head to the collect & Pay counter','Inform your order number to proceed with the payment' and 'Collect your order. Enjoy your Custom Burger!.
-"Select 'Clear Order' to erase the current Order.", if selected, the current Order is erased, the Order summary and total order amount is also erased.(Order summary and total order amount is described at few lines below)
Also, below to it, there is more instructions on how to move the cursor and select the item ('user arrow to move and press Enter').
if an item is selected, a blue box is displayed with the following message "how many 'selected item' would you like followed by instructions 'Please insert the quantity and Enter'. A number higher than zero is expected to be inserted, if a invalid input is inserted (zero, letters or symbols), the following error message will be displayed " 'inputted value' is not a valid input, please insert only numbers greater than zero" and the blue box from the beginning of this step is displayed again and a valid value is requested. If the input pass the validation, the selected item and its quantity is added to the order, a big white box with the total order price with the following info ""Custom Burger Order Price" is displayed above the select menu and a big blue box with order summary containing all selected items and its quantity is displayed above the white box total order price.
Question R8 - Develop a diagram which describes the control flow of your application. Your diagram must:
- show the workflow/logic and/or integration of the features in your application for each feature.
- utilise a recognised format or set of conventions for a control flow diagram, such as UML.
Please find enclosed the requested flowchart => 
- outlines how each feature will be implemented and a checklist of tasks for each feature
- prioritise the implementation of different features, or checklist items within a feature
- provide a deadline, duration or other time indicator for each feature or checklist/checklist-item Utilise a suitable project management platform to track this implementation plan
Your checklists for each feature should have at least 5 items.
Please refers to the Trello Link => Trello
Also, I have included a docs folder to the root file containing all trello cards pdf files.
Question R10 - Design help documentation which includes a set of instructions which accurately describe how to use and install the application.
- steps to install the application
- any dependencies required by the application to operate
- any system/hardware requirements
- Clone the repository from the my github to your local repository => Github Repo Link Github Repo
- install bundler for the dependencies management =>
$ gem install bundler - use bundler to install all required gem dependencies specified on the gemfile -
$ bundle install - check for execute permission =>
ls -l run.app.sh - grant execute permission =>
chmod +x run_app.sh - on the
srcfolder, use./as a replacement for the absolute path ex:./run_app.sh - on the
srcfolder, to run the script and start the application, enter./run_app.shon the command line - list of required dependencies specified on gemfile:
gem "rspec", "~> 3.10"
gem "tty-prompt"
gem "tty-box"
gem "colorize"
gem 'artii', '~> 2.1', '>= 2.1.2'
gem 'tty-screen'
gem "tty-table"- Operational System required => windows or Mac os.