spring_onion 0.2.3 → 1.0.2

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: 72b6f835a238acda75a1f45b10f30e79af2ea57f1c65cce762579efb2696aaa3
4
- data.tar.gz: 8980630d0a4c270a5aaed49a1b1b47ec44b6ebf94f9bce8b3ee734427329a4ba
3
+ metadata.gz: d6ebac8b79b898f06004cbaf58cb639d348d37a4936719b8e33854289708aa8a
4
+ data.tar.gz: 5bae8b0d8500ed2ce454194f21ac82833be665c37d338c962ab6152f01572b7d
5
5
  SHA512:
6
- metadata.gz: 0d8c45b21bd448d30149367efbc6e43cdefd58790f403b216c40ff02eae1642fb4b0bf69838591061f12c8db1618e4f2aeeeb08d8c6359db8a0973930a95e94d
7
- data.tar.gz: 2847712ab07bcd40b4115e4efc0190dec21a1a75b500de3b0293f72ba0e121c48c24fe8d6c2f8227be2453d0430af61f8ecd253fa8135b8eec82da2304328616
6
+ metadata.gz: 565ddc62b8def422ec437ce23310ffb86068b41eb17b4225a1a4697865cef384fa9ae991f86fb0abd3ee52d9db139ba0f1114dd12f5abce1aec30fb0ea4e20f3
7
+ data.tar.gz: 6a3258876b6fb9eb7963c4dd937ff909535917f642c956b1f46ac0954a916da202fc406cf4e023506c45bb4bf7821343285a8f5675bf716eb5a9ceb1e1740cee
data/.gitignore CHANGED
@@ -12,3 +12,5 @@
12
12
 
13
13
  # Appraisal Gemfile.lock
14
14
  /gemfiles/*.lock
15
+
16
+ /test.rb
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
- --format documentation
2
1
  --color
3
2
  --require spec_helper
@@ -1,9 +1,12 @@
1
1
  AllCops:
2
2
  Exclude:
3
3
  - "gemfiles/**/*"
4
+ - "test.rb"
4
5
  TargetRubyVersion: 2.5
5
6
  Style/Documentation:
6
7
  Enabled: false
8
+ Style/TrailingCommaInArrayLiteral:
9
+ EnforcedStyleForMultiline: consistent_comma
7
10
  Style/TrailingCommaInHashLiteral:
8
11
  EnforcedStyleForMultiline: consistent_comma
9
12
  Metrics/AbcSize:
@@ -12,6 +15,8 @@ Metrics/CyclomaticComplexity:
12
15
  Enabled: false
13
16
  Metrics/MethodLength:
14
17
  Enabled: false
18
+ Metrics/BlockLength:
19
+ Enabled: false
15
20
  Layout/LineLength:
16
21
  Enabled: false
17
22
 
@@ -2,5 +2,21 @@
2
2
  language: ruby
3
3
  cache: bundler
4
4
  rvm:
5
+ - 2.5.8
5
6
  - 2.6.6
6
- before_install: gem install bundler -v 2.1.2
7
+ - 2.7.1
8
+ gemfile:
9
+ - gemfiles/ar52.gemfile
10
+ - gemfiles/ar60.gemfile
11
+ services:
12
+ - mysql
13
+ env:
14
+ - DATABASE_URL=mysql2://travis@localhost/sakila
15
+ before_install:
16
+ - gem install bundler -v 2.1.2
17
+ - curl -sSfL https://downloads.mysql.com/docs/sakila-db.tar.gz -o - | tar zxf -
18
+ - cd sakila-db
19
+ - mysql < sakila-schema.sql
20
+ - mysql < sakila-data.sql
21
+ script:
22
+ - bundle exec rake
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise 'ar52' do
4
+ gem 'activerecord', '~> 5.2.1'
5
+ end
6
+
7
+ appraise 'ar60' do
8
+ gem 'activerecord', '~> 5.2.1'
9
+ end
@@ -0,0 +1,14 @@
1
+ FROM rubylang/ruby:2.5-bionic
2
+
3
+ RUN apt-get update && \
4
+ apt-get install -y \
5
+ mysql-client \
6
+ libmysqlclient-dev \
7
+ rubygems \
8
+ curl
9
+
10
+ COPY ./ /mnt/
11
+ WORKDIR /mnt
12
+ RUN gem update bundler -f && \
13
+ bundle install && \
14
+ bundle exec appraisal install
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- spring_onion (0.2.3)
4
+ spring_onion (1.0.2)
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)
@@ -83,4 +83,4 @@ DEPENDENCIES
83
83
  spring_onion!
84
84
 
85
85
  BUNDLED WITH
86
- 2.1.2
86
+ 2.1.4
data/README.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # SpringOnion
2
2
 
3
3
  Log MySQL queries with EXPLAIN that may be slow.
4
+
4
5
  Inspired by [MySQLCasualLog.pm](https://gist.github.com/kamipo/839e8a5b6d12bddba539).
5
6
 
7
+ [![Build Status](https://travis-ci.org/winebarrel/spring_onion.svg?branch=master)](https://travis-ci.org/winebarrel/spring_onion)
8
+
6
9
  ## Installation
7
10
 
8
11
  Add this line to your application's Gemfile:
@@ -25,16 +28,15 @@ Or install it yourself as:
25
28
  #!/usr/bin/env ruby
26
29
  require 'active_record'
27
30
  require 'spring_onion'
28
- require 'logger'
29
31
 
30
32
  ActiveRecord::Base.establish_connection(
31
33
  adapter: 'mysql2',
32
34
  username: 'root',
33
- database: 'employees',
35
+ database: 'employees'
34
36
  )
35
37
 
36
38
  SpringOnion.enabled = true # or `SPRING_ONION_ENABLED=1`
37
- SpringOnion.connection = ActiveRecord::Base.connection.raw_connection
39
+ SpringOnion.connection = ActiveRecord::Base.connection.raw_connection # or `SPRING_ONION_DATABASE_URL=mysql2://...`
38
40
  SpringOnion.source_filter_re = //
39
41
 
40
42
  class Employee < ActiveRecord::Base; end
@@ -75,3 +77,10 @@ p Employee.all.to_a.count
75
77
  ]
76
78
  }
77
79
  ```
80
+
81
+ ## Test
82
+
83
+ ```sh
84
+ docker-compose build
85
+ docker-compose run client bundle exec appraisal ar60 rake
86
+ ```
data/Rakefile CHANGED
@@ -2,7 +2,12 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
5
6
 
6
7
  RSpec::Core::RakeTask.new(:spec)
7
8
 
8
- task default: :spec
9
+ RuboCop::RakeTask.new do |task|
10
+ task.options = %w[-c .rubocop.yml]
11
+ end
12
+
13
+ task default: %i[rubocop spec]
@@ -0,0 +1,15 @@
1
+ version: "3.8"
2
+ services:
3
+ client:
4
+ build: .
5
+ environment:
6
+ MYSQL_PING_ATTEMPTS: "10"
7
+ DATABASE_URL: mysql2://root@db/sakila
8
+ volumes:
9
+ - ./:/mnt
10
+ depends_on:
11
+ - db
12
+ db:
13
+ image: budougumi0617/mysql-sakila:5.7
14
+ environment:
15
+ MYSQL_ALLOW_EMPTY_PASSWORD: "1"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake", "~> 12.0"
6
+ gem "rspec", "~> 3.0"
7
+ gem "activerecord", "~> 5.2.1"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake", "~> 12.0"
6
+ gem "rspec", "~> 3.0"
7
+ gem "activerecord", "~> 5.2.1"
8
+
9
+ gemspec path: "../"
@@ -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(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
@@ -28,13 +28,13 @@ module SpringOnion
28
28
  @enabled = (/\A(1|true)\z/i =~ ENV['SPRING_ONION_ENABLED'])
29
29
 
30
30
  @sql_filter_re = ENV['SPRING_ONION_SQL_FILTER_RE'].yield_self do |re|
31
- re ? Regexp.new(re) : //
31
+ re ? Regexp.new(re, Regexp::IGNORECASE) : //
32
32
  end
33
33
 
34
34
  @ignore_sql_filter_re = Regexp.union(
35
35
  [/\binformation_schema\b/].tap do |ary|
36
36
  re = ENV['SPRING_ONION_IGNORE_SQL_FILTER_RE']
37
- ary << Regexp.new(re) if re
37
+ ary << Regexp.new(re, Regexp::IGNORECASE) if re
38
38
  end
39
39
  )
40
40
 
@@ -3,16 +3,16 @@
3
3
  module SpringOnion
4
4
  module Explainer
5
5
  def execute(*args)
6
- _with_explain(args.first) do
6
+ _with_explain(sql: args.first) do
7
7
  super
8
8
  end
9
9
  end
10
10
 
11
11
  private
12
12
 
13
- def _with_explain(sql)
13
+ def _with_explain(sql:)
14
14
  begin
15
- if SpringOnion.enabled && sql =~ /^SELECT\b/ && SpringOnion.sql_filter.call(sql)
15
+ if SpringOnion.enabled && sql =~ /\A\s*SELECT\b/i && SpringOnion.sql_filter.call(sql)
16
16
  trace = SpringOnion.source_filter.call(caller)
17
17
 
18
18
  unless trace.length.zero?
@@ -21,9 +21,11 @@ module SpringOnion
21
21
 
22
22
  exp = conn.query("EXPLAIN #{sql}", as: :hash).to_a
23
23
  exp.each { |r| r.delete('id') }
24
- _validate_explain(exp, sql, trace)
24
+ _validate_explain(sql: sql, exp: exp, trace: trace)
25
25
  end
26
26
  end
27
+ rescue SpringOnion::Error
28
+ raise
27
29
  rescue StandardError => e
28
30
  SpringOnion.logger.error(e)
29
31
  end
@@ -31,7 +33,7 @@ module SpringOnion
31
33
  yield
32
34
  end
33
35
 
34
- def _validate_explain(exp, sql, trace)
36
+ def _validate_explain(sql:, exp:, trace:)
35
37
  warnings = SpringOnion.warnings
36
38
  warning_names_by_index = {}
37
39
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpringOnion
4
- VERSION = '0.2.3'
4
+ VERSION = '1.0.2'
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: 0.2.3
4
+ version: 1.0.2
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-18 00:00:00.000000000 Z
11
+ date: 2020-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -133,11 +133,16 @@ files:
133
133
  - ".rspec"
134
134
  - ".rubocop.yml"
135
135
  - ".travis.yml"
136
+ - Appraisals
137
+ - Dockerfile
136
138
  - Gemfile
137
139
  - Gemfile.lock
138
140
  - LICENSE.txt
139
141
  - README.md
140
142
  - Rakefile
143
+ - docker-compose.yml
144
+ - gemfiles/ar52.gemfile
145
+ - gemfiles/ar60.gemfile
141
146
  - lib/spring_onion.rb
142
147
  - lib/spring_onion/config.rb
143
148
  - lib/spring_onion/error.rb