Coder Social home page Coder Social logo

mahammad-mostafa / things-catalogue Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 66 KB

This is the capstone project of the fourth module in the Microverse program. It is a console app for handling items inside a catalogue built with Ruby & PostgreSQL.

License: MIT License

Ruby 100.00%
gitflow-workflow microverse microverse-projects microverse-ruby microverse-students oop-principles postgresql relational-databases rubocop ruby

things-catalogue's Introduction

๐Ÿท๏ธ Things Catalogue

This is the capstone project of the fourth module in the Microverse program.
Check the below contents for further details about this project.

๐Ÿ“— Contents

๐Ÿ“– Description

This repository is about a catalogue of different item types that the user can add or display. There is one parent class Item and three children classes (Book / MusicAlbum / Game). Three classes (Label / Genre / Author) have one to many association with Item class. Built unit tests for implemented methods of seven classes (Item / Book / MusicAlbum / Game / Label / Genre / Author). Created database tables for items data inside schema.sql file.

๐Ÿ“Œ Live Demo:

  • Watch the project presentation from here

๐Ÿ“Œ Tech Stack:

  • Application uses Ruby
  • Unit tests run with RSpec
  • Linting is done with Rubocop
  • Schema file uses PostgreSQL

๐Ÿ“Œ Key Features:

  • User is given the option to either add new item or display a list
  • Available item types to add (book / music album / game)
  • Available list types to display (books / albums / games / labels / genres / authors)
  • Adding any new item will require the use to select (label / genre / author) form a list or create new ones
  • All items created by the user are stored in json files and reloaded after restart

back to top

๐Ÿ› ๏ธ Instructions

You can easily download or fork this repository and work on it immadiately!

๐Ÿ“Œ Prerequisites:

  • You need Ruby language & PostgreSQL database installed

๐Ÿ“Œ Installation:

  • To install all gem dependencies run
bundle install

๐Ÿ“Œ Development:

  • Run main.rb file with
ruby main.rb

๐Ÿ“Œ Tests:

  • To run unit tests navigate to specs directory and run:
rspec . -f d

back to top

๐Ÿ‘ฅ Authors

๐Ÿ“Œ Mahammad:

๐Ÿ“Œ Alexander:

๐Ÿ“Œ Austin:

back to top

๐Ÿ”ญ Future

Some additional features I may implement in the project:

  • Use Rails framework with this project
  • Implement better visual interface

back to top

๐Ÿค๐Ÿป Contributions

Wish to contribute to this project?
Contributions, issues, and feature requests are more than welcome!
Feel free to check the issues page too.

back to top

โญ๏ธ Support

Like this project? Show your support by starring!

back to top

๐Ÿ™๐Ÿป Acknowledgements

I thank everyone at Microverse for guiding me through this project.

back to top

๐Ÿ“ License

This project is MIT licensed.

back to top

things-catalogue's People

Contributors

alexansaa avatar mahammad-mostafa avatar stino-x avatar

Watchers

 avatar

things-catalogue's Issues

[2pt] Author class - Alexander

  • Create an Author class with an association to the Item class (in a separate .rb file).
  • All Author class properties visible in the diagram should be defined and set up in the constructor method.
  • Implement methods:
    • add_item method in the Author class
      • should take an instance of the Item class as an input
      • should add the input item to the collection of items
      • should add self as a property of the item object (by using the correct setter from the item object)

[2pt] Label class - Mahammad

  • Create a Label class with an association to the Item class (in a separate .rb file).
  • All Label class properties visible in the diagram should be defined and set up in the constructor method.
  • Implement methods:
    • add_item method in the Label class
      • should take an instance of the Item class as an input
      • should add the input item to the collection of items
      • should add self as a property of the item object (by using the correct setter from the item object)

[1pt] Main file - Group

  • Create a main.rb file that will serve as your console app entry-point.
  • Implement startup actions:
    • Present the user with a list of options to perform.
    • Let users choose an option.
    • If needed, ask for parameters for the option.
    • Have a way to quit the app

[1pt] Database schema - Austin

  • Create a schema.sql file with tables that will be analogical to the structure of the classes that you created:
    • music_albums table (add all properties and associations from the parent Item class as table columns)
    • genres table

[2pt] Book class - Mahammad

  • Create a Book class in a separate .rb file.
  • All Book class properties visible in the diagram should be defined and set up in the constructor method.
  • Implement methods:
    • can_be_archived?() in the Book class
      • should override the method from the parent class
      • should return true if parent's method returns true OR if cover_state equals to "bad"
      • otherwise, it should return false

[2pt] Game class - Alexander

  • Create a Game class in a separate .rb file.
  • All Game class properties visible in the diagram should be defined and set up in the constructor method.
  • Implement methods:
    • can_be_archived?() in the Game class
      • should override the method from the parent class
      • should return true if parent's method returns true AND if last_played_at is older than 2 years
      • otherwise, it should return false

[2pt] MusicAlbum class - Austin

  • Create MusicAlbum class in a separate .rb file.
  • All MusicAlbum class properties visible in the diagram should be defined and set up in the constructor method.
  • Implement methods:
    • can_be_archived?() in the MusicAlbum class
      • should override the method from the parent class
      • should return true if parent's method returns true AND if on_spotify equals true
      • otherwise, it should return false

[1pt] Database schema - Alexander

  • Create a schema.sql file with tables that will be analogical to the structure of the classes that you created:
    • games table (add all properties and associations from the parent Item class as table columns)
    • authors table

[2pt] Item class - Group

  • Create Item class in a separate .rb file.
  • All Item class properties visible in the diagram should be defined and set up in the constructor method. Exception: properties for the 1-to-many relationships should NOT be set in the constructor method. Instead, they should have a custom setter method created.
  • Add all methods visible in the diagram.
  • Implement methods:
    • can_be_archived?() in the Item class
      • should return true if published_date is older than 10 years
      • otherwise, it should return false
    • move_to_archive() in the Item class
      • should reuse can_be_archived?() method
      • should change the archived property to true if the result of the can_be_archived?() method is true
      • should do nothing if the result of the can_be_archived?() method is false

[2pt] Genre class - Austin

  • Create Genre class with an association to the Item class (in a separate .rb file).
  • All Genre class properties visible in the diagram should be defined and set up in the constructor method.
  • Implement methods:
    • add_item method in the Genre class
      • should take an instance of the Item class as an input
      • should add the input item to the collection of items
      • should add self as a property of the item object (by using the correct setter from the item object)

[1pt] Database schema - Mahammad

  • Create a schema.sql file with tables that will be analogical to the structure of the classes that you created:
    • books table (add all properties and associations from the parent Item class as table columns)
    • labels table

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.