Add this line to your application's Gemfile:
gem 'umbrellio-sequel-plugins'
And then execute:
$ bundle
CurrencyRates
PGTools
Slave
Synchronize
methods_in_migrations
Duplicate
GetColumnValue
StoreAccessors
Synchronize
Upsert
WithLock
TimestampMigratorUndoExtension
Plugin for joining currency rates table to any other table and money exchange.
Enable: DB.extension :currency_rates
Currency rates table example:
CREATE TABLE currency_rates (
id integer NOT NULL,
currency text NOT NULL,
period tsrange NOT NULL,
rates jsonb NOT NULL
);
INSERT INTO currency_rates (currency, period, rates) VALUES
('EUR', tsrange('2019-02-07 16:00:00 +0300', '2019-02-07 16:00:00 +0300'), '{"USD": 1.1, "EUR": 1.0, "RUB": 81}'),
('EUR', tsrange('2019-02-07 17:00:00 +0300', NULL), '{"USD": 1.2, "EUR": 1.0, "RUB": 75}')
Usage example:
CREATE TABLE items (
id integer NOT NULL,
currency text NOT NULL,
price numeric NOT NULL,
created_at timestamp without time zone NOT NULL
);
INSERT INTO items (currency, price, created_at) VALUES ("EUR", 10, '2019-02-07 16:10:00 +0300')
DB[:items]
.with_rates
.select(Sequel[:price].exchange_to("USD").as(:usd_price))
.first
# => { "usd_price" => 12.0 }
Enable: DB.extension :pg_tools
Plugins for getting all inherited tables.
Example:
DB.inherited_tables_for(:event_log) # => [:event_log_2019_01, :event_log_2019_02]
Enable: DB.extension :slave
Plugin for choosing slave server for query.
Example:
DB[:users].slave.where(email: "[email protected]") # executes on a slave server
Important: you have to define a server named 'slave' in sequel config before using it.
Enable: DB.extension :synchronize
Plugin for using transaction advisory locks for application-level mutexes.
Example:
DB.synchronize_with([:ruby, :forever]) { p "Hey, I'm in transaction!"; sleep 5 }
# => BEGIN
# => SELECT pg_try_advisory_xact_lock(3764656399) -- 'ruby-forever'
# => COMMIT
Enable: Sequel.extension(:methods_in_migrations)
Support for method definitions and invocations inside Sequel.migration
.
Example:
Sequel.extension(:methods_in_migrations)
Sequel.migration do
# define
def get_data
# ...some code...
end
# use
up { get_data }
down { get_data }
# without extension:
# => NameError: undefined local variable or method `get_data' for #<Sequel::Postgres::Database>
end
Enable: Sequel::Model.plugin :duplicate
Model plugin for creating a copies.
Example:
User = Sequel::Model(:users)
user1 = User.create(name: "John")
user2 = user1.duplicate(name: "James")
user2.name # => "James"
OR
user2 = User.duplicate(user1, name: "James")
user2.name # => "James"
Enable: Sequel::Model.plugin :get_column_value
Plugin for getting raw column value
Example:
item = Item.first
item.price # => #<Money fractional:5000.0 currency:USD>
item.get_column_value(:amount) # => 0.5e2
Enable: Sequel::Model.plugin :store_accessors
Plugin for using jsonb field keys as model properties.
Example:
class User < Sequel::Model
store :data, :first_name
end
user = User.create(first_name: "John")
user.first_name # => "John"
user.data # => {"first_name": "John"}
Important: requires a synchronize
extension described above.
Same as DB#synchronize_with
Enable:
DB.extension :synchronize
Sequel::Model.plugin :synchronize
Example:
user = User.first
user.synchronize([:ruby, :forever]) { p "Hey, I'm in transaction!"; sleep 5 }
Enable: Sequel::Model.plugin :upsert
Plugin for create an "UPSERT" requests to database.
Example:
User.upsert(name: "John", email: "[email protected]", target: :email)
User.upsert_dataset.insert(name: "John", email: "[email protected]")
Enable: Sequel::Model.plugin :with_lock
Plugin for locking row for update.
Example:
user = User.first
user.with_lock do
user.update(name: "James")
end
Allows to undo a specific migration
Example:
m = Sequel::TimestampMigrator.new(DB, "db/migrations")
m.undo(1549624163) # 1549624163 is a migration version
Also you can use sequel:undo
rake task for it.
Example:
rake sequel:undo VERSION=1549624163
Released under MIT License.
Created by Aleksey Bespalov.