fender_guitar_catalogue 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/fender_guitar_catalogue +5 -0
- data/config/environment.rb +5 -0
- data/lib/fender_guitar_catalogue/cli.rb +71 -0
- data/lib/fender_guitar_catalogue/guitar.rb +25 -0
- data/lib/fender_guitar_catalogue/scraper.rb +54 -0
- metadata +92 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 22bf1facc1bccf8ad98b16d83197d37b081bd8ca8466ae3f6c2a275b0b136138
|
|
4
|
+
data.tar.gz: 132def13d3ab1824f882786b19337697de97e9f0f1d8687fedebb25fc9e3e2ec
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 2daec96601ac7a813cd4e6b54e6909f6a2f408caad11b11de7e67a8e7e2f9342c807b639b0d164f2827d41ce8e18b441b50a182290638d6e27221d027293ffef
|
|
7
|
+
data.tar.gz: bf3ef5e6412eaf9d0831791c8ea7159df176e2cd8ada2a3ebdd1529634a5a16379c7d8ca3b35490d4522883d9932c34ee0430382ce33e784cb0e705521832b1d
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
class CLI
|
|
2
|
+
|
|
3
|
+
def title
|
|
4
|
+
puts "================================="
|
|
5
|
+
puts "=====FENDER GUITAR CATALOGUE====="
|
|
6
|
+
puts "================================="
|
|
7
|
+
menu
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def menu
|
|
11
|
+
puts "What would you like to do?"
|
|
12
|
+
puts "1. View Electric Guitars"
|
|
13
|
+
puts "2. View Acoustic Guitars"
|
|
14
|
+
puts "3. View Bass Guitars"
|
|
15
|
+
puts "4. Exit"
|
|
16
|
+
input = gets.chomp
|
|
17
|
+
if input == "1"
|
|
18
|
+
puts ""
|
|
19
|
+
Scraper.new.scrape("electric")
|
|
20
|
+
puts ""
|
|
21
|
+
show_details
|
|
22
|
+
elsif input == "2"
|
|
23
|
+
puts ""
|
|
24
|
+
Scraper.new.scrape("acoustic")
|
|
25
|
+
puts ""
|
|
26
|
+
show_details
|
|
27
|
+
elsif input == "3"
|
|
28
|
+
puts ""
|
|
29
|
+
Scraper.new.scrape("bass")
|
|
30
|
+
puts ""
|
|
31
|
+
show_details
|
|
32
|
+
elsif input == "4"
|
|
33
|
+
puts "Goodbye"
|
|
34
|
+
else
|
|
35
|
+
puts "Invalid selection."
|
|
36
|
+
menu
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def show_details
|
|
41
|
+
puts "Which guitar would you like information on?"
|
|
42
|
+
input = gets.chomp.to_i
|
|
43
|
+
puts ""
|
|
44
|
+
if input > 149 || input < 1
|
|
45
|
+
puts "!Invalid selection - Please choose a different model!"
|
|
46
|
+
puts ""
|
|
47
|
+
show_details
|
|
48
|
+
else
|
|
49
|
+
puts Guitar.all[input-1].item_desc
|
|
50
|
+
end
|
|
51
|
+
anything_else
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def anything_else
|
|
55
|
+
puts "Anything else? (Y/N)"
|
|
56
|
+
input = gets.chomp
|
|
57
|
+
puts ""
|
|
58
|
+
if input.downcase == "y"
|
|
59
|
+
system("clear")
|
|
60
|
+
Guitar.all.clear
|
|
61
|
+
menu
|
|
62
|
+
elsif input.downcase == "n"
|
|
63
|
+
puts "Goodbye"
|
|
64
|
+
else
|
|
65
|
+
puts "Invalid selection."
|
|
66
|
+
anything_else
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class Guitar
|
|
2
|
+
attr_accessor :model, :url, :price
|
|
3
|
+
|
|
4
|
+
@@all = []
|
|
5
|
+
|
|
6
|
+
def initialize(details)
|
|
7
|
+
details.each do |key, value|
|
|
8
|
+
send("#{key}=", value)
|
|
9
|
+
end
|
|
10
|
+
@@all << self
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def item_desc
|
|
14
|
+
puts "===#{@model.upcase}==="
|
|
15
|
+
Scraper.new.scrape_content(@url)
|
|
16
|
+
puts ""
|
|
17
|
+
puts "~Price (AUD)~"
|
|
18
|
+
puts ""
|
|
19
|
+
puts @price
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.all
|
|
23
|
+
@@all
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
class Scraper
|
|
2
|
+
|
|
3
|
+
BASE_URL = "https://www.fender.com/en-AU/"
|
|
4
|
+
|
|
5
|
+
def get_page(url = BASE_URL)
|
|
6
|
+
Nokogiri::HTML(open(url))
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def scrape_test
|
|
10
|
+
doc = get_page(url = "#{BASE_URL}electric-guitars/?start=0&sz=200")
|
|
11
|
+
|
|
12
|
+
doc.css(".product-tile").each.with_index(1).map do |guitar, i|
|
|
13
|
+
model = guitar.css(".pdp-link").text.strip
|
|
14
|
+
price = guitar.css(".price").text.strip
|
|
15
|
+
url = guitar.css("a.product-tile-image").attr("href").value
|
|
16
|
+
|
|
17
|
+
puts "#{i}. #{model}"
|
|
18
|
+
Guitar.new(model: model, price: price, url: url)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def scrape(type)
|
|
23
|
+
|
|
24
|
+
if type == "bass"
|
|
25
|
+
doc = get_page(url = "#{BASE_URL}electric-basses/?start=0&sz=200")
|
|
26
|
+
elsif type == "electric"
|
|
27
|
+
doc = get_page(url = "#{BASE_URL}electric-guitars/?start=0&sz=200")
|
|
28
|
+
elsif type == "acoustic"
|
|
29
|
+
doc = get_page(url = "#{BASE_URL}acoustic-guitars/?start=0&sz=200")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
doc.css(".product-tile").each.with_index(1).map do |guitar, i|
|
|
33
|
+
model = guitar.css(".pdp-link").text.strip
|
|
34
|
+
price = guitar.css(".price").text.strip
|
|
35
|
+
url = guitar.css("a.product-tile-image").attr("href").value
|
|
36
|
+
|
|
37
|
+
puts "#{i}. #{model}"
|
|
38
|
+
Guitar.new(model: model, price: price, url: url)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def scrape_content(url)
|
|
43
|
+
page_url = "#{BASE_URL}#{url}"
|
|
44
|
+
doc = get_page(page_url)
|
|
45
|
+
|
|
46
|
+
puts "#{doc.css(".row.long-description p").text.strip.gsub("Click here to learn more about this artist model.", "")}"
|
|
47
|
+
puts ""
|
|
48
|
+
puts "~Features~"
|
|
49
|
+
puts ""
|
|
50
|
+
li = "#{doc.css(".js-feature-bullets li")}"
|
|
51
|
+
puts li.gsub("<li>","* ").gsub("</li>","")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: fender_guitar_catalogue
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Matthew McAleer
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2022-06-03 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: '3.2'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '3.2'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: nokogiri
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '2.2'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '2.2'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: open-uri
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
description: Provides information on all Fender electric, acoustic and bass guitars.
|
|
56
|
+
email:
|
|
57
|
+
- matthew_mcaleer@hotmail.com
|
|
58
|
+
executables:
|
|
59
|
+
- fender_guitar_catalogue
|
|
60
|
+
extensions: []
|
|
61
|
+
extra_rdoc_files: []
|
|
62
|
+
files:
|
|
63
|
+
- bin/fender_guitar_catalogue
|
|
64
|
+
- config/environment.rb
|
|
65
|
+
- lib/fender_guitar_catalogue/cli.rb
|
|
66
|
+
- lib/fender_guitar_catalogue/guitar.rb
|
|
67
|
+
- lib/fender_guitar_catalogue/scraper.rb
|
|
68
|
+
homepage: http://rubygems.org/gems/
|
|
69
|
+
licenses:
|
|
70
|
+
- MIT
|
|
71
|
+
metadata:
|
|
72
|
+
homepage_uri: http://rubygems.org/gems/
|
|
73
|
+
post_install_message:
|
|
74
|
+
rdoc_options: []
|
|
75
|
+
require_paths:
|
|
76
|
+
- lib
|
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: 2.6.0
|
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '0'
|
|
87
|
+
requirements: []
|
|
88
|
+
rubygems_version: 3.3.6
|
|
89
|
+
signing_key:
|
|
90
|
+
specification_version: 4
|
|
91
|
+
summary: Fender Guitar Catalogue
|
|
92
|
+
test_files: []
|