Module: SqlFootprint

Defined in:
lib/sql_footprint.rb,
lib/sql_footprint/version.rb

Constant Summary collapse

FILENAME =
'footprint.sql'.freeze
NEWLINE =
"\n".freeze
VERSION =
'0.4.1'.freeze

Class Method Summary collapse

Class Method Details

.capture(sql) ⇒ Object



35
36
37
38
# File 'lib/sql_footprint.rb', line 35

def capture sql
  return unless @capture
  @lines << strip_values(sql)
end

.excludeObject



24
25
26
27
28
29
# File 'lib/sql_footprint.rb', line 24

def exclude
  @capture = false
  yield
ensure
  @capture = true
end

.linesObject



31
32
33
# File 'lib/sql_footprint.rb', line 31

def lines
  @lines.sort
end

.startObject



14
15
16
17
# File 'lib/sql_footprint.rb', line 14

def start
  @capture = true
  @lines   = Set.new
end

.stopObject



19
20
21
22
# File 'lib/sql_footprint.rb', line 19

def stop
  @capture = false
  File.write FILENAME, lines.join(NEWLINE)
end

.strip_in_clause_values(sql) ⇒ Object



47
48
49
50
51
# File 'lib/sql_footprint.rb', line 47

def strip_in_clause_values sql
  sql.gsub(/\sIN\s\((.*)\)/) do |_match|
    ' IN (values-redacted)'
  end
end

.strip_integer_values(sql) ⇒ Object



53
54
55
56
57
# File 'lib/sql_footprint.rb', line 53

def strip_integer_values sql
  sql.gsub(/\s\=\s([0-9]+)/) do |_match|
    ' = number-redacted'
  end
end

.strip_string_values(sql) ⇒ Object



59
60
61
62
63
# File 'lib/sql_footprint.rb', line 59

def strip_string_values sql
  sql.gsub(/\s'(.*)\'/) do |_match|
    " 'value-redacted'"
  end
end

.strip_values(sql) ⇒ Object



40
41
42
43
44
45
# File 'lib/sql_footprint.rb', line 40

def strip_values sql
  sql = sql.gsub(/\[\[.*\]\]/, '')
  sql = strip_string_values(sql)
  sql = strip_integer_values(sql)
  strip_in_clause_values(sql)
end