Module: RailsPgExtras

Defined in:
lib/rails-pg-extras.rb,
lib/rails_pg_extras/web.rb,
lib/rails_pg_extras/version.rb,
lib/rails_pg_extras/index_info.rb,
lib/rails_pg_extras/table_info.rb,
lib/rails_pg_extras/configuration.rb,
lib/rails_pg_extras/diagnose_data.rb,
lib/rails_pg_extras/diagnose_print.rb,
lib/rails_pg_extras/index_info_print.rb,
lib/rails_pg_extras/table_info_print.rb

Defined Under Namespace

Modules: Web Classes: Configuration, DiagnoseData, DiagnosePrint, IndexInfo, IndexInfoPrint, Railtie, TableInfo, TableInfoPrint

Constant Summary collapse

QUERIES =
RubyPgExtras::QUERIES
DEFAULT_ARGS =
RubyPgExtras::DEFAULT_ARGS
NEW_PG_STAT_STATEMENTS =
RubyPgExtras::NEW_PG_STAT_STATEMENTS
VERSION =
"4.10.0"

Class Method Summary collapse

Class Method Details

.configurationObject



22
23
24
# File 'lib/rails_pg_extras/configuration.rb', line 22

def self.configuration
  @configuration ||= Configuration.new(Configuration::DEFAULT_CONFIG)
end

.configure {|configuration| ... } ⇒ Object

Yields:



26
27
28
# File 'lib/rails_pg_extras/configuration.rb', line 26

def self.configure
  yield(configuration)
end

.connectionObject



93
94
95
# File 'lib/rails-pg-extras.rb', line 93

def self.connection
  ActiveRecord::Base.connection
end

.diagnose(in_format: :display_table) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rails-pg-extras.rb', line 53

def self.diagnose(in_format: :display_table)
  data = RailsPgExtras::DiagnoseData.call

  if in_format == :display_table
    RailsPgExtras::DiagnosePrint.call(data)
  elsif in_format == :hash
    data
  else
    raise "Invalid 'in_format' argument!"
  end
end

.index_info(args: {}, in_format: :display_table) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rails-pg-extras.rb', line 65

def self.index_info(args: {}, in_format: :display_table)
  data = RailsPgExtras::IndexInfo.call(args[:table_name])

  if in_format == :display_table
    RailsPgExtras::IndexInfoPrint.call(data)
  elsif in_format == :hash
    data
  elsif in_format == :array
    data.map(&:values)
  else
    raise "Invalid 'in_format' argument!"
  end
end

.run_query(query_name:, in_format:, args: {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/rails-pg-extras.rb', line 27

def self.run_query(query_name:, in_format:, args: {})
  if %i(calls outliers).include?(query_name)
    pg_stat_statements_ver = RailsPgExtras.connection.execute("select installed_version from pg_available_extensions where name='pg_stat_statements'")
      .to_a[0].fetch("installed_version", nil)
    if pg_stat_statements_ver != nil
      if Gem::Version.new(pg_stat_statements_ver) < Gem::Version.new(NEW_PG_STAT_STATEMENTS)
        query_name = "#{query_name}_legacy".to_sym
      end
    end
  end

  sql = if (custom_args = DEFAULT_ARGS[query_name].merge(args)) != {}
    RubyPgExtras.sql_for(query_name: query_name) % custom_args
  else
    RubyPgExtras.sql_for(query_name: query_name)
  end

  result = connection.execute(sql)

  RubyPgExtras.display_result(
    result,
    title: RubyPgExtras.description_for(query_name: query_name),
    in_format: in_format
  )
end

.table_info(args: {}, in_format: :display_table) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/rails-pg-extras.rb', line 79

def self.table_info(args: {}, in_format: :display_table)
  data = RailsPgExtras::TableInfo.call(args[:table_name])

  if in_format == :display_table
    RailsPgExtras::TableInfoPrint.call(data)
  elsif in_format == :hash
    data
  elsif in_format == :array
    data.map(&:values)
  else
    raise "Invalid 'in_format' argument!"
  end
end