Module: Sequel::Plugins::CsvSerializer
- Defined in:
- lib/sequel/plugins/csv_serializer.rb
Overview
csv_serializer handles serializing entire Sequel::Model objects to CSV, as well as support for deserializing CSV directly into Sequel::Model objects. It requires the csv standard library.
Basic Example:
album = Album[1]
album.to_csv(write_headers: true)
# => "id,name,artist_id\n1,RF,2\n"
You can provide options to control the CSV output:
album.to_csv(only: :name)
album.to_csv(except: [:id, :artist_id])
# => "RF\n"
to_csv
also exists as a class and dataset method, both of which return all objects in the dataset:
Album.to_csv
Album.where(artist_id: 1).to_csv
If you have an existing array of model instances you want to convert to CSV, you can call the class to_csv method with the :array option:
Album.to_csv(array: [Album[1], Album[2]])
In addition to creating CSV, this plugin also enables Sequel::Model classes to create instances directly from CSV using the from_csv class method:
csv = album.to_csv
album = Album.from_csv(csv)
The array_from_csv class method exists to parse arrays of model instances from CSV:
csv = Album.where(artist_id: 1).to_csv
albums = Album.array_from_csv(csv)
These do not necessarily round trip, since doing so would let users create model objects with arbitrary values. By default, from_csv will call set with the values in the hash. If you want to specify the allowed fields, you can use the :headers option.
Album.from_csv(album.to_csv, headers: %w'id name')
If you want to update an existing instance, you can use the from_csv instance method:
album.from_csv(csv)
Usage:
# Add CSV output capability to all model subclass instances (called
# before loading subclasses)
Sequel::Model.plugin :csv_serializer
# Add CSV output capability to Album class instances
Album.plugin :csv_serializer
Defined Under Namespace
Modules: ClassMethods, DatasetMethods, InstanceMethods
Class Method Summary collapse
-
.configure(model, opts = OPTS) ⇒ Object
Set up the column readers to do deserialization and the column writers to save the value in deserialized_values.
-
.csv_call(*args, opts, &block) ⇒ Object
:nocov: :nodoc:.
Class Method Details
.configure(model, opts = OPTS) ⇒ Object
Set up the column readers to do deserialization and the column writers to save the value in deserialized_values
70 71 72 73 74 |
# File 'lib/sequel/plugins/csv_serializer.rb', line 70 def self.configure(model, opts = OPTS) model.instance_exec do @csv_serializer_opts = (@csv_serializer_opts || OPTS).merge(opts) end end |
.csv_call(*args, opts, &block) ⇒ Object
:nocov: :nodoc:
87 88 89 |
# File 'lib/sequel/plugins/csv_serializer.rb', line 87 def self.csv_call(*args, opts, &block) CSV.send(*args, opts, &block) end |