class Sequel::ConnectionGuard::DatabaseGuard
An abstraction for safely accessing Sequel
models.
@example Creating a database guard
DB = Sequel::DatabaseGuard.new('postgres://localhost/mydb')
@example Safely accessing the database
users = DB.safe_execute do alive do |db| db[:users].all end dead do [] end end
@example Unsafely accessing the database (raises an exception if connection fails)
DB.force_execute { |db| db[:users].insert(email: 'billikota@example.com', role: 'admin') }
@api public @since 0.1.0
Public Class Methods
@param config [String, Hash] database configuration @param initializer [Proc] code to run upon successful connection
@api public @since 0.1.0
# File lib/sequel/extensions/connection_guard/database_guard.rb, line 32 def initialize(config, &initializer) @connection_guard = ConnectionGuard.new(config, &initializer) end
Public Instance Methods
@param table_name [Symbol] @return [Sequel::ConnectionGuard::Dataset]
@api private @since 0.1.0
# File lib/sequel/extensions/connection_guard/database_guard.rb, line 85 def [](table_name) Dataset.new(@connection_guard, table_name) end
@return [void]
@api private @since 0.1.0
# File lib/sequel/extensions/connection_guard/database_guard.rb, line 93 def disconnect @connection_guard.force_execute(&:disconnect) end
Unsafely access the database. Will fail if connection fails.
@example
DB.force_execute { |db| db[:users].insert(email: 'rustam@example.com') }
@param block [Proc] @raise [Sequel::DatabaseConnectionError] connection failure
@api public @since 0.1.0
# File lib/sequel/extensions/connection_guard/database_guard.rb, line 66 def force_execute(&block) @connection_guard.force_execute(&block) end
A raw connection handle. Intended for use in test environments (e.x. with DatabaseCleaner)
@raise [Sequel::DatabaseConnectionError] if connection is not established
@api public @since 0.1.0
# File lib/sequel/extensions/connection_guard/database_guard.rb, line 76 def raw_handle @connection_guard.raw_handle end
Safely access the database.
@example
users = DB.safe_execute do alive { |db| db[:users].all } dead { [] } end
@param block [Proc]
@api public @since 0.1.0
# File lib/sequel/extensions/connection_guard/database_guard.rb, line 48 def safe_execute(&block) executor = Executor.new executor.instance_eval(&block) @connection_guard.force_execute(&executor.on_alive) rescue Sequel::DatabaseConnectionError executor.on_dead&.call end