Sha256: d26d4e15d6e182a80bef3ff789f0b993e699926598d2e2453352e0653e0efe90

Contents?: true

Size: 1.91 KB

Versions: 120

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module Avm
  module EacPostgresqlBase0
    class Instance
      class Assert
        common_constructor :instance
        delegate :name, :password, :user, to: :instance

        def perform
          create_user unless user_exist?
          change_password unless password_ok?
          create_database unless database_exist?
          change_owner unless user_owner?
        end

        def change_owner
          root_execute("ALTER DaTABASE \"#{name}\" OWNER TO \"#{user}\"")
        end

        def change_password
          root_execute("ALTER USER \"#{user}\" WITH PASSWORD '#{password}'")
        end

        def create_user
          root_execute("CREATE USER \"#{user}\" WITH PASSWORD '#{password}'")
        end

        def current_owner
          root_query(<<~SQL
            SELECT pg_catalog.pg_get_userbyid(datdba)
            FROM pg_catalog.pg_database
            WHERE datname = '#{name}'
          SQL
                    )
        end

        def database_exist?
          root_boolean_query("FROM pg_database WHERE datname='#{name}'")
        end

        def password_ok?
          instance.psql_command_command('SELECT 1', false)
                  .execute!(exit_outputs: { 512 => 'login_failed' }).strip == '1'
        end

        def user_exist?
          root_boolean_query("FROM pg_roles WHERE rolname='#{user}'")
        end

        def user_owner?
          user == current_owner
        end

        def create_database
          root_execute("CREATE DATABASE \"#{name}\" WITH OWNER \"#{user}\"")
        end

        private

        def root_boolean_query(sql_after_projection)
          root_query("SELECT 1 #{sql_after_projection}") == '1'
        end

        def root_execute(sql)
          instance.root_psql_command(sql).execute!
        end

        def root_query(sql)
          root_execute(sql).strip
        end
      end
    end
  end
end

Version data entries

120 entries across 120 versions & 3 rubygems

Version Path
eac_tools-0.86.2 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.86.1 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.86.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.85.1 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.85.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.84.2 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.84.1 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.84.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.83.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.82.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.81.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.80.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.79.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.78.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.77.1 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.77.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.76.1 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.76.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
eac_tools-0.75.2 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/assert.rb
avm-eac_postgresql_base0-0.5.2 lib/avm/eac_postgresql_base0/instance/assert.rb