rails-flog 1.5.0 → 1.6.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: a916ad1e90e6cc5129639360c15c13638e014c5c3ab60ae03e5a68b38f8601e5
4
- data.tar.gz: 271eab7f87be9bb46ffdb028732bd244f76b933b1fe6bda290b199050cdbee68
3
+ metadata.gz: 7bba2152bd153f016c66ba66cebcb387fb2e8578e1fa1ff659f885d48eba0e0a
4
+ data.tar.gz: 1b6784cf98e02d66808f5f087e003dd8af2f69f272845167f2dfc344ab1d0742
5
5
  SHA512:
6
- metadata.gz: 5f8b98fff00f12bb337573c9fe988e65596d6ce76ffd43defc7b5651286675049741b41d6dd03f3da6216e3b68e371f2bce60b1173c8ec3175a0a91be12d98cd
7
- data.tar.gz: cfe53e680ac6ed2d86eee1e30e14350bbdfe00bbb7e9910345aef5b72ee20bb9d6766870d1c7a3747014dbb2758379b7b1447c5f38ba6540e21ec95f8d8de7a5
6
+ metadata.gz: 4f44d36f195e11be261a0a5d7fe0c763b09f24aaafebc23b924a879da39b1f67b6bb2d68e738206f848e4db891db32089d99847f92f5326fff0471ca8fac5687
7
+ data.tar.gz: 7e2bc4c9af5f6134f6ef38eb72484fee8305611e25366fa9283933abf3702455b424cb0877073c89aae26ad86aa74a424ab1faa65bf90ddac03cfba719c8bc83
@@ -0,0 +1,25 @@
1
+ # Current style is easy to confirm SQL.
2
+ Layout/SpaceBeforeComma:
3
+ Exclude:
4
+ - 'test/unit/sql_formattable_test.rb'
5
+
6
+ Metrics/AbcSize:
7
+ Exclude:
8
+ - 'test/**/*'
9
+
10
+ # 80 is too restrict.
11
+ Metrics/LineLength:
12
+ Max: 120
13
+
14
+ Metrics/MethodLength:
15
+ Exclude:
16
+ - 'test/**/*'
17
+
18
+ # This is test code not production.
19
+ Security/Eval:
20
+ Exclude:
21
+ - 'test/unit/params_formattable_test.rb'
22
+
23
+ # method having '?' suffix should return boolean, double negation is very useful.
24
+ Style/DoubleNegation:
25
+ Enabled: false
@@ -7,8 +7,17 @@ rvm:
7
7
  - 2.3
8
8
  - 2.4
9
9
  - 2.5
10
+ - 2.6
10
11
  gemfile:
11
12
  - gemfiles/rails_4_2_x.gemfile
12
13
  - gemfiles/rails_5_0_x.gemfile
13
14
  - gemfiles/rails_5_1_x.gemfile
14
15
  - gemfiles/rails_5_2_x.gemfile
16
+ # FIXME: will remove on dropping Rails 4.2 support
17
+ matrix:
18
+ exclude:
19
+ - gemfile: gemfiles/rails_4_2_x.gemfile
20
+ rvm: 2.6
21
+ before_install:
22
+ - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
23
+ - gem install bundler -v '< 2'
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in rails-flog.gemspec
data/README.md CHANGED
@@ -101,6 +101,10 @@ Flog.configure do |config|
101
101
  config.params_key_count_threshold = 2
102
102
  # If this value is true, nested Hash parameter is formatted coercively in any situation
103
103
  config.force_on_nested_params = false
104
+ # If this value is true, not format query
105
+ config.ignore_query = true
106
+ # If this value is true, not format parameters
107
+ config.ignore_params = true
104
108
  end
105
109
  ```
106
110
 
@@ -112,6 +116,8 @@ end
112
116
  |query_duration_threshold |float |0.0 |
113
117
  |params_key_count_threshold |integer |1 |
114
118
  |force_on_nested_params |boolean |true |
119
+ |ignore_query |boolean |false |
120
+ |ignore_params |boolean |false |
115
121
 
116
122
  ## Disable temporary
117
123
 
@@ -126,7 +132,7 @@ Priority of this feature is higher than configurations.
126
132
 
127
133
  ## Supported versions
128
134
 
129
- - Ruby: 2.3.x, 2.4.x, 2.5.x
135
+ - Ruby: 2.3.x, 2.4.x, 2.5.x, 2.6.x
130
136
  - Rails: 4.2.x, 5.0.x, 5.1.x, 5.2.x
131
137
 
132
138
  ## Contributing
@@ -148,4 +154,5 @@ Priority of this feature is higher than configurations.
148
154
  - v1.3.2 (2014-04-28 JST): Confirm with Rails 4.1
149
155
  - v1.3.3 (2015-11-16 JST): Confirm with Rails 4.2
150
156
  - v1.4.0 (2017-10-01 JST): Compatible for Rails 5.0 and Rails 5.1, and dropped Ruby 1.9.3 support
151
- - v1.5.0 (2018-12-19 JST): Add `sql_indenti` and `sql_in_values_num` options, and dropped eol rails versions.
157
+ - v1.5.0 (2018-12-19 JST): Add `sql_indent` and `sql_in_values_num` options, and dropped eol rails versions.
158
+ - v1.6.0 (2019-07-26 JST): Add `ignore_query` and `ignore_params` options (Thanks @mothule)
data/Rakefile CHANGED
@@ -1,9 +1,11 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ # frozen_string_literal: true
3
2
 
4
- task :default => :test
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+
6
+ task default: :test
5
7
 
6
8
  Rake::TestTask.new do |t|
7
- t.libs << "test"
8
- t.test_files = Dir.glob("test/unit/*_test.rb")
9
+ t.libs << 'test'
10
+ t.test_files = Dir.glob('test/unit/*_test.rb')
9
11
  end
@@ -1,6 +1,7 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- gem "rails", "~>4.2.0"
3
+ source 'https://rubygems.org'
4
4
 
5
- gemspec :path => "../"
5
+ gem 'rails', '~> 4.2.0'
6
6
 
7
+ gemspec path: '../'
@@ -1,5 +1,7 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- gem "rails", "~>5.0.0"
3
+ source 'https://rubygems.org'
4
4
 
5
- gemspec :path => "../"
5
+ gem 'rails', '~>5.0.0'
6
+
7
+ gemspec path: '../'
@@ -1,5 +1,7 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- gem "rails", "~>5.1.0"
3
+ source 'https://rubygems.org'
4
4
 
5
- gemspec :path => "../"
5
+ gem 'rails', '~>5.1.0'
6
+
7
+ gemspec path: '../'
@@ -1,5 +1,7 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- gem "rails", "~>5.2.0"
3
+ source 'https://rubygems.org'
4
4
 
5
- gemspec :path => "../"
5
+ gem 'rails', '~>5.2.0'
6
+
7
+ gemspec path: '../'
@@ -1,5 +1,7 @@
1
- require "flog/version"
2
- require "flog/status"
3
- require "flog/configuration"
4
- require "flog/sql_formattable"
5
- require "flog/params_formattable"
1
+ # frozen_string_literal: true
2
+
3
+ require 'flog/version'
4
+ require 'flog/status'
5
+ require 'flog/configuration'
6
+ require 'flog/sql_formattable'
7
+ require 'flog/params_formattable'
@@ -1,10 +1,15 @@
1
- require "anbt-sql-formatter/rule"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'anbt-sql-formatter/rule'
4
+
5
+ # Flog is root module of this gem
3
6
  module Flog
4
7
  ONELINE_IN_VALUES_NUM = ::AnbtSql::Rule::ONELINE_IN_VALUES_NUM
5
8
 
9
+ # Configuration of this gem.
10
+ # Call `configure` to setup.
6
11
  class Configuration
7
- attr_writer :ignore_cached_query, :force_on_nested_params
12
+ attr_writer :ignore_cached_query, :force_on_nested_params, :ignore_query, :ignore_params
8
13
  attr_accessor :query_duration_threshold, :params_key_count_threshold, :sql_indent, :sql_in_values_num
9
14
 
10
15
  def initialize
@@ -14,24 +19,36 @@ module Flog
14
19
  @force_on_nested_params = true
15
20
  @sql_indent = "\t"
16
21
  @sql_in_values_num = 1
22
+ @ignore_query = false
23
+ @ignore_params = false
17
24
  end
18
25
 
19
26
  def ignore_cached_query?
20
- !!@ignore_cached_query
27
+ !!@ignore_cached_query || @ignore_query
21
28
  end
22
29
 
23
30
  def force_on_nested_params?
24
31
  !!@force_on_nested_params
25
32
  end
26
- end
27
33
 
28
- def self.config
29
- @@config ||= Flog::Configuration.new
34
+ def ignore_query?
35
+ !!@ignore_query
36
+ end
37
+
38
+ def ignore_params?
39
+ !!@ignore_params
40
+ end
30
41
  end
31
42
 
32
- def self.configure
33
- cfg = Flog::Configuration.new
34
- yield(cfg) if block_given?
35
- @@config = cfg
43
+ class << self
44
+ def config
45
+ @config ||= Flog::Configuration.new
46
+ end
47
+
48
+ def configure
49
+ cfg = Flog::Configuration.new
50
+ yield(cfg) if block_given?
51
+ @config = cfg
52
+ end
36
53
  end
37
54
  end
@@ -1,61 +1,70 @@
1
- require "action_controller/log_subscriber"
2
- require "awesome_print"
3
- require "flog/payload_value_shuntable"
1
+ # frozen_string_literal: true
4
2
 
5
- module Flog::ParamsFormattable
6
- include Flog::PayloadValueShuntable
7
- def start_processing(event)
8
- return super(event) unless formattable?(event)
3
+ require 'action_controller/log_subscriber'
4
+ require 'awesome_print'
5
+ require 'flog/payload_value_shuntable'
9
6
 
10
- replaced = replace_params(event.payload[:params])
7
+ module Flog
8
+ # Overrides `inspect` method for formatting itself
9
+ module ParamsInspectOverridable
10
+ def inspect
11
+ "\n#{ai(plain: !ActionController::LogSubscriber.colorize_logging)}"
12
+ end
13
+ end
11
14
 
12
- shunt_payload_value(event.payload, :params, replaced) do
13
- super(event)
15
+ # Overrides `except` method for formatting ecepted params.
16
+ module ParamsExceptOverridable
17
+ def except(*keys)
18
+ excepted = super(*keys)
19
+ excepted.singleton_class.prepend(ParamsInspectOverridable)
20
+ excepted
14
21
  end
15
22
  end
16
23
 
17
- private
18
- def replace_params(params)
19
- return params if params.empty? || !params.respond_to?(:ai)
20
-
21
- replaced = params.dup
22
- class << replaced
23
- alias :original_except :except
24
-
25
- def except(*keys)
26
- excepted = original_except(*keys)
27
- class << excepted
28
- def inspect
29
- "\n#{ai(plain: !ActionController::LogSubscriber.colorize_logging)}"
30
- end
31
- end
32
- excepted
24
+ # ParamsFormattable enables to format request parameters in log.
25
+ module ParamsFormattable
26
+ include Flog::PayloadValueShuntable
27
+ def start_processing(event)
28
+ return super(event) unless formattable?(event)
29
+
30
+ replaced = replace_params(event.payload[:params])
31
+
32
+ shunt_payload_value(event.payload, :params, replaced) do
33
+ super(event)
33
34
  end
34
35
  end
35
- replaced
36
- end
37
36
 
38
- def formattable?(event)
39
- return false unless Flog::Status.params_formattable?
37
+ private
40
38
 
41
- return true if force_format_by_nested_params?(event)
39
+ def replace_params(params)
40
+ return params if params.empty? || !params.respond_to?(:ai)
42
41
 
43
- key_count_over?(event)
44
- end
42
+ replaced = params.dup
43
+ replaced.singleton_class.prepend(ParamsExceptOverridable)
44
+ replaced
45
+ end
45
46
 
46
- def force_format_by_nested_params?(event)
47
- return false unless Flog.config.force_on_nested_params?
47
+ def formattable?(event)
48
+ return false if Flog.config.ignore_params?
49
+ return false unless Flog::Status.params_formattable?
48
50
 
49
- event.payload[:params].values.any? { |value| value.is_a?(Hash) }
50
- end
51
+ return true if force_format_by_nested_params?(event)
51
52
 
52
- def key_count_over?(event)
53
- threshold = Flog.config.params_key_count_threshold.to_i
54
- params = event.payload[:params].except(*ActionController::LogSubscriber::INTERNAL_PARAMS)
55
- params.keys.size > threshold
53
+ key_count_over?(event)
54
+ end
55
+
56
+ def force_format_by_nested_params?(event)
57
+ return false unless Flog.config.force_on_nested_params?
58
+
59
+ event.payload[:params].values.any? { |value| value.is_a?(Hash) }
60
+ end
61
+
62
+ def key_count_over?(event)
63
+ threshold = Flog.config.params_key_count_threshold.to_i
64
+ params = event.payload[:params].except(*ActionController::LogSubscriber::INTERNAL_PARAMS)
65
+ params.keys.size > threshold
66
+ end
56
67
  end
57
68
  end
58
69
 
59
- class ActionController::LogSubscriber
60
- prepend Flog::ParamsFormattable
61
- end
70
+ ActionController::LogSubscriber.prepend(Flog::ParamsFormattable)
@@ -1,20 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Flog
4
+ # PayloadValueShuntable enables to shunt value in payload
2
5
  module PayloadValueShuntable
3
6
  def shunt_payload_value(payload, key, temp_value, &block)
4
7
  return unless block
5
8
 
6
- key_exists = payload.key?(key)
9
+ if payload.key?(key)
10
+ shunt_if_key_already_exists(payload, key, temp_value, block)
11
+ else
12
+ shunt_if_key_not_exist(payload, key, temp_value, block)
13
+ end
14
+ end
15
+
16
+ def shunt_if_key_already_exists(payload, key, temp_value, block)
7
17
  base_value = payload[key]
8
18
  begin
9
19
  payload[key] = temp_value
10
20
  block.call
11
21
  ensure
12
- if key_exists
13
- payload[key] = base_value
14
- else
15
- payload.delete(key)
16
- end
22
+ payload[key] = base_value
17
23
  end
18
24
  end
25
+
26
+ def shunt_if_key_not_exist(payload, key, temp_value, block)
27
+ payload[key] = temp_value
28
+ block.call
29
+ ensure
30
+ payload.delete(key)
31
+ end
19
32
  end
20
33
  end
@@ -1,52 +1,56 @@
1
- require "active_record/log_subscriber"
2
- require "flog/payload_value_shuntable"
1
+ # frozen_string_literal: true
3
2
 
4
- module Flog::SqlFormattable
5
- include Flog::PayloadValueShuntable
3
+ require 'active_record/log_subscriber'
4
+ require 'flog/payload_value_shuntable'
6
5
 
7
- def sql(event)
8
- return super(event) unless formattable?(event)
6
+ module Flog
7
+ # SqlFormattable enables to format SQL log
8
+ module SqlFormattable
9
+ include Flog::PayloadValueShuntable
9
10
 
10
- formatted = format_sql(event.payload[:sql])
11
+ def sql(event)
12
+ return super(event) unless formattable?(event)
11
13
 
12
- shunt_payload_value(event.payload, :sql, "\n#{Flog.config.sql_indent}#{formatted}") do
13
- super(event)
14
+ formatted = format_sql(event.payload[:sql])
15
+
16
+ shunt_payload_value(event.payload, :sql, "\n#{Flog.config.sql_indent}#{formatted}") do
17
+ super(event)
18
+ end
14
19
  end
15
- end
16
20
 
17
- private
21
+ private
18
22
 
19
- def format_sql(sql)
20
- return sql if sql.blank?
23
+ def format_sql(sql)
24
+ return sql if sql.blank?
21
25
 
22
- require "anbt-sql-formatter/formatter"
23
- rule = AnbtSql::Rule.new
24
- rule.keyword = AnbtSql::Rule::KEYWORD_UPPER_CASE
25
- rule.indent_string = Flog.config.sql_indent
26
- rule.in_values_num = Flog.config.sql_in_values_num
27
- %w(count sum).each do |function_name|
28
- rule.function_names << function_name
26
+ require 'anbt-sql-formatter/formatter'
27
+ rule = AnbtSql::Rule.new
28
+ rule.keyword = AnbtSql::Rule::KEYWORD_UPPER_CASE
29
+ rule.indent_string = Flog.config.sql_indent
30
+ rule.in_values_num = Flog.config.sql_in_values_num
31
+ %w[count sum].each do |function_name|
32
+ rule.function_names << function_name
33
+ end
34
+ AnbtSql::Formatter.new(rule).format(sql.squeeze(' '))
29
35
  end
30
- AnbtSql::Formatter.new(rule).format(sql.squeeze(" "))
31
- end
32
36
 
33
- def formattable?(event)
34
- return false unless Flog::Status.sql_formattable?
37
+ def formattable?(event)
38
+ return false if Flog.config.ignore_query?
39
+ return false unless Flog::Status.sql_formattable?
35
40
 
36
- return false if ignore_by_cached_query?(event)
41
+ return false if ignore_by_cached_query?(event)
37
42
 
38
- duration_over?(event)
39
- end
43
+ duration_over?(event)
44
+ end
40
45
 
41
- def ignore_by_cached_query?(event)
42
- (event.payload[:name] == "CACHE" || event.payload[:cached]) && Flog.config.ignore_cached_query?
43
- end
46
+ def ignore_by_cached_query?(event)
47
+ (event.payload[:name] == 'CACHE' || event.payload[:cached]) && Flog.config.ignore_cached_query?
48
+ end
44
49
 
45
- def duration_over?(event)
46
- event.duration >= Flog.config.query_duration_threshold.to_f
50
+ def duration_over?(event)
51
+ event.duration >= Flog.config.query_duration_threshold.to_f
52
+ end
47
53
  end
48
54
  end
49
55
 
50
- class ActiveRecord::LogSubscriber
51
- prepend Flog::SqlFormattable
52
- end
56
+ ActiveRecord::LogSubscriber.prepend(Flog::SqlFormattable)