Library_mw 1.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/LICENSE +21 -0
- data/README +0 -0
- data/bin/books.csv +15 -0
- data/bin/load_library.rb +11 -0
- data/bin/my_library +71 -0
- data/bin/read_file.rb +9 -0
- data/bin/test.rb +7 -0
- data/lib/library/book.rb +23 -0
- data/lib/library/library.rb +39 -0
- data/spec/library/book_spec.rb +30 -0
- data/spec/library/library_spec.rb +27 -0
- metadata +71 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b25acacc33dd5ec0d8fd9b371a6aa9019efff329
|
4
|
+
data.tar.gz: bf5457523387bffd2122910135ab62c210bab7d9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9c34901ae06be57655760550c8e6937b019f82cee0ba07b2a8d412a4fb0539dc02cc15afb9184251ddb714e4df147a07b991b028758cacab83ee01a26dc67480
|
7
|
+
data.tar.gz: e2797a37af84728deb0b0ef67e7ba94e09323cbc0187addf70f7ed47a9eef6f8019eb7e1cac2b04a8fbcc1103e985e9b705b4766d48606b908c2e177007c3e51
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) 2015 Michael Walsh
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
- You may not use this Software in other training contexts.
|
11
|
+
|
12
|
+
- The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README
ADDED
File without changes
|
data/bin/books.csv
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
manly,1 highwater place,alamo,tom clancy,A12345.111.1
|
2
|
+
coogee,2 ifbysea avenue,the tempest,shakespeare,B45678.123.3
|
3
|
+
coogee,2 ifbysea avenue,the shock of the new,jack hubbard,C12234.222.4
|
4
|
+
manly,1 highwater place,frankly speaking about harry,mike smantd,A43322.124.4
|
5
|
+
manly,1 highwater place,johnathon frakes alive,mike cuthbert,A44312.124.4
|
6
|
+
manly,1 highwater place,just popped in to see mary,john pettigrew,A94342.124.4
|
7
|
+
manly,1 highwater place,how about those nicks,ahmad baker,A84372.124.4
|
8
|
+
manly,1 highwater place,creature comforts,m k goodstaff,P44392.124.4
|
9
|
+
manly,1 highwater place,catering for the over 50 crowd,john holland,J33432.124.4
|
10
|
+
coogee,2 ifbysea avenue,no complaining,carey elwes,U85678.123.3
|
11
|
+
coogee,2 ifbysea avenue,shacking up with the in-laws,jack black,E42234.222.4
|
12
|
+
coogee,2 ifbysea avenue,how about dinner,Tim foster,B45678.173.3
|
13
|
+
coogee,2 ifbysea avenue,did i disturb you?,jess arncliffe,H92234.222.4
|
14
|
+
coogee,2 ifbysea avenue,r u ok,peter stormare,D75678.123.3
|
15
|
+
coogee,2 ifbysea avenue,mallard season,bill heffernan,Z45334.222.4
|
data/bin/load_library.rb
ADDED
data/bin/my_library
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/library/library'
|
4
|
+
require_relative '../lib/library/book'
|
5
|
+
require 'CSV'
|
6
|
+
|
7
|
+
all_books = CSV.read('.\books.csv')
|
8
|
+
|
9
|
+
municipality = []
|
10
|
+
location = 0
|
11
|
+
libraries = []
|
12
|
+
all_books.each do |book|
|
13
|
+
libraries << book.first(2)
|
14
|
+
end
|
15
|
+
|
16
|
+
libraries.uniq!.each do |libr|
|
17
|
+
municipality[location] = Library::Library.new(libr[0], libr[1])
|
18
|
+
location += 1
|
19
|
+
end
|
20
|
+
|
21
|
+
municipality.each do |loc|
|
22
|
+
puts loc.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
all_books.each do |book|
|
26
|
+
municipality.each do |library|
|
27
|
+
if book[0].capitalize == library.name
|
28
|
+
library.add_book(Library::Book.new(book[2],book[3], book[4]))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
municipality.each do |library|
|
34
|
+
puts "\nBooks located at #{library.name} are:"
|
35
|
+
library.show_books_in_library
|
36
|
+
end
|
37
|
+
|
38
|
+
puts "Book Search. Enter Book Name or ISBN):"
|
39
|
+
book_search = gets.chomp
|
40
|
+
|
41
|
+
|
42
|
+
go_to_library = nil
|
43
|
+
go_to_book = nil
|
44
|
+
puts "\nSearching Libraries......"
|
45
|
+
municipality.each do |a_library|
|
46
|
+
go_to_book = a_library.find_book(book_search)
|
47
|
+
go_to_library = a_library
|
48
|
+
if go_to_book != nil
|
49
|
+
break
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
if go_to_book != nil
|
54
|
+
puts go_to_library.to_s
|
55
|
+
puts go_to_book.show_book_details
|
56
|
+
else
|
57
|
+
puts "Can't find that book. Try elsewhere or come back next month"
|
58
|
+
end
|
59
|
+
|
60
|
+
if go_to_book !=nil
|
61
|
+
puts "Do you want to borrow it?"
|
62
|
+
answer = gets.chomp
|
63
|
+
if answer == 'y'
|
64
|
+
go_to_book.checkout
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
municipality.each do |library|
|
69
|
+
puts "\nBooks located at #{library.name} are:"
|
70
|
+
library.show_books_in_library
|
71
|
+
end
|
data/bin/read_file.rb
ADDED
data/bin/test.rb
ADDED
data/lib/library/book.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Library
|
2
|
+
class Book
|
3
|
+
attr_reader :name
|
4
|
+
attr_reader :status
|
5
|
+
|
6
|
+
def initialize(name, author, isbn)
|
7
|
+
@name = name.split.map(&:capitalize).join(' ')
|
8
|
+
@author = author.split.map(&:capitalize).join(' ')
|
9
|
+
@isbn = isbn
|
10
|
+
@status = true
|
11
|
+
end
|
12
|
+
|
13
|
+
def show_book_details
|
14
|
+
have_it = @status ? "available" : "not available"
|
15
|
+
"#{@name} (ISBN: #{@isbn}) by #{@author} - (#{have_it})"
|
16
|
+
end
|
17
|
+
|
18
|
+
def checkout
|
19
|
+
@status = false
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'book'
|
2
|
+
|
3
|
+
module Library
|
4
|
+
class Library
|
5
|
+
attr_reader :name
|
6
|
+
attr_reader :books
|
7
|
+
|
8
|
+
def initialize(name, address)
|
9
|
+
@name = name.split.map(&:capitalize).join(' ')
|
10
|
+
@address = address.split.map(&:capitalize).join(' ')
|
11
|
+
@books =[]
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_book(book)
|
15
|
+
@books << book
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
"#{@name} library is located at #{@address}, #{@name}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_book(book_title)
|
23
|
+
return_book = nil
|
24
|
+
@books.each do |book|
|
25
|
+
if book.name.upcase == book_title.upcase
|
26
|
+
return_book = book
|
27
|
+
end
|
28
|
+
end
|
29
|
+
return return_book
|
30
|
+
end
|
31
|
+
|
32
|
+
def show_books_in_library
|
33
|
+
@books.each do |book|
|
34
|
+
puts book.show_book_details
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end #Library
|
39
|
+
end #Library
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'library/book'
|
2
|
+
|
3
|
+
module Library
|
4
|
+
describe 'Book' do
|
5
|
+
before do
|
6
|
+
@alamo = Book.new('alamo','john b. higgins','12345.111.1')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#new' do
|
10
|
+
it 'creates an object of class Book' do
|
11
|
+
expect(@alamo).to be_an_instance_of Book
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'has a capitalized name' do
|
15
|
+
expect(@alamo.name).to eq('Alamo')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'has a status of checked-in' do
|
19
|
+
expect(@alamo.status).to be true
|
20
|
+
end
|
21
|
+
end #new
|
22
|
+
|
23
|
+
describe '#show_book_details' do
|
24
|
+
it 'formats the book output' do
|
25
|
+
expect(@alamo.show_book_details).to eq('Alamo (ISBN: 12345.111.1) by John B. Higgins - (available)')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end #Book
|
30
|
+
end #module
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'library/library'
|
2
|
+
|
3
|
+
module Library
|
4
|
+
|
5
|
+
describe 'Library' do
|
6
|
+
before do
|
7
|
+
@manly = Library.new('manly', '1 Harbourside Place')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#new' do
|
11
|
+
it 'creates an instance of Library' do
|
12
|
+
expect(@manly).to be_an_instance_of Library
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'has a capitalized name' do
|
16
|
+
expect(@manly.name).to eq('Manly')
|
17
|
+
end
|
18
|
+
end #new
|
19
|
+
|
20
|
+
describe '#to_s' do
|
21
|
+
it 'formats the name and address' do
|
22
|
+
expect(@manly.to_s).to eq('Manly library is located at 1 Harbourside Place, Manly')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end #Library
|
27
|
+
end #module
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Library_mw
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Walsh
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: ''
|
28
|
+
email: michael.tom.walsh@gmail.com
|
29
|
+
executables:
|
30
|
+
- my_library
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- LICENSE
|
35
|
+
- README
|
36
|
+
- bin/books.csv
|
37
|
+
- bin/load_library.rb
|
38
|
+
- bin/my_library
|
39
|
+
- bin/read_file.rb
|
40
|
+
- bin/test.rb
|
41
|
+
- lib/library/book.rb
|
42
|
+
- lib/library/library.rb
|
43
|
+
- spec/library/book_spec.rb
|
44
|
+
- spec/library/library_spec.rb
|
45
|
+
homepage: https://au.linkedin.com/in/Monkee45
|
46
|
+
licenses:
|
47
|
+
- MIT
|
48
|
+
metadata: {}
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '1.9'
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
requirements: []
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 2.2.3
|
66
|
+
signing_key:
|
67
|
+
specification_version: 4
|
68
|
+
summary: simiple library program that loads books and allows a simple search
|
69
|
+
test_files:
|
70
|
+
- spec/library/book_spec.rb
|
71
|
+
- spec/library/library_spec.rb
|