active-record-query-count 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +126 -0
  3. data/bin/setup +8 -0
  4. data/images/bar_chart.png +0 -0
  5. data/images/html.png +0 -0
  6. data/images/terminal.png +0 -0
  7. data/lib/active_record_query_count/compare/comparator.rb +33 -0
  8. data/lib/active_record_query_count/configuration.rb +12 -0
  9. data/lib/active_record_query_count/middleware.rb +37 -0
  10. data/lib/active_record_query_count/printer/base.rb +42 -0
  11. data/lib/active_record_query_count/printer/console.rb +30 -0
  12. data/lib/active_record_query_count/printer/html.rb +68 -0
  13. data/lib/active_record_query_count/printer/html_compare.rb +64 -0
  14. data/lib/active_record_query_count/printer/templates/bar_chart.js +153 -0
  15. data/lib/active_record_query_count/printer/templates/comparing.html.erb +66 -0
  16. data/lib/active_record_query_count/printer/templates/style.css +41 -0
  17. data/lib/active_record_query_count/printer/templates/template.html.erb +9 -0
  18. data/lib/active_record_query_count/printer/templates/template_base_query_counter.html.erb +51 -0
  19. data/lib/active_record_query_count/printer/templates/template_for_inject.html.erb +64 -0
  20. data/lib/active_record_query_count/recording/base.rb +28 -0
  21. data/lib/active_record_query_count/recording/tracker.rb +40 -0
  22. data/lib/active_record_query_count/version.rb +5 -0
  23. data/lib/active_record_query_count.rb +37 -0
  24. data/scripts_for_testing/example_script_optimize.yaml +217 -0
  25. data/scripts_for_testing/example_script_unoptimize.yaml +142 -0
  26. data/scripts_for_testing/script_compare_html.rb +16 -0
  27. data/scripts_for_testing/script_printer_html.rb +8 -0
  28. data/scripts_for_testing/scripts_console.rb.rb +8 -0
  29. metadata +266 -0
@@ -0,0 +1,41 @@
1
+ #query_counter_report_gem {
2
+ font-family: Arial, sans-serif;
3
+ table {
4
+ width: 100%;
5
+ border-collapse: collapse;
6
+ margin-top: 20px;
7
+
8
+ height: 100%;
9
+ overflow:auto;
10
+ display: block; /* Ensure the table behaves as a block element */
11
+ box-sizing: border-box;
12
+ }
13
+ th, td {
14
+ border: 1px solid #ddd;
15
+ padding: 8px;
16
+ }
17
+ th {
18
+ background-color: #f2f2f2;
19
+ }
20
+ tr:nth-child(even) {
21
+ background-color: #f9f9f9;
22
+ }
23
+ .sub-row {
24
+ background-color: #f9f9f9;
25
+ }
26
+ .center-container {
27
+ text-align: center;
28
+ width: 100%;
29
+ height: 500px;
30
+ }
31
+
32
+ #queryCountChart {
33
+ display: none;
34
+ margin: 0 auto;
35
+ width: 1200px;
36
+ height: 500px;
37
+ }
38
+ #queryTable {
39
+ display: table;
40
+ }
41
+ }
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Query Counter Report</title>
5
+ </head>
6
+ <body>
7
+ <%= render_query_counter_base_div %>
8
+ </body>
9
+ </html>
@@ -0,0 +1,51 @@
1
+ <script>
2
+ <%= js_content %>
3
+ </script>
4
+ <style>
5
+ <%= css_content %>
6
+ </style>
7
+ <div id='query_counter_report_gem'>
8
+ <h2>Query Counter Report</h2>
9
+ <p>Total query count on process: <%= total_query_count %></p>
10
+ <p>The table will show only tables with more than <%= ::ActiveRecordQueryCount::Configuration.ignore_table_count %> queries</p>
11
+ <p>Only the top <%= ::ActiveRecordQueryCount::Configuration.max_locations_per_table %> locations with the most occurrences will be shown.</p>
12
+ <button id="toggleButton" onclick="toggleView()">Show Chart View</button>
13
+ <button id="toggleColumnButton" onclick="toggleColumnContent()">Show SQL</button>
14
+
15
+ <div class="center-container">
16
+ <canvas id="queryCountChart"></canvas>
17
+ </div>
18
+ <table id="queryTable">
19
+ <tr>
20
+ <th>Table</th>
21
+ <th>Total Query Count</th>
22
+ <th id="columnHeader">File Path</th>
23
+ <th>Method</th>
24
+ <th>Location Count</th>
25
+ </tr>
26
+ <% filter_data(data).each do |table, info| %>
27
+ <tr>
28
+ <td rowspan="<%= info[:location].size + 1 %>"><%= table %></td>
29
+ <td rowspan="<%= info[:location].size + 1 %>"><%= info[:count] %></td>
30
+ </tr>
31
+ <% info[:location].each do |loc, detail| %>
32
+ <tr class="sub-row">
33
+ <% match = loc&.match(/^(?<file_path>.*):in.*`(?<method>.*)'$/) %>
34
+ <% file_path = match ? match[:file_path] : loc %>
35
+ <% method = match ? match[:method] : nil %>
36
+ <td class="toggle-content">
37
+ <span class="filepath"><%= file_path %></span>
38
+ <span class="sql" style="display: none;"><%= detail[:sql].gsub('"', '') %></span>
39
+ </td>
40
+ <td class="method-column"><%= method %></td>
41
+ <td><%= detail[:count] %></td>
42
+ </tr>
43
+ <% end %>
44
+ <% end %>
45
+ </table>
46
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
47
+ <script>
48
+ const chartData = <%= chart_data.to_json %>;
49
+ initializeChart(chartData);
50
+ </script>
51
+ </div>
@@ -0,0 +1,64 @@
1
+ <style>
2
+ #query-modal-button {
3
+ position: fixed;
4
+ top: 10px;
5
+ left: 10px;
6
+ z-index: 1000000;
7
+ background-color: #007bff;
8
+ color: white;
9
+ border: none;
10
+ padding: 10px;
11
+ cursor: pointer;
12
+ }
13
+
14
+ #query-modal-button:hover {
15
+ background-color: #0056b3;
16
+ }
17
+
18
+ #modal-close-button {
19
+ background-color: #d9534f;
20
+ color: white;
21
+ border: none;
22
+ padding: 5px;
23
+ cursor: pointer;
24
+ }
25
+
26
+ #modal-close-button:hover {
27
+ background-color: #c9302c;
28
+ }
29
+
30
+ #modal-content-query-count {
31
+ display: none;
32
+ position: fixed;
33
+ top: 10%;
34
+ left: 10%;
35
+ width: 80%;
36
+ height: 700px;
37
+ max-height: 80%;
38
+ background-color: white;
39
+ border: 1px solid #ccc;
40
+ padding: 10px;
41
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
42
+ z-index: 10000000;
43
+ overflow: auto;
44
+ }
45
+
46
+ <%= css_content %>
47
+ </style>
48
+ <script>
49
+ function toggleQueryModal() {
50
+ var modal = document.getElementById('modal-content-query-count');
51
+ if (modal.style.display === 'none' || modal.style.display === '') {
52
+ modal.style.display = 'block';
53
+ } else {
54
+ modal.style.display = 'none';
55
+ }
56
+ }
57
+ </script>
58
+ <div id="query-modal-button">
59
+ <button id="query-modal-button" onclick="toggleQueryModal()">Toggle Query Counter</button>
60
+ </div>
61
+ <div id="modal-content-query-count">
62
+ <button id="modal-close-button" onclick="toggleQueryModal()">Close</button>
63
+ <%= render_query_counter_base_div %>
64
+ </div>
@@ -0,0 +1,28 @@
1
+ module ActiveRecordQueryCount
2
+ module Recording
3
+ module Base
4
+ def start_with_block(printer: :console)
5
+ raise 'Block not given' unless block_given?
6
+
7
+ start_recording
8
+ yield
9
+ end_recording(printer: printer)
10
+ end
11
+
12
+ def start_recording
13
+ tracker.reset_query_count
14
+ tracker.subscribe
15
+ end
16
+
17
+ def end_recording(printer: :console)
18
+ tracker.unsubscribe
19
+ case printer
20
+ when :html
21
+ Printer::Html.new(data: tracker.active_record_query_tracker).print
22
+ when :console
23
+ Printer::Console.new(data: tracker.active_record_query_tracker).print
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ module ActiveRecordQueryCount
2
+ class Tracker
3
+ REGEX_TABLE_SQL = /FROM\s+"(?<table>[^"]+)"/
4
+ attr_accessor :active_record_query_tracker, :subscription
5
+
6
+ def initialize
7
+ reset_query_count
8
+ end
9
+
10
+ # This assums that in the same location of the code it will always be the same sql query
11
+ def reset_query_count
12
+ @active_record_query_tracker = Hash.new do |hash, key|
13
+ hash[key] = { count: 0, location: Hash.new do |loc_hash, loc_key|
14
+ loc_hash[loc_key] = { count: 0, sql: nil }
15
+ end }
16
+ end
17
+ end
18
+
19
+ def subscribe
20
+ return unless subscription.nil?
21
+
22
+ @subscription = ActiveSupport::Notifications.subscribe('sql.active_record') do |_a, _b, _c, _d, payload|
23
+ caller_from_sql = caller
24
+ sql = payload[:sql]
25
+ match = sql.match(REGEX_TABLE_SQL)
26
+ if match.present? && match[:table]
27
+ actual_location = Rails.backtrace_cleaner.clean(caller_from_sql).first
28
+ active_record_query_tracker[match[:table]][:count] += 1
29
+ active_record_query_tracker[match[:table]][:location][actual_location][:count] += 1
30
+ active_record_query_tracker[match[:table]][:location][actual_location][:sql] = sql
31
+ end
32
+ end
33
+ end
34
+
35
+ def unsubscribe
36
+ ActiveSupport::Notifications.unsubscribe(@subscription)
37
+ @subscription = nil
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecordQueryCount
4
+ VERSION = '0.1.1'
5
+ end
@@ -0,0 +1,37 @@
1
+ require 'active_support/notifications'
2
+ require_relative 'active_record_query_count/version'
3
+ require_relative 'active_record_query_count/configuration'
4
+ require_relative 'active_record_query_count/printer/base'
5
+ require_relative 'active_record_query_count/printer/console'
6
+ require_relative 'active_record_query_count/printer/html'
7
+ require_relative 'active_record_query_count/recording/base'
8
+ require_relative 'active_record_query_count/recording/tracker'
9
+ require_relative 'active_record_query_count/compare/comparator'
10
+ require_relative 'active_record_query_count/middleware'
11
+ require_relative 'active_record_query_count/printer/html_compare'
12
+
13
+ module ActiveRecordQueryCount
14
+ extend Recording::Base
15
+ if defined?(Rails::Railtie)
16
+ class QueryTrackerRailtie < Rails::Railtie
17
+ initializer 'active_record_query_count.configure_rails_initialization' do |app|
18
+ app.middleware.use Middleware
19
+ end
20
+ end
21
+ end
22
+
23
+ class << self
24
+ def configure
25
+ yield(Configuration)
26
+ end
27
+
28
+ def tracker
29
+ Thread.current[:query_counter_data] ||= Tracker.new
30
+ end
31
+
32
+ def compare
33
+ comparator = Compare::Comparator.new
34
+ yield(comparator)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,217 @@
1
+ ---
2
+ east_caronberg:
3
+ :count: 1
4
+ :location:
5
+ app/models/east_caronberg.rb:47:in `building_number':
6
+ :count: 1
7
+ :sql: SELECT * FROM east_caronberg
8
+ jerdeburgh:
9
+ :count: 1
10
+ :location:
11
+ app/models/jerdeburgh.rb:13:in `longitude':
12
+ :count: 1
13
+ :sql: SELECT * FROM jerdeburgh
14
+ new_cyrus:
15
+ :count: 1
16
+ :location:
17
+ app/models/new_cyrus.rb:41:in `state':
18
+ :count: 1
19
+ :sql: SELECT * FROM new_cyrus
20
+ lake_tyson:
21
+ :count: 3
22
+ :location:
23
+ app/models/lake_tyson.rb:99:in `state':
24
+ :count: 2
25
+ :sql: SELECT * FROM lake_tyson
26
+ app/models/lake_tyson.rb:66:in `zip_code':
27
+ :count: 1
28
+ :sql: SELECT * FROM lake_tyson
29
+ new_damionview:
30
+ :count: 5
31
+ :location:
32
+ app/models/new_damionview.rb:91:in `zip_code':
33
+ :count: 1
34
+ :sql: SELECT * FROM new_damionview
35
+ app/models/new_damionview.rb:79:in `street_name':
36
+ :count: 1
37
+ :sql: SELECT * FROM new_damionview
38
+ app/models/new_damionview.rb:74:in `street_name':
39
+ :count: 3
40
+ :sql: SELECT * FROM new_damionview
41
+ jermaineshire:
42
+ :count: 18
43
+ :location:
44
+ app/models/jermaineshire.rb:12:in `city':
45
+ :count: 1
46
+ :sql: SELECT * FROM jermaineshire
47
+ app/models/jermaineshire.rb:99:in `street_name':
48
+ :count: 17
49
+ :sql: SELECT * FROM jermaineshire
50
+ kilbacktown:
51
+ :count: 1
52
+ :location:
53
+ app/models/kilbacktown.rb:45:in `latitude':
54
+ :count: 1
55
+ :sql: SELECT * FROM kilbacktown
56
+ south_brock:
57
+ :count: 3
58
+ :location:
59
+ app/models/south_brock.rb:62:in `building_number':
60
+ :count: 1
61
+ :sql: SELECT * FROM south_brock
62
+ app/models/south_brock.rb:63:in `city':
63
+ :count: 2
64
+ :sql: SELECT * FROM south_brock
65
+ lake_arlie:
66
+ :count: 6
67
+ :location:
68
+ app/models/lake_arlie.rb:87:in `longitude':
69
+ :count: 1
70
+ :sql: SELECT * FROM lake_arlie
71
+ app/models/lake_arlie.rb:74:in `city':
72
+ :count: 1
73
+ :sql: SELECT * FROM lake_arlie
74
+ app/models/lake_arlie.rb:54:in `street_name':
75
+ :count: 2
76
+ :sql: SELECT * FROM lake_arlie
77
+ app/models/lake_arlie.rb:43:in `latitude':
78
+ :count: 2
79
+ :sql: SELECT * FROM lake_arlie
80
+ south_mauricio:
81
+ :count: 12
82
+ :location:
83
+ app/models/south_mauricio.rb:83:in `city':
84
+ :count: 4
85
+ :sql: SELECT * FROM south_mauricio
86
+ app/models/south_mauricio.rb:59:in `state':
87
+ :count: 4
88
+ :sql: SELECT * FROM south_mauricio
89
+ app/models/south_mauricio.rb:60:in `longitude':
90
+ :count: 4
91
+ :sql: SELECT * FROM south_mauricio
92
+ east_curtfort:
93
+ :count: 8
94
+ :location:
95
+ app/models/east_curtfort.rb:37:in `longitude':
96
+ :count: 1
97
+ :sql: SELECT * FROM east_curtfort
98
+ app/models/east_curtfort.rb:97:in `city':
99
+ :count: 4
100
+ :sql: SELECT * FROM east_curtfort
101
+ app/models/east_curtfort.rb:56:in `city':
102
+ :count: 3
103
+ :sql: SELECT * FROM east_curtfort
104
+ hudsonborough:
105
+ :count: 60
106
+ :location:
107
+ app/models/hudsonborough.rb:65:in `latitude':
108
+ :count: 4
109
+ :sql: SELECT * FROM hudsonborough
110
+ app/models/hudsonborough.rb:19:in `longitude':
111
+ :count: 4
112
+ :sql: SELECT * FROM hudsonborough
113
+ app/models/hudsonborough.rb:26:in `latitude':
114
+ :count: 26
115
+ :sql: SELECT * FROM hudsonborough
116
+ app/models/hudsonborough.rb:39:in `zip_code':
117
+ :count: 26
118
+ :sql: SELECT * FROM hudsonborough
119
+ port_richmouth:
120
+ :count: 4
121
+ :location:
122
+ app/models/port_richmouth.rb:86:in `street_name':
123
+ :count: 4
124
+ :sql: SELECT * FROM port_richmouth
125
+ north_felica:
126
+ :count: 4
127
+ :location:
128
+ app/models/north_felica.rb:54:in `building_number':
129
+ :count: 4
130
+ :sql: SELECT * FROM north_felica
131
+ east_arnoldfurt:
132
+ :count: 8
133
+ :location:
134
+ app/models/east_arnoldfurt.rb:13:in `building_number':
135
+ :count: 4
136
+ :sql: SELECT * FROM east_arnoldfurt
137
+ app/models/east_arnoldfurt.rb:87:in `latitude':
138
+ :count: 4
139
+ :sql: SELECT * FROM east_arnoldfurt
140
+ new_nga:
141
+ :count: 13
142
+ :location:
143
+ app/models/new_nga.rb:74:in `zip_code':
144
+ :count: 4
145
+ :sql: SELECT * FROM new_nga
146
+ app/models/new_nga.rb:18:in `country':
147
+ :count: 4
148
+ :sql: SELECT * FROM new_nga
149
+ app/models/new_nga.rb:58:in `street_name':
150
+ :count: 1
151
+ :sql: SELECT * FROM new_nga
152
+ app/models/new_nga.rb:43:in `building_number':
153
+ :count: 1
154
+ :sql: SELECT * FROM new_nga
155
+ app/models/new_nga.rb:85:in `longitude':
156
+ :count: 3
157
+ :sql: SELECT * FROM new_nga
158
+ port_allenastad:
159
+ :count: 4
160
+ :location:
161
+ app/models/port_allenastad.rb:95:in `longitude':
162
+ :count: 4
163
+ :sql: SELECT * FROM port_allenastad
164
+ north_tad:
165
+ :count: 4
166
+ :location:
167
+ app/models/north_tad.rb:64:in `street_name':
168
+ :count: 4
169
+ :sql: SELECT * FROM north_tad
170
+ vanmouth:
171
+ :count: 4
172
+ :location:
173
+ app/models/vanmouth.rb:47:in `longitude':
174
+ :count: 4
175
+ :sql: SELECT * FROM vanmouth
176
+ windlerport:
177
+ :count: 4
178
+ :location:
179
+ app/models/windlerport.rb:70:in `state':
180
+ :count: 4
181
+ :sql: SELECT * FROM windlerport
182
+ framiport:
183
+ :count: 1
184
+ :location:
185
+ app/models/framiport.rb:97:in `zip_code':
186
+ :count: 1
187
+ :sql: SELECT * FROM framiport
188
+ wittingborough:
189
+ :count: 1
190
+ :location:
191
+ app/models/wittingborough.rb:47:in `latitude':
192
+ :count: 1
193
+ :sql: SELECT * FROM wittingborough
194
+ burtchester:
195
+ :count: 1
196
+ :location:
197
+ app/models/burtchester.rb:97:in `latitude':
198
+ :count: 1
199
+ :sql: SELECT * FROM burtchester
200
+ renatotown:
201
+ :count: 1
202
+ :location:
203
+ app/models/renatotown.rb:57:in `state':
204
+ :count: 1
205
+ :sql: SELECT * FROM renatotown
206
+ bogisichbury:
207
+ :count: 1
208
+ :location:
209
+ app/models/bogisichbury.rb:94:in `longitude':
210
+ :count: 1
211
+ :sql: SELECT * FROM bogisichbury
212
+ east_clemmiebury:
213
+ :count: 1
214
+ :location:
215
+ app/models/east_clemmiebury.rb:71:in `street_name':
216
+ :count: 1
217
+ :sql: SELECT * FROM east_clemmiebury
@@ -0,0 +1,142 @@
1
+ ---
2
+ east_caronberg:
3
+ :count: 1
4
+ :location:
5
+ app/models/east_caronberg.rb:82:in `zip_code':
6
+ :count: 1
7
+ :sql: SELECT * FROM east_caronberg
8
+ jerdeburgh:
9
+ :count: 1
10
+ :location:
11
+ app/models/jerdeburgh.rb:12:in `latitude':
12
+ :count: 1
13
+ :sql: SELECT * FROM jerdeburgh
14
+ south_brock:
15
+ :count: 2
16
+ :location:
17
+ app/models/south_brock.rb:51:in `latitude':
18
+ :count: 2
19
+ :sql: SELECT * FROM south_brock
20
+ lake_arlie:
21
+ :count: 5
22
+ :location:
23
+ app/models/lake_arlie.rb:31:in `city':
24
+ :count: 1
25
+ :sql: SELECT * FROM lake_arlie
26
+ app/models/lake_arlie.rb:90:in `latitude':
27
+ :count: 2
28
+ :sql: SELECT * FROM lake_arlie
29
+ app/models/lake_arlie.rb:60:in `street_name':
30
+ :count: 2
31
+ :sql: SELECT * FROM lake_arlie
32
+ south_mauricio:
33
+ :count: 2096
34
+ :location:
35
+ app/models/south_mauricio.rb:32:in `city':
36
+ :count: 4
37
+ :sql: SELECT * FROM south_mauricio
38
+ app/models/south_mauricio.rb:46:in `latitude':
39
+ :count: 4
40
+ :sql: SELECT * FROM south_mauricio
41
+ app/models/south_mauricio.rb:86:in `street_name':
42
+ :count: 1082
43
+ :sql: SELECT * FROM south_mauricio
44
+ app/models/south_mauricio.rb:63:in `state':
45
+ :count: 1006
46
+ :sql: SELECT * FROM south_mauricio
47
+ east_curtfort:
48
+ :count: 1086
49
+ :location:
50
+ app/models/east_curtfort.rb:62:in `street_name':
51
+ :count: 1
52
+ :sql: SELECT * FROM east_curtfort
53
+ app/models/east_curtfort.rb:87:in `city':
54
+ :count: 1082
55
+ :sql: SELECT * FROM east_curtfort
56
+ app/models/east_curtfort.rb:29:in `zip_code':
57
+ :count: 3
58
+ :sql: SELECT * FROM east_curtfort
59
+ new_damionview:
60
+ :count: 4
61
+ :location:
62
+ app/models/new_damionview.rb:59:in `longitude':
63
+ :count: 1
64
+ :sql: SELECT * FROM new_damionview
65
+ app/models/new_damionview.rb:22:in `city':
66
+ :count: 3
67
+ :sql: SELECT * FROM new_damionview
68
+ hudsonborough:
69
+ :count: 1424
70
+ :location:
71
+ app/models/hudsonborough.rb:67:in `country':
72
+ :count: 1084
73
+ :sql: SELECT * FROM hudsonborough
74
+ app/models/hudsonborough.rb:69:in `zip_code':
75
+ :count: 288
76
+ :sql: SELECT * FROM hudsonborough
77
+ app/models/hudsonborough.rb:53:in `zip_code':
78
+ :count: 26
79
+ :sql: SELECT * FROM hudsonborough
80
+ app/models/hudsonborough.rb:23:in `city':
81
+ :count: 26
82
+ :sql: SELECT * FROM hudsonborough
83
+ port_richmouth:
84
+ :count: 806
85
+ :location:
86
+ app/models/port_richmouth.rb:49:in `latitude':
87
+ :count: 806
88
+ :sql: SELECT * FROM port_richmouth
89
+ north_felica:
90
+ :count: 1084
91
+ :location:
92
+ app/models/north_felica.rb:46:in `zip_code':
93
+ :count: 1084
94
+ :sql: SELECT * FROM north_felica
95
+ east_arnoldfurt:
96
+ :count: 3173
97
+ :location:
98
+ app/models/east_arnoldfurt.rb:47:in `building_number':
99
+ :count: 4
100
+ :sql: SELECT * FROM east_arnoldfurt
101
+ app/models/east_arnoldfurt.rb:53:in `latitude':
102
+ :count: 3169
103
+ :sql: SELECT * FROM east_arnoldfurt
104
+ new_nga:
105
+ :count: 6204
106
+ :location:
107
+ app/models/new_nga.rb:20:in `zip_code':
108
+ :count: 4
109
+ :sql: SELECT * FROM new_nga
110
+ app/models/new_nga.rb:84:in `latitude':
111
+ :count: 3169
112
+ :sql: SELECT * FROM new_nga
113
+ app/models/new_nga.rb:81:in `country':
114
+ :count: 3018
115
+ :sql: SELECT * FROM new_nga
116
+ app/models/new_nga.rb:62:in `building_number':
117
+ :count: 13
118
+ :sql: SELECT * FROM new_nga
119
+ port_allenastad:
120
+ :count: 1082
121
+ :location:
122
+ app/models/port_allenastad.rb:57:in `street_name':
123
+ :count: 1082
124
+ :sql: SELECT * FROM port_allenastad
125
+ north_tad:
126
+ :count: 2278
127
+ :location:
128
+ app/models/north_tad.rb:48:in `state':
129
+ :count: 2278
130
+ :sql: SELECT * FROM north_tad
131
+ vanmouth:
132
+ :count: 1082
133
+ :location:
134
+ app/models/vanmouth.rb:34:in `country':
135
+ :count: 1082
136
+ :sql: SELECT * FROM vanmouth
137
+ windlerport:
138
+ :count: 4
139
+ :location:
140
+ app/models/windlerport.rb:98:in `city':
141
+ :count: 4
142
+ :sql: SELECT * FROM windlerport
@@ -0,0 +1,16 @@
1
+ require_relative '../lib/active_record_query_count'
2
+ require 'pry-byebug'
3
+
4
+ data_1 = File.read('scripts_for_testing/example_script_unoptimize.yaml')
5
+ data_2 = File.read('scripts_for_testing/example_script_optimize.yaml')
6
+ data_1 = YAML.safe_load(data_1, permitted_classes: [Proc, Symbol])
7
+ data_2 = YAML.safe_load(data_2, permitted_classes: [Proc, Symbol])
8
+ ActiveRecordQueryCount.compare do |comparing|
9
+ comparing.code('First code block') do
10
+ ActiveRecordQueryCount.tracker.instance_variable_set :@active_record_query_tracker, data_1
11
+ end
12
+ comparing.code('Second code block') do
13
+ ActiveRecordQueryCount.tracker.instance_variable_set :@active_record_query_tracker, data_2
14
+ end
15
+ comparing.compare!
16
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../lib/active_record_query_count'
2
+ require 'pry-byebug'
3
+
4
+ data = File.read('scripts_for_testing/example_script_unoptimize.yaml')
5
+ data = YAML.safe_load(data, permitted_classes: [Proc, Symbol])
6
+ ActiveRecordQueryCount.start_with_block(printer: :html) do
7
+ ActiveRecordQueryCount.tracker.instance_variable_set :@active_record_query_tracker, data
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../lib/active_record_query_count'
2
+ require 'pry-byebug'
3
+
4
+ data = File.read('scripts_for_testing/example_script_unoptimize.yaml')
5
+ data = YAML.safe_load(data, permitted_classes: [Proc, Symbol])
6
+ ActiveRecordQueryCount.start_with_block(printer: :console) do
7
+ ActiveRecordQueryCount.tracker.instance_variable_set :@active_record_query_tracker, data
8
+ end