popular_deals 1.1.0 → 1.1.1

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 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