fender_guitar_catalogue 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []