Forum: Ruby FasterCVS Question/Problem

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8ee257799a0f1898dd1951bd2843bc71?d=identicon&s=25 Eric Marthinsen (emarthinsen)
on 2008-11-06 22:33
Hello-

I'm using FasterCSV to export order records for our fulfillment partner.
Here's a boiled-down snippet of my code:

FasterCSV.open(filename, "w", :encoding => 'N') do |csv|
  orders.each do |order|
    order.items.each do |item|
      csv << [
              item.sku.sku,
              item.quantity,
              order.customer.first_name,
              order.customer.last_name
             ]
    end
  end
end

If I had one order with two items, I'd expect the output to look like
this:

SKU001,1,John,Smith
SKU002,1,John,Smith

However, the output actually looks like this:

"SKU001,SKU002",1,John,Smith

It seems to be taking the common information and collapsing it onto a
single row. Does anyone know how to get the output to resemble what I
was expecting?

Thanks in advance,
Eric
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2008-11-06 22:52
(Received via mailing list)
On Nov 6, 2008, at 3:31 PM, Eric Marthinsen wrote:

> Hello-

Howdy.

> I'm using FasterCSV to export order records for our fulfillment
> partner.
> Here's a boiled-down snippet of my code:
>
> FasterCSV.open(filename, "w", :encoding => 'N') do |csv|
>  orders.each do |order|
>    order.items.each do |item|
>      csv << [
>              item.sku.sku,

This line seems fishy.  You call sku() twice here.

> this:
> was expecting?
I expect the output to be what you so as well.  I ran this code as saw
the output we both expected:

#!/usr/bin/env ruby -wKU

require "rubygems"
require "faster_csv"

Customer = Struct.new(:first_name, :last_name)
Order    = Struct.new(:customer, :items)
Item     = Struct.new(:sku, :quantity)

customer = Customer.new("John", "Smith")
orders   = [Order.new(customer, %w[SKU001 SKU002].map { |s|
Item.new(s, 1) })]

FasterCSV.open("example.csv", "w", :encoding => "N") do |csv|
   orders.each do |order|
     order.items.each do |item|
       csv << [ item.sku,
                item.quantity,
                order.customer.first_name,
                order.customer.last_name ]
     end
   end
end

__END__

Does that help?

James Edward Gray II
8ee257799a0f1898dd1951bd2843bc71?d=identicon&s=25 Eric Marthinsen (emarthinsen)
on 2008-11-07 21:55
Hi James-

Thanks for your reply (and the great library). It turns out this one was
human error. The FasterCSV library is working flawlessly. Someone had
entered the string "SKU001,SKU002" as the sku, so the output is exactly
what one would expect it to be. Incidentally, I called sku twice because
My Item object has a Sku child which has a sku accessor. Not the best
naming convention.

Regards,
Eric
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2008-11-07 21:59
(Received via mailing list)
On Nov 7, 2008, at 2:53 PM, Eric Marthinsen wrote:

> naming convention.
I'm glad to hear that you got it figured out.  Good luck with the
project.

James Edward Gray II
This topic is locked and can not be replied to.