prosopite 0.1.6 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77a2d861398e1f7a76cc71705f68d1f7287ca1343b3bd8fcf7e909f941682125
4
- data.tar.gz: 586d0e356edfb83152c538bc4b017d9e8009d6fcd1ba746ec2cf677a97ea7f23
3
+ metadata.gz: f4f17a47aa9ab87c866f3fb9c493d3b5baae8248781346e497b90b3dc23f488d
4
+ data.tar.gz: b9e0e29a7774adb0f8600d8fedeb2de8f9a8149468d216e1ac2e05e587445939
5
5
  SHA512:
6
- metadata.gz: 3c4e9d238b5f10d8f57531d84024758d3a6e05b4b3cefb49317c1576a0cbcf71287bcd77050ddfc073b1f03cdb3a601bb6f33a49f4488f7ab4483f51f19e7af0
7
- data.tar.gz: 3f22640ed22014cd38f47e770de44253314e134192745fc3abf43d14374d815d249929f4e1dd754c46318e579ee40cf1b76ba90aa7009dd18c15f42a642aa39c
6
+ metadata.gz: c143ec186f20ee7e770619074a532f1bec494f2149e572be083eea05ee569ded551611043e22acfbe36e016285081cb43502b6f79e786491eaab4d04900fd47c
7
+ data.tar.gz: 1e5331db9ff3ce75299cd10468ab48341a54d8f451a2487d08646f757a801a193d930c4512991d7b2fec6be3766a34cb80a081cfddef620df6a31dd82c58f25b
data/Gemfile CHANGED
@@ -5,3 +5,4 @@ source "https://rubygems.org"
5
5
  gemspec
6
6
 
7
7
  gem "rake", "~> 13.0"
8
+ gem 'pg_query'
data/Gemfile.lock CHANGED
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prosopite (0.1.5)
5
- pg_query (~> 1.3)
4
+ prosopite (1.0.0)
6
5
 
7
6
  GEM
8
7
  remote: https://rubygems.org/
@@ -44,6 +43,7 @@ DEPENDENCIES
44
43
  activerecord
45
44
  factory_bot
46
45
  minitest
46
+ pg_query
47
47
  prosopite!
48
48
  pry
49
49
  rake (~> 13.0)
data/README.md CHANGED
@@ -97,6 +97,12 @@ Add this line to your application's Gemfile:
97
97
  gem 'prosopite'
98
98
  ```
99
99
 
100
+ If you're **not** using MySQL/MariaDB, you should also add:
101
+
102
+ ```ruby
103
+ gem 'pg_query'
104
+ ```
105
+
100
106
  And then execute:
101
107
 
102
108
  $ bundle install
@@ -120,12 +126,14 @@ Prosopite auto-detection can be enabled on all controllers:
120
126
 
121
127
  ```ruby
122
128
  class ApplicationController < ActionController::Base
123
- before_action do
124
- Prosopite.scan
125
- end
126
-
127
- after_action do
128
- Prosopite.finish
129
+ unless Rails.env.production?
130
+ before_action do
131
+ Prosopite.scan
132
+ end
133
+
134
+ after_action do
135
+ Prosopite.finish
136
+ end
129
137
  end
130
138
  end
131
139
  ```
@@ -186,6 +194,14 @@ Prosopite.scan
186
194
  Prosopite.finish
187
195
  ```
188
196
 
197
+ or
198
+
199
+ ```ruby
200
+ Prosopite.scan do
201
+ <code to scan>
202
+ end
203
+ ```
204
+
189
205
  ## Contributing
190
206
 
191
207
  Bug reports and pull requests are welcome on GitHub at https://github.com/charkost/prosopite.
data/lib/prosopite.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'pg_query'
2
1
 
3
2
  module Prosopite
4
3
  class NPlusOneQueriesError < StandardError; end
@@ -22,6 +21,15 @@ module Prosopite
22
21
  @allow_list ||= []
23
22
 
24
23
  tc[:prosopite_scan] = true
24
+
25
+ if block_given?
26
+ begin
27
+ yield
28
+ finish
29
+ ensure
30
+ tc[:prosopite_scan] = false
31
+ end
32
+ end
25
33
  end
26
34
 
27
35
  def tc
@@ -71,6 +79,12 @@ module Prosopite
71
79
  if ActiveRecord::Base.connection.adapter_name.downcase.include?('mysql')
72
80
  mysql_fingerprint(query)
73
81
  else
82
+ begin
83
+ require 'pg_query'
84
+ rescue LoadError => e
85
+ msg = "Could not load the 'pg_query' gem. Add `gem 'pg_query'` to your Gemfile"
86
+ raise LoadError, msg, e.backtrace
87
+ end
74
88
  PgQuery.fingerprint(query)
75
89
  end
76
90
  end
@@ -100,7 +114,7 @@ module Prosopite
100
114
 
101
115
  query.gsub!(/\btrue\b|\bfalse\b/i, "?")
102
116
 
103
- query.gsub!(/[0-9+-][0-9a-f.xb+-]*/, "?")
117
+ query.gsub!(/[0-9+-][0-9a-f.x+-]*/, "?")
104
118
  query.gsub!(/[xb.+-]\?/, "?")
105
119
 
106
120
  query.strip!
@@ -140,8 +154,8 @@ module Prosopite
140
154
  notifications_str << "\n"
141
155
  end
142
156
 
143
- Rails.logger.warn(notifications_str) if @rails_logger
144
- $stderr.puts(notifications_str) if @stderr_logger
157
+ Rails.logger.warn(red(notifications_str)) if @rails_logger
158
+ $stderr.puts(red(notifications_str)) if @stderr_logger
145
159
 
146
160
  if @prosopite_logger
147
161
  File.open(File.join(Rails.root, 'log', 'prosopite.log'), 'a') do |f|
@@ -152,9 +166,13 @@ module Prosopite
152
166
  raise NPlusOneQueriesError.new(notifications_str) if @raise
153
167
  end
154
168
 
169
+ def red(str)
170
+ str.split("\n").map { |line| "\e[91m#{line}\e[0m" }.join("\n")
171
+ end
172
+
155
173
  def subscribe
156
- tc[:prosopite_subscribed] ||= false
157
- return if tc[:prosopite_subscribed]
174
+ @subscribed ||= false
175
+ return if @subscribed
158
176
 
159
177
  ActiveSupport::Notifications.subscribe 'sql.active_record' do |_, _, _, _, data|
160
178
  sql = data[:sql]
@@ -171,7 +189,7 @@ module Prosopite
171
189
  end
172
190
  end
173
191
 
174
- tc[:prosopite_subscribed] = true
192
+ @subscribed = true
175
193
  end
176
194
  end
177
195
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Prosopite
4
- VERSION = "0.1.6"
4
+ VERSION = "1.0.1"
5
5
  end
data/prosopite.gemspec CHANGED
@@ -24,8 +24,6 @@ Gem::Specification.new do |spec|
24
24
  end
25
25
  spec.require_paths = ["lib"]
26
26
 
27
- spec.add_runtime_dependency 'pg_query', '~> 1.3'
28
-
29
27
  spec.add_development_dependency "pry"
30
28
  spec.add_development_dependency "minitest"
31
29
  spec.add_development_dependency "factory_bot"
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prosopite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mpampis Kostas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-06 00:00:00.000000000 Z
11
+ date: 2021-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: pg_query
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: pry
29
15
  requirement: !ruby/object:Gem::Requirement