Class: Vendor

Inherits:
Object
  • Object
show all
Defined in:
lib/blackfriday2016/vendor.rb

Constant Summary collapse

INDEX_BASE_PATH =
"http://dealnews.com/black-friday/"
@@all =
[]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vendor_details) ⇒ Vendor

Returns a new instance of Vendor.



10
11
12
13
# File 'lib/blackfriday2016/vendor.rb', line 10

def initialize(vendor_details)
  vendor_details.each {|key,value| self.send(("#{key}="), value)}
  @@all << self
end

Instance Attribute Details

#index_pagenumObject

Returns the value of attribute index_pagenum.



6
7
8
# File 'lib/blackfriday2016/vendor.rb', line 6

def index_pagenum
  @index_pagenum
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/blackfriday2016/vendor.rb', line 6

def name
  @name
end

#numberObject

Returns the value of attribute number.



6
7
8
# File 'lib/blackfriday2016/vendor.rb', line 6

def number
  @number
end

#page_urlObject

Returns the value of attribute page_url.



6
7
8
# File 'lib/blackfriday2016/vendor.rb', line 6

def page_url
  @page_url
end

Class Method Details

.allObject



27
28
29
# File 'lib/blackfriday2016/vendor.rb', line 27

def self.all
  @@all
end

.create_from_collection(vendor_index) ⇒ Object

Uses the Scraper class to create new vendors with all the details



16
17
18
19
20
# File 'lib/blackfriday2016/vendor.rb', line 16

def self.create_from_collection(vendor_index)
  vendor_index.each do |vendor|
    self.new(vendor)
  end
end

.create_vendorsObject



22
23
24
25
# File 'lib/blackfriday2016/vendor.rb', line 22

def self.create_vendors
  vendor_index = Scraper.scrape_index_page(INDEX_BASE_PATH)# + 'index.html')
  self.create_from_collection(vendor_index)
end

.display_vendors(page_num = 1) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'lib/blackfriday2016/vendor.rb', line 54

def self.display_vendors(page_num=1)
  puts "-------------------------------------------------------".colorize(:light_blue)
  puts "List of Stores - Black Friday Deals - Page #{page_num}:".center(55)
  puts "-------------------------------------------------------".colorize(:light_blue)
  self.all.each do |vendor|
    puts "#{vendor.number}. ".colorize(:light_red) + "#{vendor.name}".colorize(:light_blue) if vendor.index_pagenum == page_num
  end
  self.index_page_options(page_num)
end

.index_page_options(page_num = 1) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/blackfriday2016/vendor.rb', line 72

def self.index_page_options(page_num=1)
  puts "-------------------------------------------------------".colorize(:light_blue)
  puts "Please select from options below:".colorize(:green)
  self.print_prev_page if (page_num > 1 && page_num <= self.page_count)
  self.print_next_page if page_num < self.page_count
  puts "\n" + "| Store '" + "#".colorize(:light_red) + "' to " + "See Deals".colorize(:light_blue) + " from a particular Store |"
  puts "| '" + "x".colorize(:light_red) + "' to " + "Exit".colorize(:light_blue) + " the program |"
  print "\n" + "Please Enter your selection: ".colorize(:green)
  input = gets.strip.downcase
  if input == "n"
    if page_num+1 <= self.page_count
      self.display_vendors(page_num+1)
    else
      puts "You have reached the end of Store List.".colorize(:light_blue)
      self.index_page_options(page_num)
    end
  elsif input == "p"
    if page_num-1 >= 1
      self.display_vendors(page_num-1)
    else
      puts "You have reached the beginning of Store List.".colorize(:light_blue)
      self.index_page_options(page_num)
    end
  elsif input.include?(".")
    puts "You have entered an invalid choice. Please make a valid choice.".colorize(:light_blue)
    self.index_page_options(page_num)
  elsif input.to_i > 0
    store_num = input.to_i
    if store_num <= self.all.count
      Dealpage.display_deal_details(self.return_deal_url(store_num))
    else
      puts "You have entered an invalid Store Number. Please make a valid choice.".colorize(:light_blue)
      self.index_page_options(page_num)
    end
  elsif input == "x"
    puts "Goodbye! Have a nice day.".colorize(:light_blue)
  else
    puts "You have entered an invalid choice. Please make a valid choice.".colorize(:light_blue)
    self.index_page_options(page_num)
  end
end

.page_countObject

Count the total number of vendor index pages



32
33
34
# File 'lib/blackfriday2016/vendor.rb', line 32

def self.page_count
  (self.all.count/10.to_f).ceil
end


68
69
70
# File 'lib/blackfriday2016/vendor.rb', line 68

def self.print_next_page
  print "| '" + "n".colorize(:light_red) + "' >>> " + "Next Page".colorize(:light_blue) + " |"
end


64
65
66
# File 'lib/blackfriday2016/vendor.rb', line 64

def self.print_prev_page
  print "| '" + "p".colorize(:light_red) + "' <<< " + "Previous Page".colorize(:light_blue) + " |"
end

.return_deal_url(input) ⇒ Object

Returns the deal page url of a particular vendor



37
38
39
40
41
42
43
# File 'lib/blackfriday2016/vendor.rb', line 37

def self.return_deal_url(input)
  return_url = nil
  self.all.each do |vendor|
    return_url = vendor.page_url if vendor.number == input
  end
  return_url
end

.return_vendor_name(page_url) ⇒ Object

Returns vendor name when given a deal page url



46
47
48
49
50
51
52
# File 'lib/blackfriday2016/vendor.rb', line 46

def self.return_vendor_name(page_url)
  vendor_name = nil
  self.all.each do |vendor|
    vendor_name = vendor.name if vendor.page_url == page_url
  end
  vendor_name
end