Module: App::Database

Defined in:
lib/app-database.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#dbObject (readonly)

Returns the value of attribute db.



14
15
16
# File 'lib/app-database.rb', line 14

def db
  @db
end

Class Method Details

.connected?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/app-database.rb', line 48

def connected?
  !! ( defined?( Db ) && Db.test_connection )
end

.initObject

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/app-database.rb', line 18

def init
  raise ArgumentError.new("Cfg not found!") if ! defined?( ::Cfg ) || ! Cfg.db || Cfg.db.empty?
  if (! defined? @db ) || ( @db.nil? ) || ( ! @db ) || ( ! @db.test_connection )
    Log.debug{ "БД #{ Cfg.db.database }." }
    Sequel.extension :pg_array, :pg_inet, :pg_json, :pg_json_ops, :pg_array, :pg_array_ops, :pg_row, :pg_hstore, :pg_json_ops
    Sequel::Model.raise_on_save_failure = false
    Sequel::Model.plugin :validation_helpers
    Sequel::Database.extension :pg_inet, :pg_json, :pg_array, :pg_range, :pg_row, :pg_enum
    counter = Cfg.app.tmout.database_start
    begin
      @db = Sequel.connect Cfg.db.to_hash
    rescue Sequel::DatabaseConnectionError => e
      Log.error{"Шо-то с базой: #{ ( e.message.dup ).force_encoding('UTF-8') }"}
      ( counter -= 1 ) > 0 ? ( sleep(1); retry ) : raise
    end
    Sequel::Model.db = @db
    @db.tables.each{ |t| @db.reset_primary_key_sequence t } # Настоящие герои всегда идут в обход
    @db.freeze if Cfg.env == :production
  end
  Kernel.const_set('Db', @db) unless defined?( ::Db )
  return @db
end

.removeObject



41
42
43
44
45
46
# File 'lib/app-database.rb', line 41

def remove
  if defined?( Db )
    Db.disconnect if @db.test_connection
    Kernel.send :remove_const, 'Db'
  end
end