Closed okuramasafumi closed 2 years ago
How about this?
diff --git a/lib/csv/core_ext/array.rb b/lib/csv/core_ext/array.rb
index 8beb06b..0180deb 100644
--- a/lib/csv/core_ext/array.rb
+++ b/lib/csv/core_ext/array.rb
@@ -4,6 +4,16 @@ class Array # :nodoc:
# ["CSV", "data"].to_csv
# #=> "CSV,data\n"
def to_csv(**options)
- CSV.generate_line(self, **options)
+ case first
+ when Array
+ output = +""
+ csv = CSV.new(output, **options)
+ each do |row|
+ csv << row
+ end
+ output
+ else
+ CSV.generate_line(self, **options)
+ end
end
end
If we use the suggested approach, I think that CSV.generate_lines(rows)
is better.
@kou I like CSV.generate_lines(rows)
API. I think we can have CSV.generate_lines(rows)
and Array#to_csv
for nested array at the same time.
OK. Do you want to work on this? Or does @ericgpks want to work on this?
I would like to try this one !!
OK! I'm waiting for your pull request for this! If you have any trouble, I can help you at https://gitter.im/red-data-tools/ja or pull request as usual.
Problem
When we have
one simple way to generate CSV String from this Array is:
This works, but it's procedural and not intuitive.
It's often the case that it's easy to prepare data in form of Array, and difficult to prepare data in form of String, so it's good to have a way to directly convert Array into CSV String.
Solution
My suggestion is to add the method below:
Advantages
generate
to customize its behaviorDisadvantages
Implementtion
This implementation works in my local environment. It's not optimized anyway.