Module Sequel::Plugins::PgRow
In: lib/sequel/plugins/pg_row.rb
lib/sequel/extensions/_model_pg_row.rb

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

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'))

Methods

configure  

Classes and Modules

Module Sequel::Plugins::PgRow::ClassMethods
Module Sequel::Plugins::PgRow::DatabaseMethods
Module Sequel::Plugins::PgRow::InstanceMethods

Public Class methods

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.

[Source]

    # File lib/sequel/plugins/pg_row.rb, line 54
54:       def self.configure(model)
55:         model.db.extension(:pg_row, :_model_pg_row)
56:         model.register_row_type if model.instance_variable_get(:@dataset)
57:       end

[Validate]