roadfood 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 00960e468a630912795fcb968b3c26b94106f264
4
+ data.tar.gz: 9e24cccf1459c4c0acb8914e7c31728a9c2c0ae8
5
+ SHA512:
6
+ metadata.gz: a1cfdec51cc9bf71fae042b19d20ce8aa9c8de6fe728b487695c254e5298c2fbbc03f46c8e1c6389df8cb7c0aeed1ac86d3b2a8aa13e3d43fa1d4306ea4a0bf7
7
+ data.tar.gz: 77cb82812b118f0da9a9aac1ff601aeec012671a567cb24b96c97373e6a722dc444a58fb1a58bf92445db1265c817069d7ce568dc735efcd2ea6bd5ac06bb879
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/roadfood'
4
+
5
+ Roadfood::CLI.new.call
@@ -0,0 +1,7 @@
1
+ require 'pry'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+
5
+ require_relative '../lib/roadfood/cli.rb'
6
+ require_relative '../lib/roadfood/scraper.rb'
7
+ require_relative '../lib/roadfood/review.rb'
@@ -0,0 +1,6 @@
1
+ # require "roadfood/version"
2
+
3
+ module Roadfood
4
+ end
5
+
6
+ require_relative '../config/environment'
@@ -0,0 +1,59 @@
1
+ class Roadfood::CLI
2
+
3
+ def call
4
+ Roadfood::Scraper.new.make_reviews
5
+ # binding.pry
6
+ puts ""
7
+ puts "Welcome to the latest reviews from Roadfood.com."
8
+ start
9
+ end
10
+
11
+ def start
12
+ puts ""
13
+ print_list
14
+ puts""
15
+
16
+ puts "What review would you like to see?"
17
+ input = gets.strip
18
+
19
+ review = Roadfood::Review.find(input.to_i)
20
+
21
+ print_review(review)
22
+
23
+ puts ""
24
+ puts "Would you like to see another review? (y/n)"
25
+ input = gets.strip.downcase
26
+ if input == "y"
27
+ puts ""
28
+ start
29
+ else
30
+ puts "Ok, have a nice day!"
31
+ exit
32
+ end
33
+ end
34
+
35
+ def print_list
36
+ Roadfood::Review.all.each.with_index(1) do |review, index|
37
+ puts "#{index}. #{review.name} – #{review.city}, #{review.state}"
38
+ end
39
+ end
40
+
41
+ def print_review(review)
42
+ puts ""
43
+ puts "------------ #{review.name} - #{review.city}, #{review.state} ------------"
44
+ puts ""
45
+ puts "Rating: #{review.rating}"
46
+ puts "Dishes to Try: #{review.dishes_to_try}"
47
+ puts "Address: #{review.address}"
48
+ puts "Restaurant Website: #{review.website}"
49
+ puts "Author: #{review.author}"
50
+ puts "Date Published: #{review.date_published}"
51
+ puts ""
52
+ puts "Review:"
53
+ puts "#{review.body}"
54
+ puts ""
55
+ puts "------------------------------------------------------------------"
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,68 @@
1
+ class Roadfood::Review
2
+ attr_accessor :name, :city, :state, :url, :rating, :author, :date_published, :body, :dishes_to_try, :website, :address
3
+
4
+ @@all = []
5
+
6
+ def initialize(name=nil, city=nil, state=nil, url=nil)
7
+ @name = name
8
+ @city = city
9
+ @state = state
10
+ @url = url
11
+ @@all << self
12
+ end
13
+
14
+ def self.new_from_index_page(r)
15
+ self.new(r.css("h2").text,
16
+ r.css(".address").text.strip.split(",")[1].strip,
17
+ r.css(".address").text.strip.split(",").last.strip,
18
+ r.css("h2 a").attribute("href").value)
19
+ end
20
+
21
+ def self.all
22
+ @@all
23
+ end
24
+
25
+ def self.find(index)
26
+ self.all[index-1]
27
+ end
28
+
29
+ def doc
30
+ @doc ||= Nokogiri::HTML(open(self.url))
31
+ end
32
+
33
+ def rating
34
+ @rating ||= doc.css(".rf_rating_title").text.capitalize
35
+ end
36
+
37
+ def author
38
+ @author ||= doc.css("span[itemprop=author]").text
39
+ end
40
+
41
+ def date_published
42
+ @date_published ||= doc.css("span.rf_reviewed[itemprop=datePublished]").text.strip.gsub("| ", "")
43
+ end
44
+
45
+ def body
46
+ @body ||= doc.css("div[itemprop=reviewBody]").text.strip
47
+ end
48
+
49
+ def dishes_to_try
50
+ @dishes_to_try ||= doc.css(".rf_dish_name_read_post").collect {|dish| dish.text}.join(", ")
51
+ end
52
+
53
+ def website
54
+ names = doc.css(".rf_section").children.css("div.rf_policy_name").collect {|name| name.text.strip}.include?("Website")
55
+
56
+ if names == true
57
+ @website ||= doc.css(".rf_policy_result a").attribute("href").value
58
+ else
59
+ @website ||= "None"
60
+ end
61
+
62
+ end
63
+
64
+ def address
65
+ @address ||= doc.css(".address").text.strip
66
+ end
67
+
68
+ end
@@ -0,0 +1,18 @@
1
+ class Roadfood::Scraper
2
+
3
+ def get_page
4
+ Nokogiri::HTML(open("https://roadfood.com"))
5
+ end
6
+
7
+ def scrape_recent_reviews
8
+ self.get_page.css("article")
9
+ end
10
+
11
+ def make_reviews
12
+ scrape_recent_reviews.each do |review|
13
+ Roadfood::Review.new_from_index_page(review)
14
+ end
15
+ end
16
+
17
+
18
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: roadfood
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Friedl
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
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
+ - !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'
83
+ - !ruby/object:Gem::Dependency
84
+ name: require_all
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description:
98
+ email:
99
+ - ajfriedl@gmail.com
100
+ executables:
101
+ - roadfood
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - bin/roadfood
106
+ - config/environment.rb
107
+ - lib/roadfood.rb
108
+ - lib/roadfood/cli.rb
109
+ - lib/roadfood/review.rb
110
+ - lib/roadfood/scraper.rb
111
+ homepage: https://rubygems.org/gems/roadfood
112
+ licenses:
113
+ - MIT
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 2.5.1
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: Provides details on the most recent reviews from Roadfood.com.
135
+ test_files: []