rspec_api_blueprint_matchers 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +33 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +26 -0
- data/.ruby-version +1 -0
- data/Rakefile +2 -1
- data/config/rubocop/.lint_rubocop.yml +749 -0
- data/config/rubocop/.metrics_rubocop.yml +94 -0
- data/config/rubocop/.performance_rubocop.yml +323 -0
- data/config/rubocop/.rails_rubocop.yml +256 -0
- data/config/rubocop/.style_rubocop.yml +2299 -0
- data/docker-compose.yml +17 -0
- data/lib/rspec_api_blueprint_matchers.rb +1 -0
- data/lib/rspec_apib/config.rb +1 -0
- data/lib/rspec_apib/elements/annotation.rb +1 -0
- data/lib/rspec_apib/elements/array.rb +1 -0
- data/lib/rspec_apib/elements/asset.rb +1 -0
- data/lib/rspec_apib/elements/base.rb +11 -10
- data/lib/rspec_apib/elements/category.rb +2 -1
- data/lib/rspec_apib/elements/copy.rb +2 -1
- data/lib/rspec_apib/elements/data_structure.rb +2 -0
- data/lib/rspec_apib/elements/href_variables.rb +3 -2
- data/lib/rspec_apib/elements/http_headers.rb +5 -4
- data/lib/rspec_apib/elements/http_message_payload.rb +3 -2
- data/lib/rspec_apib/elements/http_request.rb +16 -10
- data/lib/rspec_apib/elements/http_response.rb +3 -1
- data/lib/rspec_apib/elements/http_transaction.rb +4 -3
- data/lib/rspec_apib/elements/member.rb +3 -2
- data/lib/rspec_apib/elements/object.rb +2 -1
- data/lib/rspec_apib/elements/parse_result.rb +1 -0
- data/lib/rspec_apib/elements/resource.rb +1 -0
- data/lib/rspec_apib/elements/source_map.rb +1 -0
- data/lib/rspec_apib/elements/string.rb +1 -0
- data/lib/rspec_apib/elements/templated_href.rb +1 -0
- data/lib/rspec_apib/elements/transition.rb +1 -0
- data/lib/rspec_apib/elements.rb +1 -0
- data/lib/rspec_apib/extractors/http_transaction.rb +1 -0
- data/lib/rspec_apib/extractors/resource.rb +1 -0
- data/lib/rspec_apib/extractors.rb +1 -0
- data/lib/rspec_apib/parser.rb +2 -1
- data/lib/rspec_apib/request.rb +7 -10
- data/lib/rspec_apib/response.rb +2 -2
- data/lib/rspec_apib/rspec.rb +4 -3
- data/lib/rspec_apib/transaction_coverage_report.rb +4 -3
- data/lib/rspec_apib/transaction_coverage_validator.rb +4 -3
- data/lib/rspec_apib/transaction_validator.rb +1 -0
- data/lib/rspec_apib/transcluder.rb +2 -2
- data/lib/rspec_apib/version.rb +2 -1
- data/lib/rspec_apib.rb +2 -1
- data/lib/transcluder.rb +1 -0
- data/rspec_api_blueprint_matchers.gemspec +6 -4
- metadata +25 -2
@@ -0,0 +1,94 @@
|
|
1
|
+
# Metrics::AbcSize
|
2
|
+
# (Assignment Branch Condition)
|
3
|
+
#
|
4
|
+
# Checks that the ABC size of methods is not higher thatn the configured maximum
|
5
|
+
|
6
|
+
Metrics/AbcSize:
|
7
|
+
Max: 15
|
8
|
+
|
9
|
+
# Metrics::BlockLength
|
10
|
+
#
|
11
|
+
# Checks if the length of a block exceeds some maximum value.
|
12
|
+
# Comment lines are ignored
|
13
|
+
|
14
|
+
Metrics/BlockLength:
|
15
|
+
CountComments: false
|
16
|
+
Max: 25
|
17
|
+
Exclude:
|
18
|
+
- 'Rakefile'
|
19
|
+
- '**/*.rake'
|
20
|
+
- 'spec/**/*.rb'
|
21
|
+
|
22
|
+
# Metrics::BlockNesting
|
23
|
+
#
|
24
|
+
# Checks for excessive nesting of conditional and looping constructs
|
25
|
+
|
26
|
+
Metrics/BlockNesting:
|
27
|
+
Max: 3
|
28
|
+
|
29
|
+
# Metrics::ClassLength
|
30
|
+
#
|
31
|
+
# Checks if the length of a class exceeds some maximum value.
|
32
|
+
# This can be used to ensure 'one responsibility per class" rule.
|
33
|
+
|
34
|
+
Metrics/ClassLength:
|
35
|
+
CountComments: false
|
36
|
+
Max: 100
|
37
|
+
|
38
|
+
# Metrics::CyclomaticComplexity
|
39
|
+
#
|
40
|
+
# Checks that the cyclomatic complexity of methods is not higher than the configured maximum.
|
41
|
+
# (Cyclomatic complexity is the number of linearly independent paths through a method)
|
42
|
+
|
43
|
+
Metrics/CyclomaticComplexity:
|
44
|
+
Max: 6
|
45
|
+
|
46
|
+
# Metrics::LineLength
|
47
|
+
#
|
48
|
+
# Checks the length of lines in the source code.
|
49
|
+
|
50
|
+
Metrics/LineLength:
|
51
|
+
Max: 160
|
52
|
+
AllowHereDoc: true
|
53
|
+
AllowURI: true
|
54
|
+
URISchemes:
|
55
|
+
-http
|
56
|
+
-https
|
57
|
+
Exclude:
|
58
|
+
- "spec/**/*"
|
59
|
+
- "views/**/*"
|
60
|
+
- "public/**/*"
|
61
|
+
|
62
|
+
# Metrics::MethodLength
|
63
|
+
#
|
64
|
+
# Checks if the length of the method exceeds some maximum value.
|
65
|
+
|
66
|
+
Metrics/MethodLength:
|
67
|
+
CountComments: false
|
68
|
+
Max: 10
|
69
|
+
|
70
|
+
# Metrics::ModuleLength
|
71
|
+
#
|
72
|
+
# Checks if the length of a module exceeds some maximum value.
|
73
|
+
|
74
|
+
Metrics/ModuleLength:
|
75
|
+
CountComments: false
|
76
|
+
Max: 100
|
77
|
+
|
78
|
+
# Metrics::ParameterLists
|
79
|
+
#
|
80
|
+
# Checks for methods with too many parameters.
|
81
|
+
|
82
|
+
Metrics/ParameterLists:
|
83
|
+
Max: 5
|
84
|
+
CountKeywordArgs: true
|
85
|
+
|
86
|
+
|
87
|
+
# Metrics::PerceivedComplexity
|
88
|
+
#
|
89
|
+
# Tries to product a complexity score that's a measure of the complexity
|
90
|
+
# the reader experiences when looking at a method.
|
91
|
+
|
92
|
+
Metrics/PerceivedComplexity:
|
93
|
+
Max: 7
|
94
|
+
|
@@ -0,0 +1,323 @@
|
|
1
|
+
# Performance::CaseWhenSplat
|
2
|
+
#
|
3
|
+
# Place `when` conditions that use splat at the end of the list of `when` branches.
|
4
|
+
#
|
5
|
+
# bad:
|
6
|
+
#
|
7
|
+
# case foo
|
8
|
+
# when *condition
|
9
|
+
# bar
|
10
|
+
# when baz
|
11
|
+
# foobar
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# good:
|
15
|
+
#
|
16
|
+
# case foo
|
17
|
+
# when baz
|
18
|
+
# foobar
|
19
|
+
# when *condition
|
20
|
+
# bar
|
21
|
+
# end
|
22
|
+
|
23
|
+
Performance/CaseWhenSplat:
|
24
|
+
Enabled: true
|
25
|
+
|
26
|
+
# Performance::Casecmp
|
27
|
+
#
|
28
|
+
# Identifies places where a case-insensitive string comparison can better be implemented
|
29
|
+
# using `casecmp`
|
30
|
+
#
|
31
|
+
# bad: str.downcase == 'abc'
|
32
|
+
#
|
33
|
+
# good: str.casecmp('abc').zero?
|
34
|
+
|
35
|
+
Performance/Casecmp:
|
36
|
+
Enabled: true
|
37
|
+
|
38
|
+
# Performance::CompareWithBlock
|
39
|
+
#
|
40
|
+
# Identifies place where `sort{ |a, b| a.foo <=> b.foo }` can be replaced by `sort_by(&:foo)`.
|
41
|
+
# This cop also checks `max` and `min` methods.
|
42
|
+
#
|
43
|
+
# bad: array.sort { |a, b| a.foo <=> b.foo }
|
44
|
+
#
|
45
|
+
# good: array.sort_by(&:foo)
|
46
|
+
|
47
|
+
Performance/CompareWithBlock:
|
48
|
+
Enabled: true
|
49
|
+
|
50
|
+
# Performance::Count
|
51
|
+
#
|
52
|
+
# Identifies usages of `count` on an `Enumerable` that follow calls to `select` or `reject`.
|
53
|
+
# Querying logic can instead be passed to the `count` call.
|
54
|
+
#
|
55
|
+
# Example:
|
56
|
+
# Model.where(id: [1, 2, 3].select { |m| m.method == true }.size
|
57
|
+
# becomes ->
|
58
|
+
# Model.where(id: [1, 2, 3].to_a.count { |m| m.method == true }
|
59
|
+
|
60
|
+
Performance/Count:
|
61
|
+
Enabled: true
|
62
|
+
|
63
|
+
# Performance::Detect
|
64
|
+
#
|
65
|
+
# Identify usages of `select.first`, `select.last`, `find_all.first` and `find_all.last` and
|
66
|
+
# change them to use `detect` instead
|
67
|
+
# `ActiveRecord` compatibility: `ActiveRecord` does not implement a `detect` method and `find`
|
68
|
+
# has its own meaning
|
69
|
+
#
|
70
|
+
# bad:
|
71
|
+
#
|
72
|
+
# [].select { |item| true }.first
|
73
|
+
# [].find_all { |item| true ).last
|
74
|
+
#
|
75
|
+
# good:
|
76
|
+
#
|
77
|
+
# [].detect { |item| true }
|
78
|
+
# [].reverse.detect { |item| true }
|
79
|
+
|
80
|
+
Performance/Detect:
|
81
|
+
Enabled: true
|
82
|
+
|
83
|
+
# Performance::DoubleStartEndWith
|
84
|
+
#
|
85
|
+
# Checks for double `#start_with?` or `#end_with?` calls separated by `||`.
|
86
|
+
#
|
87
|
+
# bad: str.start_with?("a") || str.start_with?(Some::CONST)
|
88
|
+
#
|
89
|
+
# good: str.start_with?("a", Some::CONST)
|
90
|
+
|
91
|
+
Performance/DoubleStartEndWith:
|
92
|
+
Enabled: true
|
93
|
+
|
94
|
+
# Performance::EndWith
|
95
|
+
#
|
96
|
+
# Identifies unnecessary use of a regex where `String#end_with?` would suffice
|
97
|
+
#
|
98
|
+
# bad:
|
99
|
+
#
|
100
|
+
# 'abc' =~ /bc\Z/
|
101
|
+
# 'abc'.match(/bc\Z/)
|
102
|
+
#
|
103
|
+
# good:
|
104
|
+
#
|
105
|
+
# 'abc' =~ /ab/
|
106
|
+
# 'abc' =~ /\w*\Z/
|
107
|
+
|
108
|
+
Performance::EndWith:
|
109
|
+
Enabled: true
|
110
|
+
|
111
|
+
# Performance::FixedSize
|
112
|
+
#
|
113
|
+
# Do not compute the size of statically sized objects.
|
114
|
+
|
115
|
+
Performance::FixedSize:
|
116
|
+
Enabled: true
|
117
|
+
|
118
|
+
# Lint::FlatMap
|
119
|
+
#
|
120
|
+
# Used of identify usages of flatten with map and collect
|
121
|
+
#
|
122
|
+
# bad:
|
123
|
+
#
|
124
|
+
# [1, 2, 3, 4].map { |e| [e, e] }.flatten(1)
|
125
|
+
# [1, 2, 3, 4].collect { |e| [e, e] }.flatten(1)
|
126
|
+
#
|
127
|
+
# good:
|
128
|
+
#
|
129
|
+
# [1, 2, 3, 4].flat_map { |e| [e, e] }
|
130
|
+
# [1, 2, 3, 4].map { |e| [e, e] }.flatten
|
131
|
+
# [1, 2, 3, 4].collect { |e| [e, e] }.flatten
|
132
|
+
|
133
|
+
Performance/FlatMap:
|
134
|
+
Enabled: true
|
135
|
+
|
136
|
+
# Performance::HashEachMethods
|
137
|
+
#
|
138
|
+
# Checks for uses of `each_key` and `each_value` Hash methods.
|
139
|
+
#
|
140
|
+
# bad:
|
141
|
+
#
|
142
|
+
# hash.keys.each { |k| p k }
|
143
|
+
# hash.values.each { |v| p v }
|
144
|
+
#
|
145
|
+
# good:
|
146
|
+
#
|
147
|
+
# hash.each_key { |k| p k }
|
148
|
+
# hash.each_value { |v| p v }
|
149
|
+
|
150
|
+
Performance/HashEachMethods:
|
151
|
+
Enabled: true
|
152
|
+
|
153
|
+
# Performance::LstripRstrip
|
154
|
+
#
|
155
|
+
# Identifies places where `lstrip.rstrip` can be replaced by `strip`
|
156
|
+
#
|
157
|
+
# bad:
|
158
|
+
#
|
159
|
+
# 'abc'.lstrip.rstrip
|
160
|
+
# 'abc'.rstrip.lstrip
|
161
|
+
#
|
162
|
+
# good:
|
163
|
+
#
|
164
|
+
# 'abc'.strip
|
165
|
+
|
166
|
+
Performance/LstripRstrip:
|
167
|
+
Enabled: true
|
168
|
+
|
169
|
+
# Performance::RangeInclude
|
170
|
+
#
|
171
|
+
# Identifies uses of `Range#include?`, which iterates over each item in a `Range`
|
172
|
+
# to see if a specified item is there. `Range#cover?` simply compares the target item
|
173
|
+
# with the beginning and end points of the `Range`.
|
174
|
+
#
|
175
|
+
# Example: ('a'..'z').cover?('yellow')
|
176
|
+
|
177
|
+
Performance/RangeInclude:
|
178
|
+
Enabled: true
|
179
|
+
|
180
|
+
# Performance::RedundantBlockCall
|
181
|
+
#
|
182
|
+
# Identifies the use of a `&block` parameter and `block.call` where `yield` would do just as well.
|
183
|
+
#
|
184
|
+
# bad:
|
185
|
+
#
|
186
|
+
# def method(&block)
|
187
|
+
# block.call
|
188
|
+
# end
|
189
|
+
#
|
190
|
+
# good:
|
191
|
+
#
|
192
|
+
# def method
|
193
|
+
# yield
|
194
|
+
# end
|
195
|
+
|
196
|
+
Performance/RedundantBlockCall:
|
197
|
+
Enabled: true
|
198
|
+
|
199
|
+
# Performance::RedundantMatch
|
200
|
+
#
|
201
|
+
# Identifies use of `Regexp#match` or `String#match` in a context where the integral return
|
202
|
+
# value of `=~` would do just well
|
203
|
+
#
|
204
|
+
# bad:
|
205
|
+
#
|
206
|
+
# do_something if str.match(/regex/)
|
207
|
+
# while regex.match('str')
|
208
|
+
# do_something
|
209
|
+
# end
|
210
|
+
#
|
211
|
+
# good:
|
212
|
+
#
|
213
|
+
# method(str.match(/regex/)
|
214
|
+
# return regex.match('str')
|
215
|
+
|
216
|
+
Performance/RedundantMatch:
|
217
|
+
Enabled: true
|
218
|
+
|
219
|
+
# Performance::RedundantMerge
|
220
|
+
#
|
221
|
+
# Identifies places where `Hash#merge!` can be replaced by `Hash#[]=`.
|
222
|
+
#
|
223
|
+
# Examples:
|
224
|
+
#
|
225
|
+
# hash.merge!(a: 1)
|
226
|
+
# hash.merge!({key: 'value'})
|
227
|
+
# hash.merge1({ :a => 1, :b=> 2})
|
228
|
+
|
229
|
+
Performance/RedundantMerge:
|
230
|
+
Enabled: false
|
231
|
+
|
232
|
+
# Performance::RedundantSortBy
|
233
|
+
#
|
234
|
+
# Identifies places where `sort_by{ ... }` can be replaced by `sort`.
|
235
|
+
#
|
236
|
+
# bad:
|
237
|
+
#
|
238
|
+
# array.sort_by { |x| x }
|
239
|
+
# array.sort_by do |var|
|
240
|
+
# var
|
241
|
+
# end
|
242
|
+
#
|
243
|
+
# good:
|
244
|
+
#
|
245
|
+
# array.sort
|
246
|
+
|
247
|
+
Performance/RedundantSortBy:
|
248
|
+
Enabled: true
|
249
|
+
|
250
|
+
# Performance::ReverseEach
|
251
|
+
#
|
252
|
+
# Identify usages of `reverse.each` and change them to use `reverse_each` instead.
|
253
|
+
#
|
254
|
+
# bad: [].reverse.each
|
255
|
+
#
|
256
|
+
# good: [].reverse_each
|
257
|
+
|
258
|
+
Performance/ReverseEach:
|
259
|
+
Enabled: true
|
260
|
+
|
261
|
+
# Performance::Sample
|
262
|
+
#
|
263
|
+
# Identify usages of `shuffle.first`, `shuffle.last` and `shuffle[]` and change them to
|
264
|
+
# use `sample` instead
|
265
|
+
#
|
266
|
+
# bad: [1, 2, 3].shuffle.first
|
267
|
+
#
|
268
|
+
# good: [1, 2, 3].sample
|
269
|
+
|
270
|
+
Performance/Sample:
|
271
|
+
Enabled: true
|
272
|
+
|
273
|
+
# Performance::Size
|
274
|
+
#
|
275
|
+
# Identify usages of `count` on an `Array` and `Hash` and change them to `size`.
|
276
|
+
#
|
277
|
+
# bad: [1, 2, 3].count
|
278
|
+
#
|
279
|
+
# good: [1, 2, 3].size
|
280
|
+
|
281
|
+
Performance/Size:
|
282
|
+
Enabled: true
|
283
|
+
|
284
|
+
# Performance::StartWith
|
285
|
+
#
|
286
|
+
# Identifies unnecessary use of a regex where `String#start_with?` would suffice
|
287
|
+
#
|
288
|
+
# bad: 'abc' =~ /\Aab/
|
289
|
+
#
|
290
|
+
# good: 'abc' =~ /ab/
|
291
|
+
|
292
|
+
Performance/StartWith:
|
293
|
+
Enabled: true
|
294
|
+
|
295
|
+
# Performance::StringReplacement
|
296
|
+
#
|
297
|
+
# Identifies places where `gsub` can be replaced by `tr` or `delete`
|
298
|
+
#
|
299
|
+
# bad: 'abc'.gsub('b', 'd')
|
300
|
+
#
|
301
|
+
# good: 'abc'.tr('b', 'd')
|
302
|
+
|
303
|
+
Performance/StringReplacement:
|
304
|
+
Enabled: true
|
305
|
+
|
306
|
+
# Performance::TimesMap
|
307
|
+
#
|
308
|
+
# Checks for .times.map calls. In most cases this can be replaced with an explicit array creation.
|
309
|
+
#
|
310
|
+
# bad:
|
311
|
+
#
|
312
|
+
# 9.times.map do |i|
|
313
|
+
# i.to_s
|
314
|
+
# end
|
315
|
+
#
|
316
|
+
# good:
|
317
|
+
#
|
318
|
+
# Array.new(9) do |i|
|
319
|
+
# i.to_s
|
320
|
+
# end
|
321
|
+
|
322
|
+
Performance/TimesMap:
|
323
|
+
Enabled: true
|
@@ -0,0 +1,256 @@
|
|
1
|
+
Rails:
|
2
|
+
Enabled: true
|
3
|
+
|
4
|
+
# Rails::ActionFilter
|
5
|
+
#
|
6
|
+
# Enforces the consistent use of action filter methods.
|
7
|
+
# This is configurable and can enforce user of
|
8
|
+
# older something_filter methods of newer something_action methods
|
9
|
+
|
10
|
+
Rails/ActionFilter:
|
11
|
+
EnforcedStyle: action
|
12
|
+
|
13
|
+
# Rails::Date
|
14
|
+
#
|
15
|
+
# Checks for the correct use of Date methods
|
16
|
+
#
|
17
|
+
# bad:
|
18
|
+
#
|
19
|
+
# Date.today
|
20
|
+
# date.to_time
|
21
|
+
|
22
|
+
Rails/Date:
|
23
|
+
EnforcedStyle: flexible
|
24
|
+
|
25
|
+
# Rails::Delegate
|
26
|
+
#
|
27
|
+
# Looks for delegations, that could have been created automatically with delegate method
|
28
|
+
#
|
29
|
+
# bad:
|
30
|
+
#
|
31
|
+
# def bar
|
32
|
+
# foo.bar
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# good:
|
36
|
+
#
|
37
|
+
# delegate :bar, to: :foo
|
38
|
+
#
|
39
|
+
|
40
|
+
Rails/Delegate:
|
41
|
+
Enabled: true
|
42
|
+
|
43
|
+
# Rails::DelegateAllowBlank
|
44
|
+
#
|
45
|
+
# Looks for delegations that pass :allow_blank as an option instead of :allow_nil.
|
46
|
+
|
47
|
+
Rails/DelegateAllowBlank:
|
48
|
+
Enabled: true
|
49
|
+
|
50
|
+
# Rails::DynamicFindBy
|
51
|
+
#
|
52
|
+
# Checks dynamic `find_by_*` methods. Use `find_by` instead of dynamic method.
|
53
|
+
# (When retrieve a single record by some attributes, prefer `find_by`)
|
54
|
+
# For more info: https://github.com/bbatsov/rails-style-guide#find_by
|
55
|
+
#
|
56
|
+
# bad: User.find_by_name(name)
|
57
|
+
#
|
58
|
+
# good: User.find_by(name: name)
|
59
|
+
#
|
60
|
+
|
61
|
+
Rails/DynamicFindBy:
|
62
|
+
Whitelist:
|
63
|
+
- find_by_sql
|
64
|
+
|
65
|
+
# Rails::EnumUniqueness
|
66
|
+
#
|
67
|
+
# Looks for duplicate values in enum decorations.
|
68
|
+
#
|
69
|
+
# bad: enum status { active: 0, archived: 0 }
|
70
|
+
#
|
71
|
+
# good: enum status { active: 0, archived: 1 }
|
72
|
+
|
73
|
+
Rails/EnumUniqueness:
|
74
|
+
Enabled: true
|
75
|
+
|
76
|
+
# Rails::Exit
|
77
|
+
#
|
78
|
+
# Enforces that 'exit' calls are not used withing a rails app.
|
79
|
+
|
80
|
+
Rails/Exit:
|
81
|
+
Enabled: true
|
82
|
+
|
83
|
+
# Rails::FindBy
|
84
|
+
#
|
85
|
+
# Used to identify usages of `where.first` and change them to use `find_by` instead
|
86
|
+
#
|
87
|
+
# bad: User.where(name: 'Prasanna').first
|
88
|
+
#
|
89
|
+
# good: User.find_by(name: 'Prasanna')
|
90
|
+
|
91
|
+
Rails/FindBy:
|
92
|
+
Enabled: true
|
93
|
+
|
94
|
+
# Rails::FindEach
|
95
|
+
#
|
96
|
+
# Used to identify usages of `all.each` and change them to use `all.find_each` instead.
|
97
|
+
#
|
98
|
+
# bad: User.all.each
|
99
|
+
#
|
100
|
+
# good: User.all.find_each
|
101
|
+
|
102
|
+
Rails/FindEach:
|
103
|
+
Enabled: true
|
104
|
+
|
105
|
+
# Rails::HasAndBelongsToMany
|
106
|
+
#
|
107
|
+
# Checks for the use of the has_and_belongs_to_many macro
|
108
|
+
# Prefer 'has_many :through'
|
109
|
+
|
110
|
+
Rails/HasAndBelongsToMany:
|
111
|
+
Enabled: true
|
112
|
+
|
113
|
+
# Rails::HttpPositionalArguments
|
114
|
+
#
|
115
|
+
# Identifies usages of http methods like 'get', 'post', 'put', 'path' without the usage
|
116
|
+
# of keyword arguments in tests and change them to keyword arguments.
|
117
|
+
#
|
118
|
+
# bad: get :new, { user_id: 1 }
|
119
|
+
#
|
120
|
+
# good: get :new, params: { user_id: 1 }
|
121
|
+
|
122
|
+
Rails/HttpPositionalArugments:
|
123
|
+
Enabled: false
|
124
|
+
|
125
|
+
# Rails::NotNullColumn
|
126
|
+
#
|
127
|
+
# Checks for add_column call with NOT NULL constraint in migration file.
|
128
|
+
#
|
129
|
+
# bad: add_column :users, :name, :string, null: false
|
130
|
+
#
|
131
|
+
# good: add_column :users, :name, :string, null: false, default: ''
|
132
|
+
|
133
|
+
Rails/NotNullColumn:
|
134
|
+
Enabled: false
|
135
|
+
|
136
|
+
# Rails::Output
|
137
|
+
#
|
138
|
+
# Checks for the use of output calls like print and puts
|
139
|
+
|
140
|
+
Rails/Output:
|
141
|
+
Enabled: true
|
142
|
+
|
143
|
+
# Rails::OutputSafety
|
144
|
+
#
|
145
|
+
# Checks for the use of output safety calls like html_safe and raw
|
146
|
+
#
|
147
|
+
# bad: "<p>#{text}></p>".html_safe
|
148
|
+
#
|
149
|
+
# good: content_tag(:p, text)
|
150
|
+
|
151
|
+
Rails/OutputSafety:
|
152
|
+
Enabled: true
|
153
|
+
|
154
|
+
# Rails::PluralizationGrammar
|
155
|
+
#
|
156
|
+
# Checks for correct grammar when using ActiveSupport`s core extensions to the numeric classes.
|
157
|
+
#
|
158
|
+
# bad:
|
159
|
+
#
|
160
|
+
# 3.day.ago
|
161
|
+
# 1.months.ago
|
162
|
+
#
|
163
|
+
# good:
|
164
|
+
#
|
165
|
+
# 3.days.ago
|
166
|
+
# 1.month.ago
|
167
|
+
|
168
|
+
Rails/PluralizationGrammar:
|
169
|
+
Enabled: true
|
170
|
+
|
171
|
+
# Rails::ReadWriteGrammar
|
172
|
+
#
|
173
|
+
# Checks for the use of the read_attribute or write_attribute methods.
|
174
|
+
#
|
175
|
+
# bad:
|
176
|
+
#
|
177
|
+
# x = read_attribute(:attr)
|
178
|
+
# write_attribute(:attr, val)
|
179
|
+
#
|
180
|
+
# good:
|
181
|
+
#
|
182
|
+
# x = self[:attr]
|
183
|
+
# self[:attr] = val
|
184
|
+
|
185
|
+
Rails/ReadWriteGrammer:
|
186
|
+
Enabled: true
|
187
|
+
|
188
|
+
# Rails::RequestReferrer
|
189
|
+
#
|
190
|
+
# Checks for consistent uses of request.referrer
|
191
|
+
|
192
|
+
Rails/ReadWriteGrammer:
|
193
|
+
EnforcedStyle: referer
|
194
|
+
|
195
|
+
# Rails::SafeNavigation
|
196
|
+
#
|
197
|
+
# Converts usages of `try!` to `&.`. It can also be configured to convert `try`.
|
198
|
+
# It will convert code to use navigation if the target Ruby version is set to 2.3+
|
199
|
+
|
200
|
+
Rails/SafeNavigation:
|
201
|
+
ConvertTry: false
|
202
|
+
|
203
|
+
# Rails::SafeBang
|
204
|
+
#
|
205
|
+
# Identifies possible cases where Active Record save! or related should be used
|
206
|
+
# instead of save because the model might have failed to save and an excpetion is better
|
207
|
+
# then unhandled failure
|
208
|
+
#
|
209
|
+
# bad: user.save
|
210
|
+
#
|
211
|
+
# good: user.save!
|
212
|
+
|
213
|
+
Rails/SafeBang:
|
214
|
+
Enabled: true
|
215
|
+
|
216
|
+
# Rails::ScopeArgs
|
217
|
+
#
|
218
|
+
# Checks for scope class where it was passed a method (usually a scope) instead of a lambda/proc.
|
219
|
+
#
|
220
|
+
# bad: scope :something, where(something: true)
|
221
|
+
#
|
222
|
+
# good: scope :something, -> { where(something: true) }
|
223
|
+
|
224
|
+
Rails/ScopeArgs:
|
225
|
+
Enabled: true
|
226
|
+
|
227
|
+
# Rails::Timezone
|
228
|
+
#
|
229
|
+
# Checks for the use of Time methods without zone
|
230
|
+
#
|
231
|
+
# bad:
|
232
|
+
#
|
233
|
+
# Time.now
|
234
|
+
# Time.parse('2015-03-02 19:05:37')
|
235
|
+
|
236
|
+
Rails/Timezone:
|
237
|
+
EnforcedStyle: flexible
|
238
|
+
|
239
|
+
# Rails::UniqBeforePluck
|
240
|
+
#
|
241
|
+
# Prefer the use of uniq (or distinct), before pluck instead of after.
|
242
|
+
#
|
243
|
+
# bad: Model.pluck(:id).uniq
|
244
|
+
#
|
245
|
+
# good: Model.uniq.pluck(:id)
|
246
|
+
|
247
|
+
Rails/UniqBeforePluck:
|
248
|
+
EnforcedMode: conservative
|
249
|
+
AutoCorrect: true
|
250
|
+
|
251
|
+
# Rails::Validation
|
252
|
+
#
|
253
|
+
# Checks for the use of old-style attribute validation macros.
|
254
|
+
|
255
|
+
Rails/Validation:
|
256
|
+
Enabled: true
|