module Sequel
@api public @since 0.1.0
Constants
- DatabaseGuard
@see
Sequel::ConnectionGuard::DatabaseGuard
@api public @since 0.1.0
Public Class Methods
ModelGuard(ds, &class_body)
click to toggle source
A constructor for model guards.
@param ds [Sequel::ConnectionGuard::Dataset] @param class_body [Proc] Mimics Sequel::Model class body.
@example Creating model guards
DB = Sequel::DatabaseGuard.new('postgres://localhost/mydb') UserGuard = Sequel::ModelGuard(DB[:users]) do many_to_one :cookies, class: 'CookieGuard::RawModel', key: :user_id def admin? role == 'admin' end end CookieGuard = Sequel::ModelGuard(DB[:cookies])
@example Safely accessing a model
users = UserGuard.safe_execute do alive do |model| model.all end dead do [] end end
@example Unsafely accessing a model (raises an exception if connection fails)
cookies = UserGuard.force_execute { |model| model.first!(id: id).cookies }
@api public @since 0.1.0 rubocop:disable Naming/MethodName
Calls superclass method
# File lib/sequel/extensions/connection_guard.rb, line 48 def self.ModelGuard(ds, &class_body) model = ConnectionGuard::ModelGuard.new(ds, &class_body) Class.new.tap do |klass| klass.define_singleton_method(:safe_execute) do |&block| model.safe_execute(&block) end klass.define_singleton_method(:force_execute) do |&block| model.force_execute(&block) end klass.define_singleton_method(:const_missing) do |const_name| if const_name == :RawModel model.raw_model else super(const_name) end end end end