Sha256: 84337c44eb6b735d198e46ac0edbca1b963d08bfb990320479d0a1117dc760a6

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

# frozen_string_literal: true

require "sequel"

module Sequel
  def self.json_parser_error_class
    ActiveSupport::JSON.parse_error
  end

  def self.parse_json(json)
    ActiveSupport::JSON.decode(json).deep_symbolize_keys
  end

  class Database
    def log_connection_yield(sql, conn, args = nil, &block)
      return unless @loggers.first
      if conn && log_connection_info
        @loggers.first.tagged(conn.__id__) do
          log_semantic(sql, args, &block)
        end
      else
        log_semantic(sql, args, &block)
      end
    end

    def log_semantic(sql, args)
      return unless @loggers.first
      message = "#{sql}#{"; #{args.inspect}" if args}"
      if log_warn_duration
        @loggers.first.measure_warn(message, min_duration: log_warn_duration) do
          yield
        end
      else
        @loggers.first.measure_debug(message) do
          yield
        end
      end
    end
  end
end

module PUNK
  def self.migration(&block)
    Sequel::MigrationDSL.create(&block)
  end
end

PUNK::Interface.register(:db) do
  PUNK.profile_debug("db_connect", url: PUNK.get.db.url) do
    pg = Sequel.connect(PUNK.get.db.url, logger: SemanticLogger["PUNK::SQL"])
    pg.extension :pg_enum, :pg_range, :pg_array, :pg_json, :pg_row, :pg_timestamptz, :pg_inet
    Sequel.extension :pg_array_ops, :pg_range_ops, :pg_json_ops, :pg_row_ops, :named_timezones, :thread_local_timezones
    pg
  end
end

PUNK.inject :db

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
punk-0.4.1 lib/punk/startup/database.rb