spring_onion 0.2.4 → 1.0.3

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: c1595c8062e3c68c43d22fcdef65de9009563866bc376e6e3fc38ad271be8570
4
- data.tar.gz: fed541d24b204eb19329cd912322c03703ba0783988d6b9549bbd4226ee0b70b
3
+ metadata.gz: 2166dee73cd2b988af04fc4b64f5af17fa096b541cdba15046b0f9da6f7b4496
4
+ data.tar.gz: 4e45a91ae8fbafbad852ad137c9f2a0824a60dedbb6b21b21838f59b41c30592
5
5
  SHA512:
6
- metadata.gz: 16c450c694a7379b03eb2d09652b1189ad96d243a3d0608e7506aa78ea01916f4896b7fbbbf025deeda7bf643c75846d50ae4612197f91b2d979b97a849cce61
7
- data.tar.gz: eaf72fcb1ad6c1fc4ecb76fc7b28bbd7f0e6c4a2921f4c321405c0aca86f8433035fd3b019b28a74fce8827dfce7b5d6608556f73ac90cb821b9cfaf30d83414
6
+ metadata.gz: c7637adc4e70dfbacf589b0036409eed5e92b27fb9cbf9a737771adbf478a99b2cebddef95674396bebeb33dd1c9a46670b600ed455f93f40ea727847c10bd4a
7
+ data.tar.gz: 031403a533541b86a29e95b21ec6fbea2a1efd3706957a583dcd104f997424c6615aa94a5262e2504d0ec46bddfbd99a4e1bcf0894ead7870a937d8c08d3c50b
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.4)
4
+ spring_onion (1.0.3)
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(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
@@ -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,14 +3,14 @@
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
15
  if SpringOnion.enabled && sql =~ /\A\s*SELECT\b/i && SpringOnion.sql_filter.call(sql)
16
16
  trace = SpringOnion.source_filter.call(caller)
@@ -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.4'
4
+ VERSION = '1.0.3'
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.4
4
+ version: 1.0.3
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