Module: Sequel::Plugins::PgRow
- Defined in:
- lib/sequel/plugins/pg_row.rb
Overview
The pg_row plugin allows you to use Sequel::Model classes as composite type classes, via the pg_row extension. So if you have an address table:
DB.create_table(:address) do
String :street
String :city
String :zip
end
and a company table with an address:
DB.create_table(:company) do
String :name
address :address
end
You can create a Sequel::Model for the address table, and load the plugin, which registers the row type:
class Address < Sequel::Model(:address)
plugin :pg_row
end
Then when you select from the company table (even using a plain dataset), it will return address values as instances of Address:
DB[:company].first
# => {:name=>'MS', :address=>
# Address.load(:street=>'123 Foo St', :city=>'Bar Town', :zip=>'12345')}
If you want a lot of your models to be used as row types, you can load the plugin into Sequel::Model itself:
Sequel::Model.plugin :pg_row
And then call register_row_type in the class
Address.register_row_type
Note that automatic conversion only works with the native postgres adapter. For other adapters that connect to PostgreSQL, you need to call the conversion proc manually.
In addition to returning row-valued/composite types as instances of Sequel::Model, this also lets you use model instances in datasets when inserting, updating, and filtering:
DB[:company].insert(:name=>'MS', :address=>
Address.load(:street=>'123 Foo St', :city=>'Bar Town', :zip=>'12345'))
Defined Under Namespace
Modules: ClassMethods, DatabaseMethods, InstanceMethods
Class Method Summary collapse
-
.configure(model) ⇒ Object
When loading the extension, make sure the database has the pg_row extension loaded, load the custom database extensions, and automatically register the row type if the model has a dataset.
Class Method Details
.configure(model) ⇒ Object
When loading the extension, make sure the database has the pg_row extension loaded, load the custom database extensions, and automatically register the row type if the model has a dataset.
56 57 58 59 60 |
# File 'lib/sequel/plugins/pg_row.rb', line 56 def self.configure(model) model.db.extension(:pg_row) model.db.extend(DatabaseMethods) model.register_row_type if model.instance_variable_get(:@dataset) end |