class RsrGroup::Catalog
Public Class Methods
all(options = {})
click to toggle source
# File lib/rsr_group/catalog.rb, line 9 def self.all(options = {}) requires!(options, :username, :password) new(options).all end
new(options = {})
click to toggle source
# File lib/rsr_group/catalog.rb, line 4 def initialize(options = {}) requires!(options, :username, :password) @options = options end
Public Instance Methods
all()
click to toggle source
# File lib/rsr_group/catalog.rb, line 14 def all items = [] connect(@options) do |ftp| begin tempfile = Tempfile.new if ftp.nlst.include?(KEYDEALER_DIR) ftp.chdir(KEYDEALER_DIR) ftp.getbinaryfile(KEYDEALER_CATALOG_FILENAME, tempfile.path) else ftp.chdir(DEFAULT_DIR) ftp.getbinaryfile(DEFAULT_CATALOG_FILENAME, tempfile.path) end ftp.close CSV.foreach(tempfile, { col_sep: ';', quote_char: "\x00" }).each do |row| item = process_row(row) if !row[12].nil? && row[12].to_sym.eql?(:Allocated) item[:quantity] = 0 end items << item end end tempfile.unlink end items end
Private Instance Methods
process_row(row)
click to toggle source
# File lib/rsr_group/catalog.rb, line 54 def process_row(row) category_name = row[3].nil? ? nil : RsrGroup::Department.new(row[3]).name { upc: sanitize(row[1]), item_identifier: sanitize(row[0]), name: sanitize(row[2]), model: sanitize(row[9]), category: category_name, brand: sanitize(row[10]), msrp: sanitize(row[5]), price: sanitize(row[6]), map_price: sanitize(row[70]), quantity: (Integer(sanitize(row[8])) rescue 0), mfg_number: sanitize(row[11]), weight: sanitize(row[7]), short_description: sanitize(row[2]), long_description: sanitize(row[13]), features: { shipping_length: sanitize(row[74]), shipping_width: sanitize(row[75]), shipping_height: sanitize(row[76]) } } end
sanitize(data)
click to toggle source
# File lib/rsr_group/catalog.rb, line 49 def sanitize(data) return data unless data.is_a?(String) data.strip end