popular_deals 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3fe75c238e97537fe5c7fbff2ac7bf860b313d6
4
- data.tar.gz: 634232f75c994bd456f5d12c74abe25189bb2c18
3
+ metadata.gz: e62081a3f3e0ea6f804c2589ee1e74715b38711b
4
+ data.tar.gz: 76e7d4947abe852897b11197968dfaaa8191a817
5
5
  SHA512:
6
- metadata.gz: f6a7274c6b9aa7a60455ff07242f30b98193ee87938f8fa551efa3ad3d3d8463952dd299fc12abda9f666e4c2ecf64d0989798f645aa216f91f57907d14f7023
7
- data.tar.gz: 1f951b8f53d076a7c00c19ee0c81d9fbf855eb5bb9d88e0a45095438e7667a0dd0368f63689589c17b8fe2b0672233cc04079b570cdc8e76fa0789b2012273b1
6
+ metadata.gz: a5b0e6a86438f53280d7707baee2daacfd48953408607e35f55f7ffbf771039eac64c7121854d7330b595df982239b3d3d00d0c728617b5a8ef32ea9a4aa82d5
7
+ data.tar.gz: 2cdf4e380ee7159d57786963455bb17db04dd0dde8344b0aa85a24ce1438e58d01d05d520613660e4f7d06304826081d87187fb92e0218a1a51f067fcc1f0b09
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # PopularDeals
2
2
 
3
- This is a CLI gem to browse through the popular deals on slickdeals.net.
3
+ This is a CLI gem to browse through top 100 popular deals on slickdeals.net.
4
4
 
5
5
  ## Installation
6
6
 
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby
2
2
  require "bundler/setup"
3
3
  require "popular_deals"
4
4
  # require "./lib/popular_deals"
@@ -9,4 +9,7 @@ require 'pry'
9
9
  require_relative "./popular_deals/version"
10
10
  require_relative "./popular_deals/cli"
11
11
  require_relative "./popular_deals/newdeals"
12
+ require_relative "./popular_deals/scrapper"
13
+ #require_relative "./popular_deals/listdeals"
14
+
12
15
  #require_relative "./popular_deals/deal"
@@ -5,14 +5,20 @@ class PopularDeals::CLI
5
5
  PAGE3_URL = "https://slickdeals.net/deals/?page=3&sort=recent"
6
6
  PAGE4_URL = "https://slickdeals.net/deals/?page=4&sort=recent"
7
7
  PAGE5_URL = "https://slickdeals.net/deals/?page=5&sort=recent"
8
+
8
9
  attr_accessor :product_url
9
- #BROWSER=(/usr/local/bin/firefox-bin -new-tab '%s':/usr/local/bin/google-chrome-stable)
10
10
 
11
11
  def call
12
+ scrap_all_deals
12
13
  select_list_of_deals
13
- list_deals
14
- menu
15
- #goodbye
14
+ end
15
+
16
+ def scrap_all_deals
17
+ PopularDeals::Scrapper.scrap_slickdeals(BASE_URL)
18
+ PopularDeals::Scrapper.scrap_slickdeals(PAGE2_URL)
19
+ PopularDeals::Scrapper.scrap_slickdeals(PAGE3_URL)
20
+ PopularDeals::Scrapper.scrap_slickdeals(PAGE4_URL)
21
+ PopularDeals::Scrapper.scrap_slickdeals(PAGE5_URL)
16
22
  end
17
23
 
18
24
  def select_list_of_deals
@@ -24,113 +30,263 @@ class PopularDeals::CLI
24
30
  puts "Type 4 for the fourth list of 61-80 deals.".yellow
25
31
  puts "Type 5 for the fifth list of 81-100 deals.".yellow
26
32
  puts ""
27
- input = gets.strip.to_i
28
- case input
33
+ input1 = gets.strip.to_i
34
+ case input1
29
35
  when 1
30
- @deals = @deals = PopularDeals::NewDeals.scrap_slickdeals(BASE_URL)
31
- puts ""
32
- puts "------------------ Deal list:1 - deals 1 - 20 ------------------".yellow
33
- puts ""
36
+ list1_actions
34
37
  when 2
35
- @deals = @deals = PopularDeals::NewDeals.scrap_slickdeals(PAGE2_URL)
36
- puts ""
37
- puts "------------------ Deal list:2 - deals 21 - 40 ------------------".yellow
38
- puts ""
38
+ list2_actions
39
39
  when 3
40
- @deals = @deals = PopularDeals::NewDeals.scrap_slickdeals(PAGE3_URL)
41
- puts ""
42
- puts "------------------ Deal list:3 - deals 41 - 60 ------------------".yellow
43
- puts ""
40
+ list3_actions
44
41
  when 4
45
- @deals = @deals = PopularDeals::NewDeals.scrap_slickdeals(PAGE4_URL)
46
- puts ""
47
- puts "------------------ Deal list:4 - deals 61 - 80 ------------------".yellow
48
- puts ""
42
+ list4_actions
49
43
  when 5
50
- @deals = @deals = PopularDeals::NewDeals.scrap_slickdeals(PAGE5_URL)
51
- puts ""
52
- puts "------------------ Deal list:5 - deals 81 - 100 ------------------".yellow
53
- puts ""
44
+ list5_actions
54
45
  else
55
46
  puts "Don't understand that command".colorize(:color => :white, :background => :red)
56
47
  select_list_of_deals
57
48
  end
58
- @deals
59
- end
60
-
61
- def list_deals
62
- @deals.each.with_index(1) do |deal, i|
63
- if i < 10
64
- puts "#{i}. #{deal.title}".cyan.bold
65
- puts "Deal rating: #{deal.deal_rating}.".gsub(/^/, " ")
66
- puts "Deal value - #{deal.price}".gsub(/^/, " ")
67
- puts "#{deal.posted}".gsub(/^/, " ")
68
- puts ""
69
- elsif i >= 10
70
- puts "#{i}. #{deal.title}".cyan.bold
71
- puts "Deal rating: #{deal.deal_rating}.".gsub(/^/, " ")
72
- puts "Deal value - #{deal.price}".gsub(/^/, " ")
73
- puts "#{deal.posted}".gsub(/^/, " ")
74
- puts ""
75
- end
76
- end
77
- end
78
-
79
- def menu
49
+ end
50
+
51
+ def deal_list
52
+ @deals.each do |deal|
53
+ i = "#{deal.number}".to_i
54
+ if i < 10
55
+ puts "#{i}. #{deal.title}".cyan.bold
56
+ puts "Deal rating: #{deal.deal_rating}.".gsub(/^/, " ")
57
+ puts "Deal value - #{deal.price}".gsub(/^/, " ")
58
+ puts "#{deal.posted}".gsub(/^/, " ")
59
+ puts ""
60
+ elsif i >= 10
61
+ puts "#{i}. #{deal.title}".cyan.bold
62
+ puts "Deal rating: #{deal.deal_rating}.".gsub(/^/, " ")
63
+ puts "Deal value - #{deal.price}".gsub(/^/, " ")
64
+ puts "#{deal.posted}".gsub(/^/, " ")
65
+ puts ""
66
+ elsif i >= 100
67
+ puts "#{i}. #{deal.title}".cyan.bold
68
+ puts "Deal rating: #{deal.deal_rating}.".gsub(/^/, " ")
69
+ puts "Deal value - #{deal.price}".gsub(/^/, " ")
70
+ puts "#{deal.posted}".gsub(/^/, " ")
71
+ puts ""
72
+ end
73
+ end
74
+ end
75
+
76
+ def list1_actions
77
+ @deals = PopularDeals::NewDeals.deals[0..19]
78
+ puts ""
79
+ puts "------------------ Deal list:1 - deals 1 - 20 ------------------".yellow
80
+ puts ""
81
+ deal_list
80
82
  input = nil
81
83
  while input != "exit"
82
84
 
85
+ deal_message
86
+ input = gets.strip.downcase
83
87
  puts ""
84
- puts "Enter the number of deal you would like more info on or type Exit.".light_blue.bold
88
+
89
+ if input.to_i > 0 && input.to_i <= 20
90
+ space
91
+ puts "Please see below details of deal no. #{input}".upcase.cyan.bold
92
+ disply_deal(BASE_URL, input, product_url)
93
+ elsif input.to_i > 20 && input.to_i <= 100
94
+ puts "Deal ##{input} is not from the list 1.".yellow
95
+ available_options
96
+ elsif input == "list"
97
+ list1_actions
98
+ break
99
+ elsif input == "select list"
100
+ select_list_of_deals
101
+ break
102
+ elsif input == "exit"
103
+ goodbye
104
+ else
105
+ error_handling
106
+ available_options
107
+ end
108
+ end
109
+ end
110
+
111
+ def list2_actions
112
+ @deals = PopularDeals::NewDeals.deals[20..39]
113
+ puts ""
114
+ puts "------------------ Deal list:2 - deals 21 - 40 ------------------".yellow
115
+ puts ""
116
+ deal_list
117
+ input = nil
118
+ while input != "exit"
119
+
120
+ deal_message
121
+ input = gets.strip.downcase
122
+ puts ""
123
+ if input.to_i > 20 && input.to_i <= 40
124
+ space
125
+ puts "Please see below details of deal no. #{input}".upcase.cyan.bold
126
+ disply_deal(BASE_URL, input, product_url)
127
+ elsif input.to_i > 0 && input.to_i <= 20 || input.to_i > 40 && input.to_i <= 100
128
+ puts "Deal ##{input} is not from the list 2.".yellow
129
+ available_options
130
+ elsif input == "list"
131
+ list2_actions
132
+ break
133
+ elsif input == "select list"
134
+ select_list_of_deals
135
+ break
136
+ elsif input == "exit"
137
+ goodbye
138
+ else
139
+ error_handling
140
+ available_options
141
+ end
142
+ end
143
+ end
144
+
145
+ def list3_actions
146
+ @deals = PopularDeals::NewDeals.deals[40..59]
147
+ puts ""
148
+ puts "------------------ Deal list:3 - deals 41 - 60 ------------------".yellow
149
+ puts ""
150
+ deal_list
151
+ input = nil
152
+ while input != "exit"
153
+
154
+ deal_message
155
+ input = gets.strip.downcase
85
156
  puts ""
157
+
158
+ if input.to_i > 40 && input.to_i <= 60
159
+ space
160
+ puts "Please see below details of deal no. #{input}".upcase.cyan.bold
161
+ disply_deal(BASE_URL, input, product_url)
162
+ elsif input.to_i > 0 && input.to_i <= 40 || input.to_i > 60 && input.to_i <= 100
163
+ puts "Deal ##{input} is not from the list 3.".yellow
164
+ available_options
165
+ elsif input == "list"
166
+ list3_actions
167
+ break
168
+ elsif input == "select list"
169
+ select_list_of_deals
170
+ break
171
+ elsif input == "exit"
172
+ goodbye
173
+ else
174
+ error_handling
175
+ available_options
176
+ end
177
+ end
178
+ end
179
+
180
+ def list4_actions
181
+ @deals = PopularDeals::NewDeals.deals[60..79]
182
+ puts ""
183
+ puts "------------------ Deal list:4 - deals 61 - 80 ------------------".yellow
184
+ puts ""
185
+ deal_list
186
+ input = nil
187
+ while input != "exit"
188
+
189
+ deal_message
86
190
  input = gets.strip.downcase
87
191
  puts ""
192
+ if input.to_i > 60 && input.to_i <= 80
193
+ space
194
+ puts "Please see below details of deal no. #{input}".upcase.cyan.bold
195
+ disply_deal(BASE_URL, input, product_url)
196
+ elsif input.to_i > 0 && input.to_i <= 60 || input.to_i > 80 && input.to_i <= 100
197
+ puts "Deal ##{input} is not from the list 4.".yellow
198
+ available_options
199
+ elsif input == "list"
200
+ list4_actions
201
+ break
202
+ elsif input == "select list"
203
+ select_list_of_deals
204
+ break
205
+ elsif input == "exit"
206
+ goodbye
207
+ else
208
+ error_handling
209
+ available_options
210
+ end
211
+ end
212
+ end
213
+
214
+ def list5_actions
215
+ @deals = PopularDeals::NewDeals.deals[80..99]
216
+ puts ""
217
+ puts "------------------ Deal list:5 - deals 81 - 100 ------------------".yellow
218
+ puts ""
219
+ deal_list
220
+ input = nil
221
+ while input != "exit"
88
222
 
89
- if input.to_i > 0 && input.to_i <= 20
90
- puts ""
91
- puts "-----------------------------------------------------------------------------------------------------------"
92
- puts ""
93
- puts "Please see below details of deal no. #{input}".upcase.cyan.bold
94
- disply_deal(BASE_URL, input, product_url)
95
- #open_deal_in_browser
96
- elsif input == "list"
97
- list_deals
98
- elsif input == "select list"
99
- call
100
- break
101
- elsif input == "exit"
102
- goodbye
103
- else
104
- puts "Don't understand your command.".colorize(:color => :white, :background => :red)
105
- puts "Type 'SELECT LIST' to see available deal lists.".yellow
106
- puts "Type 'LIST' to see the current deal list.".yellow
107
- puts "Type 'EXIT' to exit.".yellow
108
- puts ""
109
- end
223
+ deal_message
224
+ input = gets.strip.downcase
225
+ puts ""
226
+ if input.to_i > 80 && input.to_i <= 100
227
+ space
228
+ puts "Please see below details of deal no. #{input}".upcase.cyan.bold
229
+ disply_deal(BASE_URL, input, product_url)
230
+ elsif input.to_i > 0 && input.to_i <= 80
231
+ puts "Deal ##{input} is not from the list 5.".yellow
232
+ available_options
233
+ elsif input == "list"
234
+ list5_actions
235
+ break
236
+ elsif input == "select list"
237
+ select_list_of_deals
238
+ break
239
+ elsif input == "exit"
240
+ goodbye
241
+ else
242
+ error_handling
243
+ available_options
110
244
  end
111
- #goodbye
245
+ end
246
+ end
247
+
248
+ def space
249
+ puts ""
250
+ puts "-----------------------------------------------------------------------------------------------------------"
251
+ puts ""
252
+ end
253
+
254
+ def deal_message
255
+ puts ""
256
+ puts "Enter the number of deal you would like more info on or type Exit.".light_blue.bold
257
+ puts ""
258
+ end
259
+
260
+ def error_handling
261
+ puts "Don't understand your command.".colorize(:color => :white, :background => :red)
262
+ end
263
+
264
+ def available_options
265
+ puts "Type 'SELECT LIST' to see available deal lists.".yellow
266
+ puts "Type 'LIST' to see the current deal list.".yellow
267
+ puts "Type 'EXIT' to exit.".yellow
268
+ puts ""
112
269
  end
113
270
 
114
271
  def disply_deal(base_url, input, product_url)
115
- @deal = PopularDeals::NewDeals.deal_page(BASE_URL, input, product_url)
116
- keys = @deal.keys
272
+ deal = PopularDeals::Scrapper.deal_page(BASE_URL, input, product_url)
273
+ keys = deal.keys
117
274
  puts ""
118
275
  puts "DEAL:".magenta.bold.gsub(/^/, " ")
119
- puts "#{@deal[keys[0]]}".gsub(/^/, " ")
276
+ puts "#{deal[keys[0]]}".gsub(/^/, " ")
120
277
  puts ""
121
278
  puts "Description:".upcase.magenta.bold.gsub(/^/, " ")
122
- puts "#{@deal[keys[1]]}".gsub(/^/, " ")
279
+ puts "#{deal[keys[1]]}".gsub(/^/, " ")
123
280
  puts ""
124
- if @deal[keys[2]].nil?
281
+
282
+ if deal[keys[2]].nil?
125
283
  puts "To lock this deal, please visit:".upcase.magenta.bold.gsub(/^/, " ")
126
284
  puts "#{product_url}".gsub(/^/, " ")
127
285
  else
128
286
  puts "To lock this deal, please visit:".upcase.magenta.bold.gsub(/^/, " ")
129
- puts "#{@deal[keys[2]]}".gsub(/^/, " ")
287
+ puts "#{deal[keys[2]]}".gsub(/^/, " ")
130
288
  end
131
- puts ""
132
- puts "-----------------------------------------------------------------------------------------------------------"
133
- puts ""
289
+ space
134
290
  end
135
291
 
136
292
  def goodbye
@@ -1,49 +1,32 @@
1
1
  class PopularDeals::NewDeals
2
2
 
3
3
 
4
- attr_accessor :title, :url, :deal_rating, :price, :posted, :name, :discription, :purchase, :purchase_link
4
+ attr_accessor :title, :url, :deal_rating, :price, :posted, :name, :discription, :purchase, :purchase_link, :number
5
+ @@all = []
5
6
 
6
- def self.scrap_slickdeals(base_url)
7
- doc = Nokogiri::HTML(open(base_url))
8
- deals = []
9
- all_deals = doc.css("div.dealRow")
10
- all_deals.collect do |one_deal|
11
- deal = self.new
12
- deal.title = one_deal.css("div.dealTitle a.track-popularDealLink").text.strip
13
- link = one_deal.css("div.dealTitle a").attribute("href").value
14
- deal.url = "https://slickdeals.net#{link}"
15
- deal.deal_rating = one_deal.css("div.ratingCol div.num").text.strip
16
- deal.price = one_deal.css("div.priceCol div.price").text.strip
7
+ def save
8
+ @@all << self
9
+ end
17
10
 
18
- date = one_deal.css("div.dealLinks").first.text.strip
19
- new_array = date.split
20
- deal.posted = "#{new_array[0]} #{new_array[1]}"
21
- deals << deal
22
- end
23
- deals
11
+ def self.all
12
+ @@all
24
13
  end
25
14
 
26
15
  def self.open_deal_page(base_url, input)
27
16
  index = input.to_i - 1
28
- @deals = PopularDeals::NewDeals.scrap_slickdeals(base_url)
29
- @product_url = "#{@deals[index].url}"
30
- @product_url
17
+ deals = self.all
18
+ product_url = "#{deals[index].url}"
19
+ product_url
31
20
  end
32
21
 
33
- def self.deal_page(base_url, input, product_url)
34
- self.open_deal_page(base_url, input)
35
- deal = {}
36
- html = open(@product_url)
37
- doc = Nokogiri::HTML(html)
38
- data = doc.text.strip
39
- deal[:name] = doc.css("h1").text.strip
40
- deal[:discription] = doc.css(".textDescription").text.strip
41
- if doc.at_css("a#largeBuyNow").nil?
42
- deal[:purchase] = @product_url
43
- else
44
- deal[:purchase] = doc.at_css("a#largeBuyNow").attr("href")
22
+ def self.deals
23
+ all_deals = @@all
24
+ deals = []
25
+ all_deals.collect do |deal_info|
26
+ deal_info.number = all_deals.index(deal_info).to_i + 1
27
+ deals << deal_info
45
28
  end
46
- deal
29
+ deals
47
30
  end
48
31
 
49
32
  end
@@ -0,0 +1,37 @@
1
+ class PopularDeals::Scrapper
2
+
3
+ def self.scrap_slickdeals(base_url)
4
+ doc = Nokogiri::HTML(open(base_url))
5
+ all_deals = doc.css("div.dealRow")
6
+ all_deals.collect do |one_deal|
7
+ deal = PopularDeals::NewDeals.new
8
+ deal.title = one_deal.css("div.dealTitle a.track-popularDealLink").text.strip
9
+ link = one_deal.css("div.dealTitle a").attribute("href").value
10
+ deal.url = "https://slickdeals.net#{link}"
11
+ deal.deal_rating = one_deal.css("div.ratingCol div.num").text.strip
12
+ deal.price = one_deal.css("div.priceCol div.price").text.strip
13
+
14
+ date = one_deal.css("div.dealLinks").first.text.strip
15
+ new_array = date.split
16
+ deal.posted = "#{new_array[0]} #{new_array[1]}"
17
+ deal.save
18
+ end
19
+ end
20
+
21
+ def self.deal_page(base_url, input, product_url)
22
+ product_url = PopularDeals::NewDeals.open_deal_page(base_url, input)
23
+ deal = {}
24
+ html = open(product_url)
25
+ doc = Nokogiri::HTML(html)
26
+ data = doc.text.strip
27
+ deal[:name] = doc.css("h1").text.strip
28
+ deal[:discription] = doc.css(".textDescription").text.strip
29
+ if doc.at_css("a#largeBuyNow").nil?
30
+ deal[:purchase] = product_url
31
+ else
32
+ deal[:purchase] = doc.at_css("a#largeBuyNow").attr("href")
33
+ end
34
+ deal
35
+ end
36
+
37
+ end
@@ -1,3 +1,3 @@
1
1
  module PopularDeals
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.summary = %q{It displays popular deals of the day from https://slickdeals.net/deals/ with popular-deals command.}
13
13
  #spec.description = %q{This CLI gem displays 100 popular deals with deal rating and price from slickdeals.net/deals. Just use 'popular-deals' command. You can also see a deal details by selecting number of the deal you may be interested in.}
14
14
  spec.description = <<-EOF
15
- This CLI gem displays 100 popular deals with ratings and prices from slickdeals.net/deals. Just use 'popular-deals' command.
15
+ This CLI gem displays 5 lists of top 100 deals with ratings and prices from slickdeals.net/deals. Just use 'popular-deals' command.
16
16
 
17
17
  You can also view more details by typing respective deal number.
18
18
  EOF
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: popular_deals
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - "'Hima Chitalia'"
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-07 00:00:00.000000000 Z
11
+ date: 2017-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: |2
84
- This CLI gem displays 100 popular deals with ratings and prices from slickdeals.net/deals. Just use 'popular-deals' command.
84
+ This CLI gem displays 5 lists of top 100 deals with ratings and prices from slickdeals.net/deals. Just use 'popular-deals' command.
85
85
 
86
86
  You can also view more details by typing respective deal number.
87
87
  email:
@@ -106,6 +106,7 @@ files:
106
106
  - lib/popular_deals.rb
107
107
  - lib/popular_deals/cli.rb
108
108
  - lib/popular_deals/newdeals.rb
109
+ - lib/popular_deals/scrapper.rb
109
110
  - lib/popular_deals/version.rb
110
111
  - popular_deals.gemspec
111
112
  - spec.md