Method: CSV.instance
- Defined in:
- lib/csv.rb
.instance(data = $stdout, **options) ⇒ Object
This method will return a CSV instance, just like CSV::new(), but the instance will be cached and returned for all future calls to this method for the same data object (tested by Object#object_id()) with the same options.
If a block is given, the instance is passed to the block and the return value becomes the return value of the block.
429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 |
# File 'lib/csv.rb', line 429 def instance(data = $stdout, **) # create a _signature_ for this method call, data object and options sig = [data.object_id] + .values_at(*DEFAULT_OPTIONS.keys.sort_by { |sym| sym.to_s }) # fetch or create the instance for this signature @@instances ||= Hash.new instance = (@@instances[sig] ||= new(data, **)) if block_given? yield instance # run block, if given, returning result else instance # or return the instance end end |