- Fork this Repository
- Clone YOUR fork
- Compete the activity below
- Push your solution to your fork
- Submit a pull request from your repository to the turingschool-examples repository
- Make sure to put your name in your PR!
Use TDD to create a Book
class that responds to the following interaction pattern. For the publication_year
method, assume that the year is always the last four characters of the publication date.
pry(main)> require './lib/book'
#=> true
pry(main)> book = Book.new({author_first_name: "Harper", author_last_name: "Lee", title: "To Kill a Mockingbird", publication_date: "July 11, 1960"})
#=> #<Book:0x00007fcc021fad08...>
pry(main)> book.title
#=> "To Kill a Mockingbird"
pry(main)> book.author
#=> "Harper Lee"
pry(main)> book.publication_year
#=> "1960"
Use TDD to create an Author
class that responds to the following interaction pattern.
The write
method must take two Strings as arguments and return an instance of Book
.
pry(main)> require './lib/book'
#=> true
pry(main)> require './lib/author'
#=> true
pry(main)> charlotte_bronte = Author.new({first_name: "Charlotte", last_name: "Bronte"})
#=> #<Author:0x00007fb898081850...>
pry(main)> charlotte_bronte.name
#=> "Charlotte Bronte"
pry(main)> charlotte_bronte.books
#=> []
pry(main)> jane_eyre = charlotte_bronte.write("Jane Eyre", "October 16, 1847")
#=> #<Book:0x00007fb896e22538...>
pry(main)> jane_eyre.class
#=> Book
pry(main)> jane_eyre.title
#=> "Jane Eyre"
pry(main)> villette = charlotte_bronte.write("Villette", "1853")
#=> #<Book:0x00007fb8980aaca0...>
pry(main)> charlotte_bronte.books
#=> [#<Book:0x00007fb896e22538...>, #<Book:0x00007fb8980aaca0...>]
Use TDD to create a Library
class that responds to the following interaction pattern.
pry(main)> require './lib/library'
#=> true
pry(main)> require './lib/author'
#=> true
pry(main)> dpl = Library.new("Denver Public Library")
#=> #<Library:0x00007fbeea3653c0...>
pry(main)> dpl.name
#=> "Denver Public Library"
pry(main)> dpl.books
#=> []
pry(main)> dpl.authors
#=> []
pry(main)> charlotte_bronte = Author.new({first_name: "Charlotte", last_name: "Bronte"})
#=> #<Author:0x00007fbeea2d78b8...>
pry(main)> jane_eyre = charlotte_bronte.write("Jane Eyre", "October 16, 1847")
#=> #<Book:0x00007fbeeb3beca8...>
pry(main)> professor = charlotte_bronte.write("The Professor", "1857")
#=> #<Book:0x00007fbeea8efd90...>
pry(main)> villette = charlotte_bronte.write("Villette", "1853")
#=> #<Book:0x00007fbeea24fbe8...>
pry(main)> harper_lee = Author.new({first_name: "Harper", last_name: "Lee"})
#=> #<Author:0x00007fbeea112730...>
pry(main)> mockingbird = harper_lee.write("To Kill a Mockingbird", "July 11, 1960")
#=> #<Book:0x00007fbeeb1089f0...>
pry(main)> dpl.add_author(charlotte_bronte)
pry(main)> dpl.add_author(harper_lee)
pry(main)> dpl.authors
#=> [#<Author:0x00007fbeea2d78b8...>, #<Author:0x00007fbeea112730...>]
pry(main)> dpl.books
#=> [#<Book:0x00007fbeeb3beca8...>, #<Book:0x00007fbeea8efd90...>, #<Book:0x00007fbeea24fbe8...>, #<Book:0x00007fbeeb1089f0...>]
Use TDD to implement the following features:
- Create a
Library
class. Each library has aname
as well as a way to read that data. - Each library has a list of
books
andauthors
as well as a way to read that data - Each library can
add_author
which will store the author to the library's list ofauthors
as well as storing any books that author has written to the library's list ofbooks
- Each library can tell us the
publication_time_frame_for
an author which takes anAuthor
object as an argument and returns a hash with two key/value pairs:
:start
which points to the publication year of theAuthor
's first book.:end
which points to the publication year of theAuthor
's last book.
Method Name | Return Value (type) |
---|---|
name |
String |
books |
Array of Book objects |
authors |
Array of Author objects |
add_author(author) |
authors (Array of Author objects) |
publication_time_frame_for(author) |
Hash with two key/value pairs: :start which points to the publication year of the Author 's first book and :end which points to the publication year of the Author 's last book. Example: {:start => "1847", :end => "1857} |
Use TDD to implement the following features on the Library
class:
- Checking out a book and the ability to return a list of all books currently checked out
- Returning a book. Calling this method means that a book is no longer checked out.
- Finding the book that has been checked out the most times from this library
Method Name | Return Value (type) |
---|---|
checked_out_books |
Array of Book objects that have been checked out |
checkout(book) |
true or false depending on being checked out |
return(book) |
Removes the book from the checked_out_books array and puts it into the books array |
most_popular_book |
Book object |