Module: RailsSqliteExtras

Defined in:
lib/rails-sqlite-extras.rb,
lib/rails_sqlite_extras/version.rb

Defined Under Namespace

Classes: Railtie

Constant Summary collapse

QUERIES =
i(
  compile_options
  index_size
  integrity_check
  pragma
  sequence_number
  table_size
  total_size
)
VERSION =
"0.1.0"
@@database_url =
nil

Class Method Summary collapse

Class Method Details

.connectionObject



80
81
82
83
84
85
86
# File 'lib/rails-sqlite-extras.rb', line 80

def self.connection
  if (db_url = ENV["RAILS_SQLITE_EXTRAS_DATABASE_URL"])
    ActiveRecord::Base.establish_connection(db_url).lease_connection
  else
    ActiveRecord::Base.connection
  end
end

.database_urlObject



92
93
94
# File 'lib/rails-sqlite-extras.rb', line 92

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

.database_url=(value) ⇒ Object



88
89
90
# File 'lib/rails-sqlite-extras.rb', line 88

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

.description_for(query_name:) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/rails-sqlite-extras.rb', line 68

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



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rails-sqlite-extras.rb', line 37

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



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/rails-sqlite-extras.rb', line 25

def self.run_query(query_name:, in_format:)
  sql = sql_for(query_name: query_name)

  result = connection.execute(sql)

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

.sql_for(query_name:) ⇒ Object



62
63
64
65
66
# File 'lib/rails-sqlite-extras.rb', line 62

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

.sql_path_for(query_name:) ⇒ Object



76
77
78
# File 'lib/rails-sqlite-extras.rb', line 76

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