onkcop 0.51.0.1 → 0.52.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98ebeeaf9fdd8e7aec88b437c111120bc0b2b3535dce8148de2cb678f4aea372
4
- data.tar.gz: d3ff27055afeacdf48eeafb9f7ba44ca9232f772b03f8a6a35293d34d893c881
3
+ metadata.gz: dcacadb1be034be9f03284c424f2012e367df69582e230119d4ad03b403a5d2b
4
+ data.tar.gz: b87737a2f5be1d8152459585fb140a151005ec9624c5f49bc812336e39035b92
5
5
  SHA512:
6
- metadata.gz: d0f9d3c5ebf2f5bc16ae9f281418fa357b4a5a8e99e30d2061564d7c68b7adcb704934e3fd4b2ce8ce9aeec5ccab7950c843eb0db399eecb05fb596aa9cce915
7
- data.tar.gz: dd3dda89165695b72873c4cc1892ec6752f6b20aaa5a434b59b4b78e5199056328304edf9739b2a8b31c0b0e8564d575a0157c3f3a3ed03467a14149a0e4e861
6
+ metadata.gz: e292b2682ff77e8d4c07f032542fbd5f1356eda858c3e20cfd41ffd9ed127ade97b0d7f4d41e3dad42937a4041c3a0d8776c3cb40d32847cc3606b3ff83f6283
7
+ data.tar.gz: d24900443c0d954fe777919d84d86dc742728ebb1b572c443a48d0095843266c6faf397fb835d0cafaff751086f4739695f4441b85a8aea1ffb79c6511b96447
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /.rspec_status
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - ruby-head
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # onkcop
2
2
 
3
- ## v0.51.0.1 (2017-10-20)
3
+ ## v0.52.0.0 (2017-12-20)
4
+
5
+ * Update `rubocop` v0.52.0 and `rubocop-rspec` v1.21.0
6
+ * Remove `DisplayCopNames` configuration
7
+ * Enable new `Style/ClassStructure` cop
8
+ * Disalbe `Style/FormatStringToken` cop
9
+ * Change `Layout/SpaceBeforeBlockBraces` cop's empty braces style to `space`
10
+ * Change `Style/RescueStandardError` cop to implicit style
11
+ * Change `RSpec/MultipleExpectations` cop to `AggregateFailuresByDefault` style
12
+ * Exclude `bin/setup`, `bin/update` from `Style/MixinUsage` cop
13
+
14
+
15
+ ## v0.51.0.1 (2017-11-11)
4
16
 
5
17
  * Update `rubocop-rspec` to v1.20.0
6
18
  * Disable new `RSpec/ContextWording` cop
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # onkcop
2
2
  [![Gem Version](https://badge.fury.io/rb/onkcop.svg)](https://badge.fury.io/rb/onkcop)
3
+ [![Build Status](https://travis-ci.org/onk/onkcop.svg?branch=master)](https://travis-ci.org/onk/onkcop)
3
4
 
4
5
  OnkCop is a RuboCop configration gem.
5
6
 
data/Rakefile CHANGED
@@ -1 +1,4 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ RSpec::Core::RakeTask.new(:rspec)
4
+ task :default => [:rspec]
data/config/rspec.yml CHANGED
@@ -32,9 +32,14 @@ RSpec/ImplicitExpect:
32
32
  RSpec/InstanceVariable:
33
33
  Enabled: false
34
34
 
35
- # 強く 1 example 1 assertion の立場は取らないが、多すぎてもツラいので。
35
+ # spec_helper meta[:aggregate_failures] を設定することで
36
+ # aggregate_failures が全ての spec で有効になる。
37
+ #
38
+ # ほぼ MultipleExpectations についてはチェックされなくなる設定なので注意。
39
+ # パフォーマンスの問題さえ無ければ 1 example 1 assertion にしておく方が
40
+ # 読みやすいテストになりやすいので、そこはレビューで担保していく必要がある。
36
41
  RSpec/MultipleExpectations:
37
- Max: 3
42
+ AggregateFailuresByDefault: true
38
43
 
39
44
  # 変に名前つけて呼ぶ方が分かりづらい。
40
45
  # テスト対象メソッドを呼ぶだけの subject 以外を書かないようにする方が効く。
data/config/rubocop.yml CHANGED
@@ -4,10 +4,17 @@ AllCops:
4
4
  - "node_modules/**/*" # rubocop config/default.yml
5
5
  - "vendor/**/*" # rubocop config/default.yml
6
6
  - "db/schema.rb"
7
- DisplayCopNames: true
8
7
 
9
8
  #################### Layout ################################
10
9
 
10
+ # メソッドをグループ分けして書き順を揃えておくと読みやすくなる。
11
+ # 多少のツラミはあるかもしれない。
12
+ # TODO: Categories を調整することで
13
+ # https://github.com/pocke/rubocop-rails-order_model_declarative_methods
14
+ # を再現できそう。
15
+ Layout/ClassStructure:
16
+ Enabled: true
17
+
11
18
  # メソッドチェーンの改行は末尾に . を入れる
12
19
  # REPL に貼り付けた際の暴発を防ぐため
13
20
  Layout/DotPosition:
@@ -37,6 +44,130 @@ Layout/IndentationConsistency:
37
44
  Layout/MultilineMethodCallIndentation:
38
45
  EnforcedStyle: indented_relative_to_receiver
39
46
 
47
+ # デフォルト値がおかしい。
48
+ # v0.52.1 で解消。 see: pull/5263
49
+ Layout/SpaceBeforeBlockBraces:
50
+ EnforcedStyleForEmptyBraces: space
51
+
52
+ #################### Lint ##################################
53
+
54
+ # spec 内では
55
+ # expect { subject }.to change { foo }
56
+ # という書き方をよく行うので () を省略したい。
57
+ # { foo } は明らかに change に紐付く。
58
+ Lint/AmbiguousBlockAssociation:
59
+ Exclude:
60
+ - "spec/**/*"
61
+
62
+ # Style/EmptyCaseCondition と同じく網羅の表現力が empty when を認めた方が高いし、
63
+ # 頻出する対象を最初の when で撥ねるのはパフォーマンス向上で頻出する。
64
+ # また、
65
+ # case foo
66
+ # when 42
67
+ # # nop
68
+ # when 1..100
69
+ # ...
70
+ # end
71
+ # と、下の when がキャッチしてしまう場合等に対応していない。
72
+ # See. http://tech.sideci.com/entry/2016/11/01/105900
73
+ Lint/EmptyWhen:
74
+ Enabled: false
75
+
76
+ # RuntimeError は「特定の Error を定義できない場合」なので、
77
+ # 定義できるエラーは RuntimeError ではなく StandardError を継承する。
78
+ Lint/InheritException:
79
+ EnforcedStyle: standard_error
80
+
81
+ # * 同名のメソッドがある場合にローカル変数に `_` を付ける
82
+ # * 一時変数として `_` を付ける
83
+ # というテクニックは頻出する
84
+ Lint/UnderscorePrefixedVariableName:
85
+ Enabled: false
86
+
87
+ # 子クラスで実装させるつもりで中身が
88
+ # raise NotImplementedError
89
+ # のみのメソッドが引っかかるので。
90
+ # (raise せずに中身が空だと IgnoreEmptyMethods でセーフ)
91
+ Lint/UnusedMethodArgument:
92
+ Enabled: false
93
+
94
+
95
+ #################### Metrics ###############################
96
+
97
+ # 30 まではギリギリ許せる範囲だったけど
98
+ # リリースごとに 3 ずつぐらい下げていきます。20 まで下げたい。
99
+ Metrics/AbcSize:
100
+ Max: 24
101
+
102
+ # Gemfile, Guardfile は DSL 的で基本的に複雑にはならないので除外
103
+ # rake, rspec, environments, routes は巨大な block 不可避なので除外
104
+ # TODO: ExcludedMethods の精査
105
+ Metrics/BlockLength:
106
+ Exclude:
107
+ - "Rakefile"
108
+ - "**/*.rake"
109
+ - "spec/**/*.rb"
110
+ - "Gemfile"
111
+ - "Guardfile"
112
+ - "config/environments/*.rb"
113
+ - "config/routes.rb"
114
+ - "config/routes/**/*.rb"
115
+ - "*.gemspec"
116
+
117
+ # 6 は強すぎるので緩める
118
+ Metrics/CyclomaticComplexity:
119
+ Max: 10
120
+
121
+ # * 警告 120文字
122
+ # * 禁止 160文字
123
+ # のイメージ
124
+ Metrics/LineLength:
125
+ Max: 160
126
+ Exclude:
127
+ - "db/migrate/*.rb"
128
+
129
+ # 20 行超えるのは migration ファイル以外滅多に無い
130
+ Metrics/MethodLength:
131
+ Max: 20
132
+ Exclude:
133
+ - "db/migrate/*.rb"
134
+
135
+ # 分岐の数。ガード句を多用しているとデフォルト 7 だと厳しい
136
+ Metrics/PerceivedComplexity:
137
+ Max: 8
138
+
139
+
140
+ #################### Naming ################################
141
+
142
+ # has_ から始まるメソッドは許可する
143
+ Naming/PredicateName:
144
+ NamePrefixBlacklist:
145
+ - "is_"
146
+ - "have_"
147
+ NamePrefix:
148
+ - "is_"
149
+ - "have_"
150
+
151
+
152
+ #################### Performance ###########################
153
+
154
+ # downcase or upcase しての比較はイディオムの域なので、多少の
155
+ # パフォーマンスの違いがあろうが casecmp に変える意義を感じない
156
+ Performance/Casecmp:
157
+ Enabled: false
158
+
159
+ # 2.4 以降では each_key でも特にパフォーマンスに差が無いので
160
+ # 読みやすさはほとんど変わらないし、書きやすさを取る。
161
+ Performance/HashEachMethods:
162
+ Enabled: false
163
+
164
+
165
+ #################### Security ##############################
166
+
167
+ # 毎回 YAML.safe_load(yaml_str, [Date, Time]) するのは面倒で。。
168
+ Security/YAMLLoad:
169
+ Enabled: false
170
+
40
171
 
41
172
  #################### Style #################################
42
173
 
@@ -118,6 +249,12 @@ Style/EmptyMethod:
118
249
  Style/FormatString:
119
250
  EnforcedStyle: percent
120
251
 
252
+ # strftime("%Y%m%d") の %d で引っかかる false positive がある。
253
+ # また、url escape でも引っかかるらしい。
254
+ # see: pull/5230, issues/5242
255
+ Style/FormatStringToken:
256
+ Enabled: false
257
+
121
258
  # まだ対応するには早い
122
259
  Style/FrozenStringLiteralComment:
123
260
  Enabled: false
@@ -152,6 +289,15 @@ Style/Lambda:
152
289
  Style/MethodCalledOnDoEndBlock:
153
290
  Enabled: true
154
291
 
292
+ # この 2 つは単発で動かすのが分かっているので Object を汚染しても問題ない。
293
+ # spec/dummy は Rails Engine を開発するときに絶対に引っかかるので入れておく。
294
+ Style/MixinUsage:
295
+ Exclude:
296
+ - "bin/setup"
297
+ - "bin/update"
298
+ - "spec/dummy/bin/setup"
299
+ - "spec/dummy/bin/update"
300
+
155
301
  # 1_000_000 と区切り文字が 2 個以上必要になる場合のみ _ 区切りを必須にする
156
302
  # 10_000_00 は許可しない。(これは例えば 10000 ドルをセント単位にする時に便利だが
157
303
  # 頻出しないので foolproof に振る
@@ -186,6 +332,10 @@ Style/RedundantReturn:
186
332
  Style/RedundantSelf:
187
333
  Enabled: false
188
334
 
335
+ # 無指定だと StandardError を rescue するのは常識の範疇なので。
336
+ Style/RescueStandardError:
337
+ EnforcedStyle: implicit
338
+
189
339
  # user&.admin? が、[nil, true, false] の 3 値を返すことに一瞬で気づけず
190
340
  # boolean を返すっぽく見えてしまうので無効に。
191
341
  # user && user.admin? なら短絡評価で nil が返ってくるのが一目で分かるので。
@@ -245,16 +395,16 @@ Style/TrailingCommaInArguments:
245
395
  Style/TrailingCommaInLiteral:
246
396
  EnforcedStyleForMultiline: comma
247
397
 
248
- # 0 <= foo && foo < 5 のように数直線上に並べるのは
249
- # コードを読みやすくするテクニックなので equality_operators_only に。
250
- Style/YodaCondition:
251
- EnforcedStyle: equality_operators_only
252
-
253
398
  # %w() と %i() が見分けづらいので Style/SymbolArray と合わせて無効に。
254
399
  # 書き手に委ねるという意味で、Enabled: false にしています。使っても良い。
255
400
  Style/WordArray:
256
401
  Enabled: false
257
402
 
403
+ # 0 <= foo && foo < 5 のように数直線上に並べるのは
404
+ # コードを読みやすくするテクニックなので equality_operators_only に。
405
+ Style/YodaCondition:
406
+ EnforcedStyle: equality_operators_only
407
+
258
408
  # 条件式で arr.size > 0 が使われた時に
259
409
  # if !arr.empty?
260
410
  # else
@@ -263,125 +413,3 @@ Style/WordArray:
263
413
  # 中身を入れ替えて否定外しても良いんだけど、どちらが例外的な処理なのかが分かりづらくなる。
264
414
  Style/ZeroLengthPredicate:
265
415
  Enabled: false
266
-
267
- #################### Naming ################################
268
-
269
- # has_ から始まるメソッドは許可する
270
- Naming/PredicateName:
271
- NamePrefixBlacklist:
272
- - "is_"
273
- - "have_"
274
- NamePrefix:
275
- - "is_"
276
- - "have_"
277
-
278
- #################### Lint ##################################
279
-
280
- # spec 内では
281
- # expect { subject }.to change { foo }
282
- # という書き方をよく行うので () を省略したい。
283
- # { foo } は明らかに change に紐付く。
284
- Lint/AmbiguousBlockAssociation:
285
- Exclude:
286
- - "spec/**/*"
287
-
288
- # Style/EmptyCaseCondition と同じく網羅の表現力が empty when を認めた方が高いし、
289
- # 頻出する対象を最初の when で撥ねるのはパフォーマンス向上で頻出する。
290
- # また、
291
- # case foo
292
- # when 42
293
- # # nop
294
- # when 1..100
295
- # ...
296
- # end
297
- # と、下の when がキャッチしてしまう場合等に対応していない。
298
- # See. http://tech.sideci.com/entry/2016/11/01/105900
299
- Lint/EmptyWhen:
300
- Enabled: false
301
-
302
- # RuntimeError は「特定の Error を定義できない場合」なので、
303
- # 定義できるエラーは RuntimeError ではなく StandardError を継承する。
304
- Lint/InheritException:
305
- EnforcedStyle: standard_error
306
-
307
- # 無指定だと StandardError を rescue するのは常識の範疇なので。
308
- # https://github.com/bbatsov/rubocop/issues/2943#issuecomment-330498533
309
- # rescue 後に何をするかは Lint/HandleExceptions でチェックするので
310
- # ココで想起させる必要は無さそう。
311
- Lint/RescueWithoutErrorClass:
312
- Enabled: false
313
-
314
- # * 同名のメソッドがある場合にローカル変数に `_` を付ける
315
- # * 一時変数として `_` を付ける
316
- # というテクニックは頻出する
317
- Lint/UnderscorePrefixedVariableName:
318
- Enabled: false
319
-
320
- # 子クラスで実装させるつもりで中身が
321
- # raise NotImplementedError
322
- # のみのメソッドが引っかかるので。
323
- # (raise せずに中身が空だと IgnoreEmptyMethods でセーフ)
324
- Lint/UnusedMethodArgument:
325
- Enabled: false
326
-
327
- #################### Metrics ###############################
328
-
329
- # 30 まではギリギリ許せる範囲だったけど
330
- # リリースごとに 3 ずつぐらい下げていきます。20 まで下げたい。
331
- Metrics/AbcSize:
332
- Max: 24
333
-
334
- # Gemfile, Guardfile は DSL 的で基本的に複雑にはならないので除外
335
- # rake, rspec, environments, routes は巨大な block 不可避なので除外
336
- # TODO: ExcludedMethods の精査
337
- Metrics/BlockLength:
338
- Exclude:
339
- - "Rakefile"
340
- - "**/*.rake"
341
- - "spec/**/*.rb"
342
- - "Gemfile"
343
- - "Guardfile"
344
- - "config/environments/*.rb"
345
- - "config/routes.rb"
346
- - "config/routes/**/*.rb"
347
- - "*.gemspec"
348
-
349
- # 6 は強すぎるので緩める
350
- Metrics/CyclomaticComplexity:
351
- Max: 10
352
-
353
- # * 警告 120文字
354
- # * 禁止 160文字
355
- # のイメージ
356
- Metrics/LineLength:
357
- Max: 160
358
- Exclude:
359
- - "db/migrate/*.rb"
360
-
361
- # 20 行超えるのは migration ファイル以外滅多に無い
362
- Metrics/MethodLength:
363
- Max: 20
364
- Exclude:
365
- - "db/migrate/*.rb"
366
-
367
- # 分岐の数。ガード句を多用しているとデフォルト 7 だと厳しい
368
- Metrics/PerceivedComplexity:
369
- Max: 8
370
-
371
- #################### Performance ###########################
372
-
373
- # downcase or upcase しての比較はイディオムの域なので、多少の
374
- # パフォーマンスの違いがあろうが casecmp に変える意義を感じない
375
- Performance/Casecmp:
376
- Enabled: false
377
-
378
- # 2.4 以降では each_key でも特にパフォーマンスに差が無いので
379
- # 読みやすさはほとんど変わらないし、書きやすさを取る。
380
- Performance/HashEachMethods:
381
- Enabled: false
382
-
383
- #################### Security ##############################
384
-
385
- # 毎回 YAML.safe_load(yaml_str, [Date, Time]) するのは面倒で。。
386
- Security/YAMLLoad:
387
- Enabled: false
@@ -1,3 +1,3 @@
1
1
  module Onkcop
2
- VERSION = "0.51.0.1"
2
+ VERSION = "0.52.0.0"
3
3
  end
data/onkcop.gemspec CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "rubocop", "~> 0.51.0"
23
- spec.add_dependency "rubocop-rspec", ">= 1.20.0"
22
+ spec.add_dependency "rubocop", "~> 0.52.0"
23
+ spec.add_dependency "rubocop-rspec", ">= 1.21.0"
24
24
  spec.add_development_dependency "bundler"
25
25
  spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec"
26
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onkcop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.51.0.1
4
+ version: 0.52.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takafumi ONAKA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-11 00:00:00.000000000 Z
11
+ date: 2017-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.51.0
19
+ version: 0.52.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.51.0
26
+ version: 0.52.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubocop-rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.20.0
33
+ version: 1.21.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.20.0
40
+ version: 1.21.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: OnkCop is a RuboCop configration gem.
70
84
  email:
71
85
  - takafumi.onaka@gmail.com
@@ -75,7 +89,9 @@ extensions: []
75
89
  extra_rdoc_files: []
76
90
  files:
77
91
  - ".gitignore"
92
+ - ".rspec"
78
93
  - ".rubocop.yml"
94
+ - ".travis.yml"
79
95
  - CHANGELOG.md
80
96
  - Gemfile
81
97
  - LICENSE.txt
@@ -112,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
128
  version: '0'
113
129
  requirements: []
114
130
  rubyforge_project:
115
- rubygems_version: 2.6.14
131
+ rubygems_version: 2.7.3
116
132
  signing_key:
117
133
  specification_version: 4
118
134
  summary: OnkCop is a RuboCop configration gem.