libri 0.2.4 → 0.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d140ac3b0d3f66e4cde893eb18ab2d6053538c40d5bb52c008af0d9d57d7f013
4
- data.tar.gz: 03eb4c2f5beefb6462110c6bb7f022a722d890dfa198eb9be28a2247ca3e3a4c
3
+ metadata.gz: 1e6cf633c033f6eb4ac59761da225df2d483d12665a994a921511e1a1b3e295e
4
+ data.tar.gz: f8428c1ccd9130a7f14437db3c72eb54e88d4c2bc192f92ae222735374ec6f3e
5
5
  SHA512:
6
- metadata.gz: c725e448d3ea0ecba7ffff7ccfd631f5554b1295865e6bce7f8f1c8109e2a6cf092b9dcf215ecbda2c0665093fc64dfd7fa91d51f798262bb308ce186d60f8a0
7
- data.tar.gz: d7ecf88f23f271804e3880fe3fb34116fe9340259619661afdf530fb0eb0c2f858c06ebd5376fb983be2dd7d95c45c19bfd19f4a2a661c796984a799cb2fab37
6
+ metadata.gz: b60e09d2b22c41ef4cabf181771631513dd11b17b725de7e81ea5c501156f49b32c5b80b7a13908e72b8d0519e63c9f83e01ab49352f62617831bd9bd7a5487a
7
+ data.tar.gz: 6676124503246e60492b212af94a7e52f36505c65a444966fa8667ca05413111bd5fcc19eb3b008bef29c1d1dda99cb2e8fb4aa89b51e04bcbe3e8634bc9df64
data/.DS_Store CHANGED
Binary file
@@ -1,19 +1,24 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- libri (0.2.3)
4
+ libri (0.2.5)
5
5
  colorize
6
6
  nokogiri (~> 1.8.3)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
+ coderay (1.1.2)
11
12
  colorize (0.8.1)
12
13
  diff-lcs (1.3)
13
14
  gem-release (2.0.1)
15
+ method_source (0.9.0)
14
16
  mini_portile2 (2.3.0)
15
17
  nokogiri (1.8.3)
16
18
  mini_portile2 (~> 2.3.0)
19
+ pry (0.11.3)
20
+ coderay (~> 1.1.0)
21
+ method_source (~> 0.9.0)
17
22
  rake (10.5.0)
18
23
  rspec (3.7.0)
19
24
  rspec-core (~> 3.7.0)
@@ -36,6 +41,7 @@ DEPENDENCIES
36
41
  bundler (~> 1.16)
37
42
  gem-release
38
43
  libri!
44
+ pry
39
45
  rake (~> 10.0)
40
46
  rspec (~> 3.0)
41
47
 
Binary file
@@ -1,6 +1,7 @@
1
1
  require 'open-uri'
2
2
  require 'nokogiri'
3
3
  require 'colorize'
4
+ require 'pry'
4
5
 
5
6
  require_relative './libri/version'
6
7
  require_relative './libri/cli'
@@ -4,14 +4,14 @@ class Libri::Awards
4
4
  @@all = []
5
5
 
6
6
  def initialize(awards_hash)
7
- awards_hash.each { |key, val|
7
+ awards_hash.map { |key, val|
8
8
  send "#{key}=", val
9
9
  }
10
10
  @@all << self
11
11
  end
12
12
 
13
13
  def self.create_from_collection(awards_array)
14
- awards_array.each { |awards_hash|
14
+ awards_array.map { |awards_hash|
15
15
  self.new(awards_hash)
16
16
  }
17
17
  end
@@ -4,14 +4,14 @@ class Libri::Book
4
4
  @@all = []
5
5
 
6
6
  def initialize(book_info_hash)
7
- book_info_hash.each { |key, val|
7
+ book_info_hash.map { |key, val|
8
8
  send "#{key}=", val
9
9
  }
10
10
  @@all << self
11
11
  end
12
12
 
13
13
  def self.create_from_collection(book_info_array)
14
- book_info_array.each { |book_info_hash|
14
+ book_info_array.map { |book_info_hash|
15
15
  self.new(book_info_hash)
16
16
  }
17
17
  end
@@ -4,14 +4,14 @@ class Libri::Books
4
4
  @@all = []
5
5
 
6
6
  def initialize(books_hash)
7
- books_hash.each { |key, val|
7
+ books_hash.map { |key, val|
8
8
  send "#{key}=", val
9
9
  }
10
10
  @@all << self
11
11
  end
12
12
 
13
13
  def self.create_from_collection(books_array)
14
- books_array.each { |books_hash|
14
+ books_array.map { |books_hash|
15
15
  self.new(books_hash)
16
16
  }
17
17
  end
@@ -3,37 +3,12 @@ class Libri::CLI
3
3
  attr_accessor :award, :awards_array, :books_array, :book_info_hash, :quotes_array, :title_by_author
4
4
 
5
5
  LINE = "----------------------------------------------------------"
6
- SPACE = " "
7
- STRING = <<-EOS
8
- . .
9
- !!!!!!!
10
- ..'''::::.. . [[[|]]] .
11
- .::' ``::.. !!!!!!!!|--_--|!!!!!
12
- '...::' `'':::. [[[[[[[[\\_(X)_/]]]]]
13
- . . |=| ._/-__-__\\===========/-__\\_
14
- !!!!!!!!!\\========[ /]]|[[\\ ]=====/
15
- /_-_-| | |-_--|=| | | ||=|_|_|=||"|==|
16
- /-__--|_|_|_-_-| |_|_|=||______=||_| =|
17
- /-----------------------\\===========/-----/
18
- ^^^\\^^^^^^^^^^^^^^^^^^^^^^[[|]]|[[|]]=====/
19
- |.' ..==::'"'::==.. '.[ /~~~~~\\ ]]]]]]]
20
- | .'=[[[|]]|[[|]]]=`._||== = || =\\ ]
21
- ||= == ||:^s^:|| = == ||=| | | || |=||
22
- _||_ = =||o---.|| = ==_||_= == =||==_||_
23
- \\__/= = ||: :||= == \\__/[][][][][]\\__/
24
- [||]= ==||:___:|| = = [||]\\//\\//\\[||]
25
- } {---'"'-----'"'- --} {//\\//\\//} {
26
- ____[==]__________________[==]\\//\\//\\[==]_____
27
- |`|~~~~|================|~~~~|~~~~~~~~|~~~~||
28
- jgs|^| ^ |================|^ | ^ ^^ ^ | ^ ||
29
- EOS
30
6
 
31
7
  def call
32
- puts STRING
33
- puts SPACE
34
- puts "Welcome to Libri. I'm the Raven, your guide in this chamber full of literary wonders.".blue
8
+ puts "Welcome to Libri.".blue
9
+ puts "I'm the Raven, your guide in this chamber full of literary wonders.".blue
35
10
  puts "Below are some of the most prized literary awards of our time.".blue
36
- puts "Come freely. This will take a few moments..".blue
11
+ puts "Come freely. This will take a few moments...".blue
37
12
  puts LINE
38
13
  make_awards
39
14
  list_awards
@@ -42,7 +17,7 @@ class Libri::CLI
42
17
  end
43
18
 
44
19
  def make_awards
45
- @awards_array = Scraper.scrape_barnes_noble
20
+ @awards_array = Libri::Scraper.new.scrape_barnes_noble
46
21
  Libri::Awards.create_from_collection(awards_array)
47
22
  end
48
23
 
@@ -58,7 +33,7 @@ class Libri::CLI
58
33
  end
59
34
 
60
35
  def make_books(award)
61
- @books_array = Scraper.scrape_award(award)
36
+ @books_array = Libri::Scraper.new.scrape_award(award)
62
37
  Libri::Books.create_from_collection(books_array)
63
38
  end
64
39
 
@@ -75,10 +50,10 @@ class Libri::CLI
75
50
  end
76
51
 
77
52
  def list_details(book)
78
- @book_info_hash = Scraper.scrape_book(book)
53
+ @book_info_hash = Libri::Scraper.new.scrape_book(book)
79
54
 
80
55
  @book_info_hash.each { |key, val|
81
- puts SPACE
56
+ puts
82
57
  puts "#{key}".upcase.red
83
58
  puts LINE
84
59
  puts "#{val}"
@@ -86,21 +61,21 @@ class Libri::CLI
86
61
  end
87
62
 
88
63
  def random_quote
89
- @quotes_array = Scraper.scrape_quote
64
+ @quotes_array = Libri::Scraper.new.scrape_quote
90
65
  Libri::Quote.create_from_collection(quotes_array)
91
66
 
92
67
  random = @quotes_array.sample
93
68
  random.each { |key, val|
94
- puts SPACE
69
+ puts
95
70
  puts "#{val}"
96
71
  }
97
- puts SPACE
72
+ puts
98
73
  end
99
74
 
100
75
  def menu_awards
101
76
  input = STDIN.gets.strip.downcase
102
77
 
103
- if input.to_i.between?(1,28)
78
+ if input.to_i.between?(1,Libri::Awards.all.size)
104
79
  award = @awards_array[input.to_i - 1]
105
80
  Libri::Books.all.clear
106
81
  make_books(award)
@@ -126,8 +101,8 @@ class Libri::CLI
126
101
  book = @books_array[input.to_i - 1]
127
102
  list_details(book)
128
103
  puts LINE
129
- puts " To list the books of the same award again, type books".blue
130
- puts " To list all the awards again, type awards".blue
104
+ puts "To list the books of the same award again, type books".blue
105
+ puts "To list all the awards again, type awards".blue
131
106
  puts LINE
132
107
  menu_books(award)
133
108
  elsif input == "nevermore"
@@ -4,14 +4,14 @@ class Libri::Quote
4
4
  @@all = []
5
5
 
6
6
  def initialize(quote_hash)
7
- quote_hash.each { |key, val|
7
+ quote_hash.map { |key, val|
8
8
  send "#{key}=", val
9
9
  }
10
10
  @@all << self
11
11
  end
12
12
 
13
13
  def self.create_from_collection(quotes_array)
14
- quotes_array.each { |quote_hash|
14
+ quotes_array.map { |quote_hash|
15
15
  self.new(quote_hash)
16
16
  }
17
17
  end
@@ -1,88 +1,65 @@
1
- class Scraper
1
+ class Libri::Scraper
2
2
 
3
3
  attr_accessor :url, :award, :book
4
4
 
5
- def self.scrape_barnes_noble
5
+ def scrape_barnes_noble
6
6
  html = "https://www.barnesandnoble.com/b/books/awards/_/N-8q8Z1d6q?showMoreIds=10008"
7
7
  awards_page = Nokogiri::HTML(open(html))
8
8
 
9
- awards_array = []
10
9
  awards = {}
11
10
 
12
- awards_page.css("ul#sidebar-section-0 li a").take(28).each { |award|
11
+ # Chosen .take(28) because without it, our awards list will include a 'Show Less'
12
+ awards_array = awards_page.css("ul#sidebar-section-0 li a").take(28).map { |award|
13
13
  awards = {
14
14
  :name => award.text.chomp,
15
15
  :url => "https://www.barnesandnoble.com" + award.attribute("href").value
16
16
  }
17
- awards_array << awards
18
17
  }
19
- awards_array
20
18
  end
21
19
 
22
- def self.scrape_award(award)
20
+ def scrape_award(award)
23
21
  html = award[:url]
24
22
  books_page = Nokogiri::HTML(open(html))
25
23
 
26
- books_array = []
27
24
  books = {}
28
25
 
29
- books_page.css("div.product-shelf-info").take(20).each { |book|
26
+ books_array = books_page.css("div.product-shelf-info").take(20).map { |book|
30
27
  books = {
31
28
  :title => book.css("div.product-shelf-title").text.strip,
32
29
  :author => book.css("div.product-shelf-author").text.strip,
33
30
  :url => "https://www.barnesandnoble.com" + book.css("a").attribute("href").value
34
31
  }
35
-
36
- books_array << books
37
- }
38
-
39
- books_array.uniq
32
+ }.uniq
40
33
  end
41
34
 
42
- def self.scrape_book(book)
35
+ def scrape_book(book)
43
36
  html = book[:url]
44
37
  book_page = Nokogiri::HTML(open(html))
45
38
  info_section = book_page.css("div.tabpanel")
46
39
 
47
- # related_books_hash = {}
48
-
49
40
  book_info_hash = {
50
41
  :title_by_author => info_section.css("div#productInfoOverview div.mb-m").text,
51
42
  :blurbs_and_plot => info_section.css("div#productInfoOverview p").map(&:text).join("\n").strip,
52
43
  :about_author => info_section.css("div#MeetTheAuthor div.text--medium").text.strip,
53
- :excerpt => info_section.xpath("//div[@class='read-an-excerpt']/p[not(@class) and position()<5]").map(&:text).join("\n"),
54
- # :related_books => book_page.css("div.product-shelf-info").each { |book|
55
- # related_books_hash = {
56
- # :title => book.css("div.product-shelf-title").text.strip,
57
- # :author => book.css("div.product-shelf-author").text.strip,
58
- # :url => "https://www.barnesandnoble.com" + book.css("a").attribute("href").value
59
- # }
60
- # },
44
+ :excerpt => info_section.xpath("//div[@class='read-an-excerpt']/p[not(@class) and position()<3]").map(&:text).join("\n"),
61
45
  :availability => book_page.css("button#pdp-marketplace-btn").text.chomp,
62
46
  :url => book[:url]
63
- }
64
-
65
- book_info_hash.delete_if { |key, val| val.to_s.strip.empty? }
66
-
47
+ }.delete_if { |key, val| val.to_s.strip.empty? }
67
48
  end
68
49
 
69
- def self.scrape_quote
50
+ def scrape_quote
70
51
  html = "https://www.goodreads.com/quotes/tag/books"
71
52
  quotes_page = Nokogiri::HTML(open(html))
72
53
  quote_section = quotes_page.css("div.quote")
73
54
 
74
- quotes_array = []
75
55
  quote_hash = {}
76
56
 
77
- quote_section.each { |quote|
57
+ quotes_array = quote_section.map { |quote|
78
58
  quote_hash = {
79
59
  :quote => quote.css("div.quoteText").first.text.scan(/(“.+”)/).join(""),
80
60
  :author => quote.css("div.quoteText a").first.text
81
61
  }
82
-
83
- quotes_array << quote_hash
84
62
  }
85
- quotes_array
86
63
  end
87
64
 
88
65
  end
@@ -1,3 +1,3 @@
1
1
  module Libri
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
Binary file
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency "rake", "~> 10.0"
37
37
  spec.add_development_dependency "rspec", "~> 3.0"
38
38
  spec.add_development_dependency "gem-release"
39
+ spec.add_development_dependency "pry"
39
40
  spec.add_dependency "nokogiri", "~> 1.8.3"
40
41
  spec.add_dependency "colorize"
41
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libri
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - jouissances
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-30 00:00:00.000000000 Z
11
+ date: 2018-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
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'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: nokogiri
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +143,7 @@ files:
129
143
  - lib/libri/version.rb
130
144
  - libri-0.2.2.gem
131
145
  - libri-0.2.3.gem
146
+ - libri-0.2.4.gem
132
147
  - libri.gemspec
133
148
  - spec.md
134
149
  homepage: https://rubygems.org