Class: BillHicks::Order
Overview
To submit an order:
-
Instantiate a new Order, passing in ‘:username` and `:password`
-
Call #add_header
-
Call #add_item for each item on the order
-
Call #submit! to send the order
See each method for a list of required options.
Instance Method Summary collapse
- #add_header(header = {}) ⇒ Object
- #add_item(item = {}) ⇒ Object
- #filename ⇒ Object
-
#initialize(options = {}) ⇒ Order
constructor
A new instance of Order.
- #submit! ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(options = {}) ⇒ Order
Returns a new instance of Order.
14 15 16 17 18 |
# File 'lib/bill_hicks/order.rb', line 14 def initialize( = {}) requires!(, :username, :password) = @items = [] end |
Instance Method Details
#add_header(header = {}) ⇒ Object
31 32 33 34 35 36 37 38 39 |
# File 'lib/bill_hicks/order.rb', line 31 def add_header(header = {}) requires!(header, :customer, :purchase_order, :ffl, :shipping) requires!(header[:shipping], :name, :address_1, :city, :state, :zip) @header = header # Ensure that address_2 is not an empty string if @header[:shipping][:address_2] && @header[:shipping][:address_2].empty? @header[:shipping][:address_2] = nil end end |
#add_item(item = {}) ⇒ Object
45 46 47 48 |
# File 'lib/bill_hicks/order.rb', line 45 def add_item(item = {}) requires!(item, :item_number, :quantity, :price) @items << item end |
#filename ⇒ Object
50 51 52 |
# File 'lib/bill_hicks/order.rb', line 50 def filename "#{@header[:purchase_order]}-order.txt" end |
#submit! ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/bill_hicks/order.rb', line 54 def submit! raise BillHicks::InvalidOrder.new("Must call #add_header before submitting") if @header.nil? raise BillHicks::InvalidOrder.new("Must add items with #add_item before submitting") if @items.empty? @order_file = Tempfile.new(filename) begin CSV.open(@order_file.path, 'w+', col_sep: "\t") do |csv| csv << header_names csv << header_fields csv << items_header @items.each do |item| csv << item_fields(item) end end upload! ensure # Close and delete (unlink) file. @order_file.close @order_file.unlink end # TODO: Find some way of returning a meaningful true/false. Currently, if there's a problem, an exception is raised. true end |