BookStoreGem 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/book.rb +10 -0
- data/lib/book_store.txt +5 -0
- data/lib/bookstore.rb +69 -0
- data/lib/bookstore_run.rb +57 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d2c888aa048beddf4cab5a8dc7bd30d7021f15ce
|
4
|
+
data.tar.gz: a3feba0c0213fe9e71c7990cb6827c3ccb712e62
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6c3c96a30c8aa4925fafa1505f8d37383db62733441dfe3998f17c7abf3ae33e2d789178ee918dac42a8b7f167971af30a27e5251ec5a07bc2a3c7ba01910b74
|
7
|
+
data.tar.gz: 04dbbe4c53db1e433bafee7ccf425f1936db48b0900ee47b3ff2c01a397f1f28fb347264a2ee970961a7bc8390486bf7ecbfd7ef4752a919c83de2503a5e6a7f
|
data/lib/book.rb
ADDED
data/lib/book_store.txt
ADDED
data/lib/bookstore.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
require_relative 'book'
|
3
|
+
|
4
|
+
# BookStore.rb
|
5
|
+
class BookStore
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@books = []
|
10
|
+
|
11
|
+
IO.foreach('book_store.txt') do |line|
|
12
|
+
name = line.split('|').first
|
13
|
+
rating = line.split('|').last
|
14
|
+
|
15
|
+
book = Book.new(name.intern, rating.to_i)
|
16
|
+
|
17
|
+
@books << book
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_book(name, rating)
|
22
|
+
book = Book.new(name.intern, rating.to_i)
|
23
|
+
|
24
|
+
@books << book
|
25
|
+
update_store
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete_book(name)
|
29
|
+
@books.select! { |book| book.title != name.intern }
|
30
|
+
|
31
|
+
update_store
|
32
|
+
end
|
33
|
+
|
34
|
+
def search_book(name)
|
35
|
+
result = []
|
36
|
+
@books.each do |book|
|
37
|
+
next unless book.title.downcase.to_s.include? name.downcase
|
38
|
+
result << Book.new(book.title, book.rating)
|
39
|
+
end
|
40
|
+
|
41
|
+
result
|
42
|
+
end
|
43
|
+
|
44
|
+
def display_books
|
45
|
+
puts 'Books available in store'
|
46
|
+
@books.each do |book|
|
47
|
+
puts "Book Name: #{book.title}"
|
48
|
+
puts "Book Rating: #{book.rating}"
|
49
|
+
puts ''
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def book_exists(title)
|
54
|
+
@books.each do |book|
|
55
|
+
return true if book.title == title
|
56
|
+
end
|
57
|
+
false
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def update_store
|
63
|
+
book_store = File.open('book_store.txt', 'w')
|
64
|
+
@books.each do |book|
|
65
|
+
book_store.syswrite("#{book.title}|#{book.rating}\n")
|
66
|
+
end
|
67
|
+
book_store.close
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative 'bookstore'
|
2
|
+
|
3
|
+
# BookStore Execution
|
4
|
+
class BookStoreRun
|
5
|
+
def self.start
|
6
|
+
book_store = BookStore.instance
|
7
|
+
|
8
|
+
puts 'Welcome to the book store'
|
9
|
+
puts 'What would you like to do'
|
10
|
+
puts '1. Add a book'
|
11
|
+
puts '2. Search for a book'
|
12
|
+
puts '3. Delete a book'
|
13
|
+
puts '4. View all the books'
|
14
|
+
puts 'Enter your choice (1-4)'
|
15
|
+
|
16
|
+
choice = gets.chomp
|
17
|
+
case choice
|
18
|
+
when '1'
|
19
|
+
puts 'Enter title of book'
|
20
|
+
title = gets.chomp
|
21
|
+
if book_store.book_exists(title.intern)
|
22
|
+
puts 'Sorry, the book already exists in our store'
|
23
|
+
else
|
24
|
+
puts 'Enter book rating'
|
25
|
+
rating = gets.chomp
|
26
|
+
book_store.add_book(title, rating)
|
27
|
+
puts 'Book added to store'
|
28
|
+
end
|
29
|
+
when '2'
|
30
|
+
puts 'What would you like to search for'
|
31
|
+
search = gets.chomp
|
32
|
+
books = book_store.search_book(search)
|
33
|
+
|
34
|
+
if !books.empty?
|
35
|
+
books.each do |book|
|
36
|
+
puts "Book Name: #{book.title}"
|
37
|
+
puts "Book Rating: #{book.rating}"
|
38
|
+
end
|
39
|
+
else
|
40
|
+
puts 'No book found'
|
41
|
+
end
|
42
|
+
when '3'
|
43
|
+
puts 'Enter title of book'
|
44
|
+
title = gets.chomp
|
45
|
+
if book_store.book_exists(title.intern)
|
46
|
+
book_store.delete_book(title)
|
47
|
+
puts 'Book removed from store'
|
48
|
+
else
|
49
|
+
puts 'Sorry, that book does not exist in our store'
|
50
|
+
end
|
51
|
+
when '4'
|
52
|
+
book_store.display_books
|
53
|
+
else
|
54
|
+
puts 'Invalid input entered'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: BookStoreGem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bilal Naeem
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-13 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: "A simple book store gem. \nInstructions:\nrequire 'bookstore_run'\nBookStoreRun.start"
|
14
|
+
email: bilal.naeem@to
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/book.rb
|
20
|
+
- lib/book_store.txt
|
21
|
+
- lib/bookstore.rb
|
22
|
+
- lib/bookstore_run.rb
|
23
|
+
homepage:
|
24
|
+
licenses:
|
25
|
+
- MIT
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 2.5.1
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: Book Store
|
47
|
+
test_files: []
|