Module: RubyPGExtras

Defined in:
lib/ruby-pg-extras.rb,
lib/ruby-pg-extras/version.rb

Constant Summary collapse

QUERIES =
i(
  bloat blocking cache_hit
  calls extensions table_cache_hit index_cache_hit
  index_size index_usage locks all_locks
  long_running_queries mandelbrot outliers
  records_rank seq_scans table_indexes_size
  table_size total_index_size total_table_size
  unused_indexes vacuum_stats
)
VERSION =
"1.0.0"
@@database_url =
nil

Class Method Summary collapse

Class Method Details

.connectionObject



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/ruby-pg-extras.rb', line 84

def self.connection
  database_uri = URI.parse(database_url)

  @_connection ||= PG.connect(
    dbname: database_uri.path[1..-1],
    host: database_uri.host,
    port: database_uri.port,
    user: database_uri.user,
    password: database_uri.password
  )
end

.database_urlObject



100
101
102
# File 'lib/ruby-pg-extras.rb', line 100

def self.database_url
  @@database_url || ENV.fetch("DATABASE_URL")
end

.database_url=(value) ⇒ Object



96
97
98
# File 'lib/ruby-pg-extras.rb', line 96

def self.database_url=(value)
  @@database_url = value
end

.description_for(query_name:) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/ruby-pg-extras.rb', line 66

def self.description_for(query_name:)
  first_line = File.open(
    sql_path_for(query_name: query_name)
  ) { |f| f.readline }

  first_line[/\/\*(.*?)\*\//m, 1].strip
end

.display_result(result, title:, in_format:) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ruby-pg-extras.rb', line 41

def self.display_result(result, title:, in_format:)
  case in_format
  when :array
    result.values
  when :hash
    result.to_a
  when :raw
    result
  when :display_table
    headings = if result.count > 0
      result[0].keys
    else
      ["No results"]
    end

    puts Terminal::Table.new(
      title: title,
      headings: headings,
      rows: result.values
    )
  else
    raise "Invalid in_format option"
  end
end

.run_query(query_name:, in_format:) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ruby-pg-extras.rb', line 29

def self.run_query(query_name:, in_format:)
  result = connection.exec(
    sql_for(query_name: query_name)
  )

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

.sql_for(query_name:) ⇒ Object



74
75
76
77
78
# File 'lib/ruby-pg-extras.rb', line 74

def self.sql_for(query_name:)
  File.read(
    sql_path_for(query_name: query_name)
  )
end

.sql_path_for(query_name:) ⇒ Object



80
81
82
# File 'lib/ruby-pg-extras.rb', line 80

def self.sql_path_for(query_name:)
  File.join(File.dirname(__FILE__), "/ruby-pg-extras/queries/#{query_name}.sql")
end