uq-libraries 0.1.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/bin/uq-libraries +9 -0
- data/config/environment.rb +9 -0
- data/lib/uq_libraries.rb +4 -0
- data/lib/uq_libraries/cli.rb +85 -0
- data/lib/uq_libraries/library.rb +22 -0
- data/lib/uq_libraries/library_details.rb +20 -0
- data/lib/uq_libraries/scraper.rb +34 -0
- metadata +135 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 93aa6b64252c43c27fc73ca5861fc8206939fb71
|
4
|
+
data.tar.gz: aca350c261701f290810d6ae2fb477a5fe76b8d5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ef937106b27634536994bfb5cf911acf503d04e8f5efa9d8402231335ce99b702766919d5552231bcf372d88a31d2a375aa4c7f3b6a2a3e36945129aaec3d145
|
7
|
+
data.tar.gz: 846a0837ba8c43d7d0480554d7262ec578701636db0c4fd6b68e4199025330fd0fbf453e6308940b4f303277f0efe137ecf6fc9479297db4b6e412eb27691dc0
|
data/bin/uq-libraries
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'pry'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'open-uri'
|
4
|
+
require 'colorize'
|
5
|
+
|
6
|
+
require_relative '../lib/uq_libraries/scraper'
|
7
|
+
require_relative '../lib/uq_libraries/library'
|
8
|
+
require_relative '../lib/uq_libraries/library_details'
|
9
|
+
require_relative '../lib/uq_libraries/cli'
|
data/lib/uq_libraries.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
class UqLibraries::CLI
|
2
|
+
|
3
|
+
def call
|
4
|
+
loading # Shows loading screen while waiting for libraries to be scraped
|
5
|
+
|
6
|
+
create_libraries # Creates library instances for each library hash
|
7
|
+
|
8
|
+
display_libraries # Iterates through all libraries and lists them with an index
|
9
|
+
|
10
|
+
run_gem # Takes the user input and calls methods depending on input
|
11
|
+
end
|
12
|
+
|
13
|
+
def loading # Shows loading screen while waiting for libraries to be scraped
|
14
|
+
puts "Loading...\n"
|
15
|
+
end
|
16
|
+
|
17
|
+
def display_libraries # Gets libraries from array and puts out their names preceded by their index starting at 1.
|
18
|
+
system "clear" or system "cls"
|
19
|
+
UqLibraries::Library.all.each.with_index(1) do |library, index|
|
20
|
+
puts "#{index}. #{library.name}: #{status(index)}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_libraries # Creates library instances for each library hash
|
25
|
+
UqLibraries::Library.create_from_collection(UqLibraries::Scraper.scrape_main_page)
|
26
|
+
end
|
27
|
+
|
28
|
+
def status(index) # Helper method for #display_libraries. Shows status of library QUIET/NORMAL/BUSY
|
29
|
+
library = UqLibraries::Library.all[index - 1]
|
30
|
+
|
31
|
+
if library.total_available.to_i <= 0.3333333333 * library.total_out_of_available.to_i
|
32
|
+
"BUSY".colorize(:red)
|
33
|
+
elsif library.total_available.to_i > 0.3333333333 * library.total_out_of_available.to_i && library.total_available.to_i <= 0.666666666666 * library.total_out_of_available.to_i
|
34
|
+
"NORMAL".colorize(:yellow)
|
35
|
+
elsif library.total_available.to_i > 0.666666666666 * library.total_out_of_available.to_i
|
36
|
+
"QUIET".colorize(:green)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def run_gem # Takes the user input and calls methods depending on input
|
41
|
+
puts "\nEnter a number (1-9) to show more information about a library."
|
42
|
+
puts "Type `list` to see the library list again or type 'exit' to leave."
|
43
|
+
print "> "
|
44
|
+
input = gets.strip.downcase
|
45
|
+
|
46
|
+
if input.to_i.between?(1, 12)
|
47
|
+
system "clear" or system "cls"
|
48
|
+
puts "#{UqLibraries::Library.all[input.to_i - 1].name}"
|
49
|
+
puts "---------------------------------------------------".colorize(:blue)
|
50
|
+
more_info(input.to_i - 1)
|
51
|
+
puts "---------------------------------------------------".colorize(:blue)
|
52
|
+
run_gem
|
53
|
+
elsif input == "list"
|
54
|
+
system "clear" or system "cls"
|
55
|
+
display_libraries
|
56
|
+
run_gem
|
57
|
+
elsif input == "exit"
|
58
|
+
system "clear" or system "cls"
|
59
|
+
exit
|
60
|
+
else
|
61
|
+
system "clear" or system "cls"
|
62
|
+
puts "\nThat's not a library! Enter the index number of a library (1-9) or type 'list' for a list of libraries.".colorize(:red)
|
63
|
+
run_gem
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def more_info(input) # Helper method for #run_gem. Displays more information on the library using the input provided by the user
|
68
|
+
details = UqLibraries::Library.all[input].details
|
69
|
+
|
70
|
+
details.each do |level|
|
71
|
+
if level[:available].to_i > 0.6666666666 * level[:out_of_available].to_i
|
72
|
+
print "QUIET: ".colorize(:green)
|
73
|
+
puts "#{level[:level]} has #{level[:available]} computers available out of #{level[:out_of_available]}".gsub("Entry ", "")
|
74
|
+
|
75
|
+
elsif level[:available].to_i > 0.3333333333 * level[:out_of_available].to_i && level[:available].to_i <= 0.666666666666 * level[:out_of_available].to_i
|
76
|
+
print "NORMAL: ".colorize(:yellow)
|
77
|
+
puts "#{level[:level]} has #{level[:available]} computers available out of #{level[:out_of_available]}".gsub("Entry ", "")
|
78
|
+
|
79
|
+
elsif level[:available].to_i <= 0.3333333333 * level[:out_of_available].to_i
|
80
|
+
print "BUSY: ".colorize(:red)
|
81
|
+
puts "#{level[:level]} has #{level[:available]} computers available out of #{level[:out_of_available]}".gsub("Entry ", "")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class UqLibraries::Library
|
2
|
+
attr_accessor :name, :library_url, :total_available, :total_out_of_available, :details
|
3
|
+
@@all = []
|
4
|
+
|
5
|
+
def initialize(library_hash)
|
6
|
+
library_hash.each {|attribute, value| self.send("#{attribute}=", value)}
|
7
|
+
add_details
|
8
|
+
@@all << self
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.create_from_collection(libraries_array) # Creates library instance from an array of hashes returned by Scraper#scrape_main_page
|
12
|
+
libraries_array.each {|i| self.new(i)}
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.all # Getter method for @@all array. Returns all Library instances
|
16
|
+
@@all
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_details # Sets library.details equal to an array of hashes containing different details for each level of the library
|
20
|
+
@details = UqLibraries::LibraryDetails.create_from_collection(UqLibraries::Scraper.scrape_details_page(@library_url))
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class UqLibraries::LibraryDetails
|
2
|
+
attr_accessor :level, :available, :out_of_available
|
3
|
+
@@all = []
|
4
|
+
|
5
|
+
def initialize(details_hash)
|
6
|
+
@level = details_hash[:level]
|
7
|
+
@available = details_hash[:available]
|
8
|
+
@out_of_available = details_hash[:out_of_available]
|
9
|
+
|
10
|
+
@@all << self
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.create_from_collection(details_array) # Creates library_details instance from array of hashes returned by Scraper#scrape_details_page
|
14
|
+
details_array.each {|details_hash| self.new(details_hash)}
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.all # Getter method for @@all array. Returns all LibraryDetails instances
|
18
|
+
@@all
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class UqLibraries::Scraper
|
2
|
+
|
3
|
+
@base_url = "https://www.library.uq.edu.au/uqlsm/" # URL without page
|
4
|
+
@main_page = "availablepcsembed.php" # Page to append to URL
|
5
|
+
@main_url = "#{@base_url}#{@main_page}" # Adds page and URL together
|
6
|
+
|
7
|
+
|
8
|
+
def self.scrape_main_page # Scrapes the main libraries page for primary details
|
9
|
+
libraries = []
|
10
|
+
frontpage = Nokogiri::HTML(open(@main_url))
|
11
|
+
|
12
|
+
frontpage.css(".chart tr").each do |row|
|
13
|
+
name = row.css("a[href]").text
|
14
|
+
|
15
|
+
total_available = row.css(".right").text.split(" ")[0]
|
16
|
+
out_of_available = row.css(".right").text.split(" ")[3]
|
17
|
+
|
18
|
+
library_page = row.css("a[href]")[0]["href"]
|
19
|
+
library_url = "#{@base_url}#{library_page}"
|
20
|
+
|
21
|
+
libraries << {name: name, total_available: total_available, total_out_of_available: out_of_available, library_url: library_url}
|
22
|
+
end
|
23
|
+
libraries
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.scrape_details_page(library_url) # Scrapes library details page for secondary details
|
27
|
+
details_page = Nokogiri::HTML(open(library_url))
|
28
|
+
|
29
|
+
details_page.css("table.chart tr").collect do |level|
|
30
|
+
right = level.css(".right").text.split
|
31
|
+
{level: level.css(".left").text, available: right[0], out_of_available: right[3]}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: uq-libraries
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Hough
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-10-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.15.4
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.15.4
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 12.0.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 12.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nokogiri
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Shows users how busy a selected UQ library is.
|
98
|
+
email: matt@hough.tv
|
99
|
+
executables:
|
100
|
+
- uq-libraries
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- bin/uq-libraries
|
105
|
+
- config/environment.rb
|
106
|
+
- lib/uq_libraries.rb
|
107
|
+
- lib/uq_libraries/cli.rb
|
108
|
+
- lib/uq_libraries/library.rb
|
109
|
+
- lib/uq_libraries/library_details.rb
|
110
|
+
- lib/uq_libraries/scraper.rb
|
111
|
+
homepage: http://rubygems.org/gems/uq-libraries
|
112
|
+
licenses:
|
113
|
+
- MIT
|
114
|
+
metadata: {}
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 2.6.14
|
132
|
+
signing_key:
|
133
|
+
specification_version: 4
|
134
|
+
summary: How busy are UQ libraries?
|
135
|
+
test_files: []
|