lib/lipseys/catalog.rb in lipseys-0.3.0 vs lib/lipseys/catalog.rb in lipseys-1.0.0.pre

- old
+ new

@@ -72,13 +72,57 @@ def self.all(options = {}) new(options).all end def all - get_items + params = { + email: @email, + pass: @password + } + tempfile = stream_to_tempfile(API_URL, params) + + items = Array.new + + Lipseys::Parser.parse(tempfile, 'Item') do |node| + items.push(map_hash(node)) + end + + items end + def self.all_as_chunks(size, options = {}, &block) + new(options).all_as_chunks(size, &block) + end + + def all_as_chunks(size, &block) + params = { + email: @email, + pass: @password + } + chunker = Lipseys::Chunker.new(size) + tempfile = stream_to_tempfile(API_URL, params) + + Lipseys::Parser.parse(tempfile, 'Item') do |node| + if chunker.is_full? + yield(chunker.chunk) + + chunker.reset + else + chunker.add(map_hash(node)) + end + end + + # HACK-david + # since we can't get a count of the items without reading the file + # Let's just check to see if we have any left in the chunk + if chunker.chunk.count > 0 + yield(chunker.chunk) + end + + tempfile.unlink + end + def self.firearms(options = {}) new(options).firearms end def firearms @@ -115,71 +159,75 @@ params = { email: @email, pass: @password } params[:itemtype] = item_type unless item_type.nil? xml_doc = get_response_xml(API_URL, params) - items = [] + items = Array.new xml_doc.css('LipseysCatalog/Item').each do |item| - items << { - item_number: content_for(item, 'ItemNo'), - description_1: content_for(item, 'Desc1'), - description_2: content_for(item, 'Desc2'), - upc: content_for(item, 'UPC'), - manufacturer_model_number: content_for(item, 'MFGModelNo'), - msrp: content_for(item, 'MSRP'), - model: content_for(item, 'Model'), - caliber: content_for(item, 'Caliber'), - manufacturer: content_for(item, 'MFG'), - type: content_for(item, 'Type'), - action: content_for(item, 'Action'), - barrel: content_for(item, 'Barrel'), - capacity: content_for(item, 'Capacity'), - finish: content_for(item, 'Finish'), - length: content_for(item, 'Length'), - receiver: content_for(item, 'Receiver'), - safety: content_for(item, 'Safety'), - sights: content_for(item, 'Sights'), - stock_frame_grips: content_for(item, 'StockFrameGrips'), - magazine: content_for(item, 'Magazine'), - weight: content_for(item, 'Weight'), - image: "http://www.lipseys.net/images/#{content_for(item, 'Image')}", - chamber: content_for(item, 'Chamber'), - drilled_tapped: (content_for(item, 'DrilledTapped') == 'Y'), - rate_of_twist: content_for(item, 'RateOfTwist'), - item_type: content_for(item, 'ItemType'), - feature_1: content_for(item, 'Feature1'), - feature_2: content_for(item, 'Feature2'), - feature_3: content_for(item, 'Feature3'), - shipping_weight: content_for(item, 'ShippingWeight'), - bound_book: { - model: content_for(item, 'BoundBookModel'), - type: content_for(item, 'BoundBookType'), - manufacturer: content_for(item, 'BoundBookMFG'), - }, - nfa: { - thread_pattern: content_for(item, 'NFAThreadPattern'), - attach_method: content_for(item, 'NFAAttachMethod'), - baffle: content_for(item, 'NFABaffle'), - can_disassemble: (content_for(item, 'NFACanDisassemble') == 'Y'), - construction: content_for(item, 'NFAConstruction'), - db_reduction: content_for(item, 'NFAdbReduction'), - diameter: content_for(item, 'NFADiameter'), - form_3_caliber: content_for(item, 'NFAForm3Caliber'), - }, - optic: { - magnification: content_for(item, 'Magnification'), - maintube: content_for(item, 'Maintube'), - objective: content_for(item, 'Objective'), - adjustable_objective: (content_for(item, 'AdjustableObjective') == 'Y'), - optic_adjustments: content_for(item, 'OpticAdjustments'), - reticle: content_for(item, 'Reticle'), - illuminated_reticle: (content_for(item, 'IlluminatedReticle') == 'Y'), - } - } + items.push(map_hash(item)) end items + end + + def map_hash(node) + { + item_number: content_for(node, 'ItemNo'), + description_1: content_for(node, 'Desc1'), + description_2: content_for(node, 'Desc2'), + upc: content_for(node, 'UPC'), + manufacturer_model_number: content_for(node, 'MFGModelNo'), + msrp: content_for(node, 'MSRP'), + model: content_for(node, 'Model'), + caliber: content_for(node, 'Caliber'), + manufacturer: content_for(node, 'MFG'), + type: content_for(node, 'Type'), + action: content_for(node, 'Action'), + barrel: content_for(node, 'Barrel'), + capacity: content_for(node, 'Capacity'), + finish: content_for(node, 'Finish'), + length: content_for(node, 'Length'), + receiver: content_for(node, 'Receiver'), + safety: content_for(node, 'Safety'), + sights: content_for(node, 'Sights'), + stock_frame_grips: content_for(node, 'StockFrameGrips'), + magazine: content_for(node, 'Magazine'), + weight: content_for(node, 'Weight'), + image: "http://www.lipseys.net/images/#{content_for(node, 'Image')}", + chamber: content_for(node, 'Chamber'), + drilled_tapped: (content_for(node, 'DrilledTapped') == 'Y'), + rate_of_twist: content_for(node, 'RateOfTwist'), + item_type: content_for(node, 'ItemType'), + feature_1: content_for(node, 'Feature1'), + feature_2: content_for(node, 'Feature2'), + feature_3: content_for(node, 'Feature3'), + shipping_weight: content_for(node, 'ShippingWeight'), + bound_book: { + model: content_for(node, 'BoundBookModel'), + type: content_for(node, 'BoundBookType'), + manufacturer: content_for(node, 'BoundBookMFG'), + }, + nfa: { + thread_pattern: content_for(node, 'NFAThreadPattern'), + attach_method: content_for(node, 'NFAAttachMethod'), + baffle: content_for(node, 'NFABaffle'), + can_disassemble: (content_for(node, 'NFACanDisassemble') == 'Y'), + construction: content_for(node, 'NFAConstruction'), + db_reduction: content_for(node, 'NFAdbReduction'), + diameter: content_for(node, 'NFADiameter'), + form_3_caliber: content_for(node, 'NFAForm3Caliber'), + }, + optic: { + magnification: content_for(node, 'Magnification'), + maintube: content_for(node, 'Maintube'), + objective: content_for(node, 'Objective'), + adjustable_objective: (content_for(node, 'AdjustableObjective') == 'Y'), + optic_adjustments: content_for(node, 'OpticAdjustments'), + reticle: content_for(node, 'Reticle'), + illuminated_reticle: (content_for(node, 'IlluminatedReticle') == 'Y'), + } + } end end end