spring_onion 1.0.1 → 1.1.0

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: adf8950ce1f2d7c9c7d7c0d41d3472a833d37a046b9aa31848257a879c261c38
4
- data.tar.gz: 23f8d10722ac30ce2a7c0c01236001ecde43c31ec47c81ad2fe0225495282252
3
+ metadata.gz: b2d9e6e733aeeb720b7b7dea0721c11b5892bc88ae8a48cdeec608028c8aae9d
4
+ data.tar.gz: d8f89788023aeb586e6df258c013a970fd28fe3c320741f41b20fd1ff5475d86
5
5
  SHA512:
6
- metadata.gz: 4508747cc4ba4b0f4b2bea885b14877e6f7128afad83d0731cbe87b4160159acf13f39e8872d41c9c49328df80e92026900cde9280f8979de03d979a1d7d168e
7
- data.tar.gz: 1a6634398984d1c7d317ed9685f9df6beca9c1377d564f90c70904aa646c90ef7d9b80586b79ff65d73253b327d1b711fdd7b7639eee10087ba4c2aa35a9d969
6
+ metadata.gz: 79e0052abddb1704f8e0f8d0d1faa4cc9ea180db04fd178917f0100c5857985ed91f219b106574409b447deb7b61efb14a3e9f8f353d15caa643edf592d6d0b0
7
+ data.tar.gz: 9bff4e63e15a9911eccc6d9f4d1614eb55c28e98d055b95f720b4653db7dbc38927c2c263ab95a1508c70f287f4ac20cb75d561a8943a64f81eb4ceb489e791b
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- spring_onion (1.0.1)
4
+ spring_onion (1.1.0)
5
5
  activerecord
6
6
  coderay
7
7
  mysql2
@@ -28,7 +28,7 @@ GEM
28
28
  coderay (1.1.3)
29
29
  concurrent-ruby (1.1.6)
30
30
  diff-lcs (1.4.4)
31
- i18n (1.8.3)
31
+ i18n (1.8.4)
32
32
  concurrent-ruby (~> 1.0)
33
33
  minitest (5.14.1)
34
34
  mysql2 (0.5.3)
data/README.md CHANGED
@@ -36,7 +36,8 @@ ActiveRecord::Base.establish_connection(
36
36
  )
37
37
 
38
38
  SpringOnion.enabled = true # or `SPRING_ONION_ENABLED=1`
39
- SpringOnion.connection = ActiveRecord::Base.connection.raw_connection
39
+ # `SPRING_ONION_DATABASE_URL=mysql2://...`
40
+ # default: SpringOnion.connection = ActiveRecord::Base.connection.raw_connection
40
41
  SpringOnion.source_filter_re = //
41
42
 
42
43
  class Employee < ActiveRecord::Base; end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'logger'
4
- require 'coderay'
4
+
5
5
  require 'active_support'
6
+ require 'coderay'
7
+ require 'mysql2'
6
8
 
7
9
  require 'spring_onion/config'
8
10
  require 'spring_onion/error'
@@ -11,6 +13,12 @@ require 'spring_onion/json_logger'
11
13
  require 'spring_onion/version'
12
14
 
13
15
  ActiveSupport.on_load :active_record do
16
+ if ENV['SPRING_ONION_DATABASE_URL'] && !SpringOnion.connection
17
+ SpringOnion.connection = Mysql2::Client.new(
18
+ ActiveRecord::ConnectionAdapters::ConnectionSpecification::ConnectionUrlResolver.new(ENV['SPRING_ONION_DATABASE_URL']).to_hash
19
+ )
20
+ end
21
+
14
22
  require 'active_record/connection_adapters/abstract_mysql_adapter'
15
23
  ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.prepend SpringOnion::Explainer
16
24
  end
@@ -59,15 +59,16 @@ module SpringOnion
59
59
  idx ? backtrace_lines.slice(idx..-1) : []
60
60
  end
61
61
 
62
- @logger = Logger.new($stdout).tap do |logger|
62
+ @logger = Logger.new(ENV['SPRING_ONION_LOG'] || $stdout).tap do |logger|
63
63
  logger.formatter = lambda do |severity, datetime, _progname, msg|
64
64
  "\n#{self}\t#{severity}\t#{datetime}\t#{msg}\n"
65
65
  end
66
66
  end
67
67
 
68
+ @log_all = (/\A(1|true)\z/i =~ ENV['SPRING_ONION_LOG_ALL'])
68
69
  @trace_len = 3
69
70
  @json_pretty = (/\A(1|true)\z/i =~ ENV['SPRING_ONION_JSON_PRETTY'])
70
- @color = /\A(1|true)\z/i =~ ENV.fetch('SPRING_ONION_COLOR', $stdout.tty?.to_s)
71
+ @color = /\A(1|true)\z/i =~ ENV.fetch('SPRING_ONION_COLOR', @logger.instance_variable_get(:@logdev)&.dev&.tty?&.to_s)
71
72
 
72
73
  class << self
73
74
  attr_accessor :enabled,
@@ -76,6 +77,7 @@ module SpringOnion
76
77
  :sql_filter_re, :ignore_sql_filter_re, :sql_filter,
77
78
  :source_filter_re, :ignore_source_filter_re, :source_filter,
78
79
  :logger,
80
+ :log_all,
79
81
  :trace_len,
80
82
  :json_pretty,
81
83
  :color
@@ -16,18 +16,14 @@ module SpringOnion
16
16
  trace = SpringOnion.source_filter.call(caller)
17
17
 
18
18
  unless trace.length.zero?
19
- conn = SpringOnion.connection
20
- raise SpringOnion::Error, 'MySQL connection is not set' unless conn
21
-
19
+ conn = SpringOnion.connection || raw_connection
22
20
  exp = conn.query("EXPLAIN #{sql}", as: :hash).to_a
23
21
  exp.each { |r| r.delete('id') }
24
22
  _validate_explain(sql: sql, exp: exp, trace: trace)
25
23
  end
26
24
  end
27
- rescue SpringOnion::Error
28
- raise
29
25
  rescue StandardError => e
30
- SpringOnion.logger.error(e)
26
+ SpringOnion.logger.error("#{e}\n\t#{e.backtrace.join("\n\t")}")
31
27
  end
32
28
 
33
29
  yield
@@ -45,7 +41,7 @@ module SpringOnion
45
41
  warning_names_by_index[i] = warning_names unless warning_names.empty?
46
42
  end
47
43
 
48
- return if warning_names_by_index.empty?
44
+ return if !SpringOnion.log_all && warning_names_by_index.empty?
49
45
 
50
46
  SpringOnion::JsonLogger.log(
51
47
  sql: sql,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpringOnion
4
- VERSION = '1.0.1'
4
+ VERSION = '1.1.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spring_onion
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - winebarrel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-19 00:00:00.000000000 Z
11
+ date: 2020-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord