wbookstore 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/current.iml +35 -0
- data/.idea/misc.xml +14 -0
- data/.idea/modules.xml +8 -0
- data/.idea/vcs.xml +6 -0
- data/.idea/workspace.xml +424 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +34 -0
- data/RakeFile.rb +11 -0
- data/coverage/.last_run.json +5 -0
- data/coverage/.resultset.json +146 -0
- data/coverage/.resultset.json.lock +0 -0
- data/coverage/assets/0.10.0/application.css +799 -0
- data/coverage/assets/0.10.0/application.js +1707 -0
- data/coverage/assets/0.10.0/colorbox/border.png +0 -0
- data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
- data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
- data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.10.0/favicon_green.png +0 -0
- data/coverage/assets/0.10.0/favicon_red.png +0 -0
- data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
- data/coverage/assets/0.10.0/loading.gif +0 -0
- data/coverage/assets/0.10.0/magnify.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +490 -0
- data/lib/BookStoreCore.rb +52 -0
- data/lib/bookstore.rb +95 -0
- data/lib/bookstore_test.rb +32 -0
- data/lib/fi.json +1 -0
- data/spec/BookStoreCore_spec.rb +38 -0
- data/spec/spec_helper.rb +4 -0
- data/wbookstore.gemspec +17 -0
- metadata +86 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
# core class for bookstore
|
4
|
+
class BookStoreCore
|
5
|
+
def writef(path, book_hash)
|
6
|
+
File.open(path, 'w') do |f|
|
7
|
+
f.write(book_hash.to_json)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def readf(path)
|
12
|
+
file = File.read(path)
|
13
|
+
JSON.parse(file)
|
14
|
+
end
|
15
|
+
|
16
|
+
def exist?(title, book_hash)
|
17
|
+
is_exist = false
|
18
|
+
book_hash.each do |k, _v|
|
19
|
+
is_exist = true if k.to_s == title
|
20
|
+
end
|
21
|
+
is_exist
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_update_book(title, rating, book_hash)
|
25
|
+
book_hash[title.to_sym] = rating.to_i
|
26
|
+
book_hash
|
27
|
+
end
|
28
|
+
|
29
|
+
def delete_book(title, book_hash)
|
30
|
+
updated_books = {}
|
31
|
+
book_hash.each do |k, _v|
|
32
|
+
updated_books[k] = v if k.to_s != title
|
33
|
+
end
|
34
|
+
updated_books
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_full_title(start_chars, book_hash)
|
38
|
+
output_string = ''
|
39
|
+
book_hash.each do |title, _rating|
|
40
|
+
output_string += title.to_s if title.to_s.include? start_chars
|
41
|
+
end
|
42
|
+
output_string
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_all_books(book_hash)
|
46
|
+
output_string = ''
|
47
|
+
book_hash.each do |book, rating|
|
48
|
+
output_string += "#{book} has rating #{rating}."
|
49
|
+
end
|
50
|
+
output_string
|
51
|
+
end
|
52
|
+
end
|
data/lib/bookstore.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'BookStoreCore'
|
3
|
+
|
4
|
+
# Bookstore running script
|
5
|
+
class BookStore
|
6
|
+
def initialize
|
7
|
+
puts 'Store initialized!'
|
8
|
+
end
|
9
|
+
|
10
|
+
def main_store
|
11
|
+
case main_message
|
12
|
+
when 'add' then add_case
|
13
|
+
when 'update' then update_case
|
14
|
+
when 'search' then search_all_case
|
15
|
+
when 'all'
|
16
|
+
bs = BookStoreCore.new
|
17
|
+
puts bs.get_all_books(bs.readf('fi.json'))
|
18
|
+
when 'delete' then delete_case
|
19
|
+
else puts 'Sorry, wrong input!'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def main_message
|
24
|
+
puts 'What would you like to do?'
|
25
|
+
puts "-- Type 'add' to Add a book."
|
26
|
+
puts "-- Type 'update' to Update a book."
|
27
|
+
puts "-- Type 'search' to Display all books."
|
28
|
+
puts "-- Type 'all' to Display all books."
|
29
|
+
puts "-- Type 'delete' to Delete a book."
|
30
|
+
choice = gets.chomp.downcase
|
31
|
+
choice
|
32
|
+
end
|
33
|
+
|
34
|
+
def search_all_case
|
35
|
+
puts 'Please add starting characters.'
|
36
|
+
start_chars = gets.chomp
|
37
|
+
bs = BookStoreCore.new
|
38
|
+
puts bs.get_full_title(start_chars, bs.readf('fi.json'))
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_case
|
42
|
+
puts 'What is the title of the book?'
|
43
|
+
title = gets.chomp
|
44
|
+
bs = BookStoreCore.new
|
45
|
+
if bs.is_exist(title, bs.readf('fi.json'))
|
46
|
+
puts 'This book already exist.'
|
47
|
+
else
|
48
|
+
add_book(title)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_book(title)
|
53
|
+
puts 'What is the rating of the book?'
|
54
|
+
rating = gets.chomp
|
55
|
+
bs = BookStoreCore.new
|
56
|
+
book = bs.add_update_book(title, rating, bs.readf('fi.json'))
|
57
|
+
bs.writef('fi.json', book)
|
58
|
+
puts 'Added successfully.'
|
59
|
+
end
|
60
|
+
|
61
|
+
def update_case
|
62
|
+
puts 'Which book do you want to update?'
|
63
|
+
title = gets.chomp
|
64
|
+
decide_update(title)
|
65
|
+
end
|
66
|
+
|
67
|
+
def decide_update(title)
|
68
|
+
bs = BookStoreCore.new
|
69
|
+
if bs.is_exist(title, bs.readf('fi.json'))
|
70
|
+
puts 'What is the rating of the book?'
|
71
|
+
rating = gets.chomp
|
72
|
+
book = bs.add_update_book(title, rating, bs.readf('fi.json'))
|
73
|
+
bs.writef('fi.json', book)
|
74
|
+
puts 'Updated successfully.'
|
75
|
+
else
|
76
|
+
puts 'This book does not exist.'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def delete_case
|
81
|
+
puts 'Which book do you want to delete?'
|
82
|
+
title = gets.chomp
|
83
|
+
bs = BookStoreCore.new
|
84
|
+
if bs.is_exist(title, bs.readf('fi.json'))
|
85
|
+
book_hash = bs.delete_book(title, bs.readf('fi.json'))
|
86
|
+
bs.writef('fi.json', book_hash)
|
87
|
+
puts 'Deleted successfully.'
|
88
|
+
else
|
89
|
+
puts 'This book does not exist.'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# initializing the bookstore
|
95
|
+
BookStore.new.main_store
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative 'spec/spec_helper'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require './BookStoreCore'
|
4
|
+
|
5
|
+
class TestBookStore < Minitest::Test
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@BookStore = BookStoreCore.new
|
9
|
+
@bookHash={"Bone":2,"Btwo":2,"Bthree":1,"Bfour":4}
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_is_exist
|
13
|
+
assert_equal true, @BookStore.exist?("Btwo",{"Bone":2,"Btwo":2,"Bthree":1,"Bfour":4})
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_get_full_title
|
17
|
+
assert_equal ('B-one'), @BookStore.get_full_title("B-on",{"B-one":2,"B-two":2,"B-three":1,"B-four":4})
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_get_all_books
|
21
|
+
assert_equal ("B-one has rating 2."), @BookStore.get_all_books({"B-one":2})
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def test_add_update_book
|
26
|
+
assert_equal ({"B-one":2,"B-two":2,"B-three":1,"B-four":4,"B-to":2}), @BookStore.add_update_book("B-to",2,{"B-one":2,"B-two":2,"B-three":1,"B-four":4})
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_delete_book
|
30
|
+
assert_equal ({"B-one":2,"B-three":1,"B-four":4}), @BookStore.delete_book("B-two",{"B-one":2,"B-two":2,"B-three":1,"B-four":4})
|
31
|
+
end
|
32
|
+
end
|
data/lib/fi.json
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"Bone":2,"Btwo":2,"Bfour":4,"Bfive":3}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require './BookStoreCore'
|
3
|
+
|
4
|
+
describe BookStoreCore do
|
5
|
+
book_store = BookStoreCore.new
|
6
|
+
|
7
|
+
describe "#get_all_books" do
|
8
|
+
it "returns All books" do
|
9
|
+
expected_string = "B-one has rating 2."
|
10
|
+
expect(book_store.get_all_books({"B-one":2})).to eq(expected_string)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#get_full_title" do
|
15
|
+
it "Gets title of given book." do
|
16
|
+
expect(book_store.get_full_title("B-on",{"B-one":2,"B-two":2,"B-three":1,"B-four":4})).to eq('B-one')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#is_exist" do
|
21
|
+
it "Checks if a book exists." do
|
22
|
+
expect(book_store.exist?("Btwo",{"Bone":2,"Btwo":2,"Bthree":1,"Bfour":4})).to eq(true)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#add_update_book" do
|
27
|
+
it "Adds or update a book." do
|
28
|
+
expect(book_store.add_update_book("B-to",2,{"B-one":2,"B-two":2,"B-three":1,"B-four":4})).to eq({"B-one":2,"B-two":2,"B-three":1,"B-four":4,"B-to":2})
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#delete_book" do
|
33
|
+
it "Delets a book." do
|
34
|
+
expect(book_store.delete_book("B-two",{"B-one":2,"B-two":2,"B-three":1,"B-four":4}) ).to eq({"B-one":2,"B-three":1,"B-four":4})
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/wbookstore.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
Gem::Specification.new do |s|
|
3
|
+
s.name = 'wbookstore'
|
4
|
+
s.version = '0.0.1'
|
5
|
+
s.date = '2016-10-04'
|
6
|
+
s.summary = "BookStore!"
|
7
|
+
s.description = "A simple BookStore"
|
8
|
+
s.authors = ["Waqar Haider"]
|
9
|
+
s.email = 'waqar.haider@confiz.com'
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.homepage =
|
12
|
+
'http://rubygems.org/gems/waqar-bookstore'
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wbookstore
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Waqar Haider
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-04 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A simple BookStore
|
14
|
+
email: waqar.haider@confiz.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- ".idea/.rakeTasks"
|
20
|
+
- ".idea/current.iml"
|
21
|
+
- ".idea/misc.xml"
|
22
|
+
- ".idea/modules.xml"
|
23
|
+
- ".idea/vcs.xml"
|
24
|
+
- ".idea/workspace.xml"
|
25
|
+
- Gemfile
|
26
|
+
- Gemfile.lock
|
27
|
+
- RakeFile.rb
|
28
|
+
- coverage/.last_run.json
|
29
|
+
- coverage/.resultset.json
|
30
|
+
- coverage/.resultset.json.lock
|
31
|
+
- coverage/assets/0.10.0/application.css
|
32
|
+
- coverage/assets/0.10.0/application.js
|
33
|
+
- coverage/assets/0.10.0/colorbox/border.png
|
34
|
+
- coverage/assets/0.10.0/colorbox/controls.png
|
35
|
+
- coverage/assets/0.10.0/colorbox/loading.gif
|
36
|
+
- coverage/assets/0.10.0/colorbox/loading_background.png
|
37
|
+
- coverage/assets/0.10.0/favicon_green.png
|
38
|
+
- coverage/assets/0.10.0/favicon_red.png
|
39
|
+
- coverage/assets/0.10.0/favicon_yellow.png
|
40
|
+
- coverage/assets/0.10.0/loading.gif
|
41
|
+
- coverage/assets/0.10.0/magnify.png
|
42
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
|
43
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
|
44
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
|
45
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
|
46
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png
|
47
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
|
48
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
|
49
|
+
- coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
|
50
|
+
- coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png
|
51
|
+
- coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png
|
52
|
+
- coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png
|
53
|
+
- coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png
|
54
|
+
- coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png
|
55
|
+
- coverage/index.html
|
56
|
+
- lib/BookStoreCore.rb
|
57
|
+
- lib/bookstore.rb
|
58
|
+
- lib/bookstore_test.rb
|
59
|
+
- lib/fi.json
|
60
|
+
- spec/BookStoreCore_spec.rb
|
61
|
+
- spec/spec_helper.rb
|
62
|
+
- wbookstore.gemspec
|
63
|
+
homepage: http://rubygems.org/gems/waqar-bookstore
|
64
|
+
licenses: []
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.6.6
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: BookStore!
|
86
|
+
test_files: []
|