best_novels 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/best_novels +5 -0
- data/lib/best_novels.rb +17 -0
- data/lib/best_novels/cli.rb +66 -0
- data/lib/best_novels/novel.rb +31 -0
- data/lib/best_novels/scraper.rb +22 -0
- metadata +105 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: bcf430a2bdf331e15e35dcdb71815bcb159eb7f2270c3e7c39e648bba79cff6b
|
|
4
|
+
data.tar.gz: 5dee65b3166a9ade717130b4fb553733e82b377ed67f65777cdb53490f0a09d6
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: be858dda9b55f71e17faf37add557584dbd07f79894576327d2887e95f14c01d3bc7151feca60f594ce401b08e3415683b5820b7a6319cc30c2918570badaec2
|
|
7
|
+
data.tar.gz: 0c2fe571c0cf9cf2b733611aca5f71e03ef591eabde5c14e480cedd4e0e5a4ef510ba017ae69b575f99431ff8f78ac964988fab4d48604d456048094e35d9321
|
data/bin/best_novels
ADDED
data/lib/best_novels.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require_relative "./best_novels/version"
|
|
2
|
+
require_relative "./best_novels/cli"
|
|
3
|
+
require_relative "./best_novels/novel"
|
|
4
|
+
require_relative "./best_novels/scraper"
|
|
5
|
+
|
|
6
|
+
require "pry"
|
|
7
|
+
require "nokogiri"
|
|
8
|
+
require 'open-uri'
|
|
9
|
+
require 'colorize'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module BestNovels
|
|
15
|
+
class Error < StandardError; end
|
|
16
|
+
# Your code goes here...
|
|
17
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
class BestNovels::CLI
|
|
2
|
+
def call
|
|
3
|
+
puts "Welcome to The Guardian's List of 100 Best Novels!".colorize(:blue)
|
|
4
|
+
@input = ""
|
|
5
|
+
until @input == "exit"
|
|
6
|
+
get_novels
|
|
7
|
+
list_novels
|
|
8
|
+
get_user_novel
|
|
9
|
+
what_next
|
|
10
|
+
end
|
|
11
|
+
goodbye
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_novels
|
|
16
|
+
@novels = BestNovels::Novel.all
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def list_novels
|
|
20
|
+
puts ''
|
|
21
|
+
puts 'Choose a novel to read a review from The Guardian.'.colorize(:blue)
|
|
22
|
+
puts ''
|
|
23
|
+
|
|
24
|
+
@novels.each.with_index(1) do |novel, index|
|
|
25
|
+
puts "#{index}. #{novel.title}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def get_user_novel
|
|
30
|
+
chosen_novel = gets.strip.to_i
|
|
31
|
+
show_details_for(chosen_novel) if valid_input(chosen_novel, @novels)
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def valid_input(input, data)
|
|
36
|
+
input.to_i <= data.length && input.to_i > 0
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def show_details_for(chosen_novel)
|
|
42
|
+
novel = @novels[chosen_novel - 1]
|
|
43
|
+
novel.get_novel_details
|
|
44
|
+
puts ""
|
|
45
|
+
puts "The Guardian's Review of ".colorize(:blue) +
|
|
46
|
+
"#{novel.title}".colorize(:blue).bold
|
|
47
|
+
puts ""
|
|
48
|
+
puts novel.review
|
|
49
|
+
puts ""
|
|
50
|
+
puts "Read the full review:".colorize(:blue)
|
|
51
|
+
puts "#{novel.url}".colorize(:blue).underline
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def what_next
|
|
55
|
+
puts ""
|
|
56
|
+
puts ""
|
|
57
|
+
puts "Are you done? Type 'exit' to exit or press any key to view the full list of novels.".colorize(:blue)
|
|
58
|
+
@input = gets.strip
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def goodbye
|
|
62
|
+
puts "Thanks! Goodbye".colorize(:red)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class BestNovels::Novel
|
|
2
|
+
#Create accessor methods for all variables given
|
|
3
|
+
attr_accessor :title, :url, :review
|
|
4
|
+
#class variable
|
|
5
|
+
@@all = []
|
|
6
|
+
|
|
7
|
+
def initialize(title, url)
|
|
8
|
+
#instance variables
|
|
9
|
+
@title = title
|
|
10
|
+
@url = url
|
|
11
|
+
save
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
#def title
|
|
15
|
+
#@title
|
|
16
|
+
#end
|
|
17
|
+
|
|
18
|
+
#class method
|
|
19
|
+
def self.all
|
|
20
|
+
BestNovels::Scraper.scrape_novels if @@all.empty?
|
|
21
|
+
@@all
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def get_novel_details
|
|
25
|
+
BestNovels::Scraper.scrape_review(self)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def save
|
|
29
|
+
@@all << self
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
class BestNovels::Scraper
|
|
2
|
+
#class method
|
|
3
|
+
def self.scrape_novels
|
|
4
|
+
site = "https://www.theguardian.com/books/2015/aug/17/the-100-best-novels-written-in-english-the-full-list"
|
|
5
|
+
doc = Nokogiri::HTML(open(site))
|
|
6
|
+
novels = doc.css("div.content__article-body.from-content-api.js-article__body p strong")
|
|
7
|
+
novels.each do |n|
|
|
8
|
+
title = n.css("a.u-underline").text.strip
|
|
9
|
+
url = n.css("a").attr("href").value
|
|
10
|
+
BestNovels::Novel.new(title, url)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
#class method
|
|
15
|
+
def self.scrape_review(novel)
|
|
16
|
+
url = "#{novel.url}"
|
|
17
|
+
doc = Nokogiri::HTML(open(url))
|
|
18
|
+
doc.css("div.content__article-body.from-content-api.js-article__body p:first-of-type").each do |paragraph|
|
|
19
|
+
novel.review = paragraph.text.strip
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: best_novels
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- jblair87
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2020-03-12 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rake
|
|
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
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: nokogiri
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: pry
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: colorize
|
|
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
|
+
description:
|
|
70
|
+
email:
|
|
71
|
+
- jenna.b.mandel@gmail.com
|
|
72
|
+
executables:
|
|
73
|
+
- best_novels
|
|
74
|
+
extensions: []
|
|
75
|
+
extra_rdoc_files: []
|
|
76
|
+
files:
|
|
77
|
+
- bin/best_novels
|
|
78
|
+
- lib/best_novels.rb
|
|
79
|
+
- lib/best_novels/cli.rb
|
|
80
|
+
- lib/best_novels/novel.rb
|
|
81
|
+
- lib/best_novels/scraper.rb
|
|
82
|
+
homepage: http://rubygems.org/gems/best_novels
|
|
83
|
+
licenses:
|
|
84
|
+
- MIT
|
|
85
|
+
metadata: {}
|
|
86
|
+
post_install_message:
|
|
87
|
+
rdoc_options: []
|
|
88
|
+
require_paths:
|
|
89
|
+
- lib
|
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - ">="
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0'
|
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
|
+
requirements:
|
|
97
|
+
- - ">="
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: '0'
|
|
100
|
+
requirements: []
|
|
101
|
+
rubygems_version: 3.1.2
|
|
102
|
+
signing_key:
|
|
103
|
+
specification_version: 4
|
|
104
|
+
summary: '"A Command Line Interface for The Guardian''s "100 Best Novels Ever Written"'
|
|
105
|
+
test_files: []
|