Class: LCBO::ProductPage
Instance Method Summary
collapse
#[], #as_hash, #fields, #http_method, included, #initialize, #is_parsed?, #parse, #process, #request, #request_prototype
Instance Method Details
#find_info_line(regexp) ⇒ Object
290
291
292
|
# File 'lib/lcbo/pages/product_page.rb', line 290
def find_info_line(regexp)
info_cell_lines.select { |l| l =~ regexp }.first
end
|
#get_info_lines_at_offset(offset) ⇒ Object
279
280
281
282
283
284
|
# File 'lib/lcbo/pages/product_page.rb', line 279
def get_info_lines_at_offset(offset)
raw_info_cell_lines.select do |line|
match = line.scan(/\A[\s]+/)[0]
match ? offset == match.size : false
end
end
|
#has_package? ⇒ Boolean
257
258
259
|
# File 'lib/lcbo/pages/product_page.rb', line 257
def has_package?
!info_cell_lines[2].include?('Price:')
end
|
#info_cell_element ⇒ Object
312
313
314
|
# File 'lib/lcbo/pages/product_page.rb', line 312
def info_cell_element
doc.css('table[width="478"] td[height="271"] td[colspan="2"].main_font')[0]
end
|
#info_cell_html ⇒ Object
308
309
310
|
# File 'lib/lcbo/pages/product_page.rb', line 308
def info_cell_html
@info_cell_html ||= info_cell_element.inner_html
end
|
#info_cell_line_after(item) ⇒ Object
304
305
306
|
# File 'lib/lcbo/pages/product_page.rb', line 304
def info_cell_line_after(item)
(i = info_cell_lines.index(item)) ? info_cell_lines[i + 1] : nil
end
|
#info_cell_lines ⇒ Object
298
299
300
301
302
|
# File 'lib/lcbo/pages/product_page.rb', line 298
def info_cell_lines
@info_cell_lines ||= begin
raw_info_cell_lines.map { |l| l.strip }.reject { |l| l == '' }
end
end
|
#info_cell_text ⇒ Object
286
287
288
|
# File 'lib/lcbo/pages/product_page.rb', line 286
def info_cell_text
@info_cell_text ||= info_cell_lines.join("\n")
end
|
#normalize_image_url(url) ⇒ Object
316
317
318
319
320
|
# File 'lib/lcbo/pages/product_page.rb', line 316
def normalize_image_url(url)
return unless url
return if url.include?('default')
url.include?('http://') ? url : File.join('http://lcbo.com', url)
end
|
274
275
276
277
|
# File 'lib/lcbo/pages/product_page.rb', line 274
def product_details_form(name)
doc.css("form[name=\"productdetails\"] input[name=\"#{name}\"]")[0].
attributes['value'].to_s
end
|
#raw_info_cell_lines ⇒ Object
294
295
296
|
# File 'lib/lcbo/pages/product_page.rb', line 294
def raw_info_cell_lines
@raw_info_cell_lines ||= info_cell_element.content.split(/\n/)
end
|
#stock_category ⇒ Object
261
262
263
264
265
266
267
268
269
270
271
272
|
# File 'lib/lcbo/pages/product_page.rb', line 261
def stock_category
cat = get_info_lines_at_offset(12).reject do |line|
l = line.strip
l == '' ||
l.include?('Price:') ||
l.include?('Bonus Reward Miles Offer') ||
l.include?('Value Added Promotion') ||
l.include?('Limited Time Offer') ||
l.include?('NOTE:')
end.first
cat ? cat.strip : nil
end
|
341
342
343
344
345
|
# File 'lib/lcbo/pages/product_page.rb', line 341
def verify_product_details_form
return unless doc.css('form[name="productdetails"]').empty?
raise CrawlKit::MalformedError,
"productdetails form not found in doc for product #{id}"
end
|
#verify_product_name ⇒ Object
335
336
337
338
339
|
# File 'lib/lcbo/pages/product_page.rb', line 335
def verify_product_name
return unless product_details_form('itemName').strip == ''
raise CrawlKit::NotFoundError,
"can not locate name for product #{id}"
end
|
#verify_response_not_blank ⇒ Object
329
330
331
332
333
|
# File 'lib/lcbo/pages/product_page.rb', line 329
def verify_response_not_blank
return unless html.strip == ''
raise CrawlKit::NotFoundError,
"product #{id} does not appear to exist"
end
|
#verify_third_info_cell ⇒ Object
322
323
324
325
326
327
|
# File 'lib/lcbo/pages/product_page.rb', line 322
def verify_third_info_cell
return unless has_package? && info_cell_lines[2][0,1] != '|'
raise CrawlKit::MalformedError,
"Expected third line in info cell to begin with bar. LCBO No: " \
"#{id}, Dump: #{info_cell_lines[2].inspect}"
end
|
#volume_helper ⇒ Object
253
254
255
|
# File 'lib/lcbo/pages/product_page.rb', line 253
def volume_helper
@volume_helper ||= CrawlKit::VolumeHelper.new(package)
end
|