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 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,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../config/environment.rb'
4
+
5
+ CLI.new.title
@@ -0,0 +1,5 @@
1
+ require "open-uri"
2
+ require "nokogiri"
3
+ require_relative "../lib/fender_guitar_catalogue/guitar.rb"
4
+ require_relative "../lib/fender_guitar_catalogue/cli.rb"
5
+ require_relative "../lib/fender_guitar_catalogue/scraper.rb"
@@ -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: []