bootboot 0.1.2 → 0.2.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: ce4a0bc591cffa30477add3d47ed3f67ac337aa7840e56121c85b4108919a897
4
- data.tar.gz: 5ab0c4985da72dd902e001cdac47d17ba728a71d83c6efff9c5ec5c7a4bf45f5
3
+ metadata.gz: a660b842166734ab9e7a05d31ac2a4ed989628737715b66ece5c1842a05a897e
4
+ data.tar.gz: 87e2fe884bf5757b777556d33d2e055c4dbac0f6e4e861488bc68af4add5656c
5
5
  SHA512:
6
- metadata.gz: 4ece9c7da79572614362138899178bfad5d40cd6bc390da1337828d0e60efe4e48a2dd865a9594644f1037e7f07dd0a478cbddd7b090981978812606ee5f1a0d
7
- data.tar.gz: 046f0a7e81267e2e3b85aac7ef922d60cd0e8f820ca1a007add2144498d29eb8ad27191b75d850f4e30e4e9ed2a64954cea679922861945567f44861ae8a1404
6
+ metadata.gz: bb199cfc6cd3f26b4ff430acdf99269d7d94a07d5270610a9504550380a331f75e800980bcace2ae26ce734511f9476b5bda3c89426e25d9658c5b09c63b2114
7
+ data.tar.gz: 37e249e6377c0b148e7326ff40deaaa6df0244f86ab098407f96e29d7f4aa0aa70be936575a66b3c07f5ea1ba603b2909bde174152e72ae2591405ae08928eb7
data/README.md CHANGED
@@ -40,8 +40,6 @@ No matter what approach you decide to take, you'll need to create tooling to ens
40
40
 
41
41
  Bootboot is only useful if you decide to follow the second approach. It creates the required tooling as well as the Bundler workaround needed to enable dual booting.
42
42
 
43
-
44
-
45
43
  Installation
46
44
  ------------
47
45
  1) In your Gemfile, add this
@@ -51,10 +49,134 @@ plugin 'bootboot', '~> 0.1.1'
51
49
  2) Run `bundle install && bundle bootboot`
52
50
  3) You're done. Commit the Gemfile and the Gemfile_next.lock
53
51
 
52
+ Note: You should only run `bundle bootboot` once to install the plugin, otherwise your Gemfile will get updated each time you run it.
53
+
54
54
  Dual boot it!
55
55
  ------------
56
56
  If you want to boot using the dependencies from the `Gemfile_next.lock`, run any bundler command prefixed with the `DEPENDENCIES_NEXT=1` ENV variable. I.e. `DEPENDENCIES_NEXT=1 bundle exec irb`.
57
57
 
58
+ **Note:** `bootboot` will use the gems and Ruby version specified per environment in your `Gemfile` to resolve dependencies and keep `Gemfile.lock` and `Gemfile_next.lock` in sync, but it does not do any magic to actually change the running Ruby version or install the gems in the environment you are not currently running, it simply tells Bundler which Ruby and gem versions to use in its resolution algorithm and keeps the lock files in sync. If you are a developer who is not involved in updating the dependency set, this should not affect you, simply use bundler normally. _However_, if you are involved in the dependency changes directly, you will often have to run `DEPENDENCIES_NEXT=1 bundle install` after making changes to the dependencies.
59
+
60
+ ```sh
61
+ # This will update Gemfile.lock and Gemfile_next.lock and install the gems
62
+ # specified in Gemfile.lock:
63
+ $ bundle update some_gem
64
+ # This will actually install the gems specified in Gemfile_next.lock
65
+ $ DEPENDENCIES_NEXT=1 bundle install
66
+ ```
67
+
68
+ Dual boot different Ruby versions
69
+ ---------------------------------
70
+
71
+ While dual booting is often used for framework upgrades, it is also possible to use `bootboot` to dual boot two Ruby versions, each with its own set of gems.
72
+
73
+ ```ruby
74
+ # Gemfile
75
+
76
+ if ENV['DEPENDENCIES_NEXT']
77
+ ruby '2.6.5'
78
+ else
79
+ ruby '2.5.7'
80
+ end
81
+ ```
82
+
83
+ Dual booting Ruby versions does incur some additional complications however, see the examples following for more detail.
84
+
85
+ Example: updating a gem while dual booting Ruby versions
86
+ --------------------------------------------------------
87
+
88
+ To dual boot an app while upgrading from Ruby 2.5.7 to Ruby 2.6.5, your Gemfile would look like this:
89
+
90
+ ```ruby
91
+ # Gemfile
92
+
93
+ if ENV['DEPENDENCIES_NEXT']
94
+ ruby '2.6.5'
95
+ else
96
+ ruby '2.5.7'
97
+ end
98
+ ```
99
+
100
+ After running `bundle install`, `Gemfile.lock` will have:
101
+
102
+ ```
103
+ RUBY VERSION
104
+ ruby 2.5.7p206
105
+ ```
106
+
107
+ and `Gemfile_next.lock` will have:
108
+
109
+ ```
110
+ RUBY VERSION
111
+ ruby 2.6.5p114
112
+ ```
113
+ Assuming there's a gem `some_gem` with the following constraints in its gemspecs:
114
+
115
+ ```ruby
116
+ # some_gem-1.0.gemspec
117
+ spec.version = "1.0"
118
+ spec.required_ruby_version = '>= 2.5.7'
119
+ ```
120
+
121
+ ```ruby
122
+ # some_gem-2.0.gemspec
123
+ spec.version = "2.0"
124
+ spec.required_ruby_version = '>= 2.6.5'
125
+ ```
126
+
127
+ Running `bundle update some_gem` will use Ruby 2.5.7 to resolve `some_gem` for `Gemfile.lock` and Ruby 2.6.5 to resolve `some_gem` for `Gemfile_next.lock` with the following results:
128
+
129
+ Gemfile.lock:
130
+ ```
131
+ specs:
132
+ some_gem (1.0)
133
+ ```
134
+
135
+ Gemfile_next.lock:
136
+ ```
137
+ specs:
138
+ some_gem (2.0)
139
+ ```
140
+
141
+ **Note:** It is important to note that at this point, `some_gem 2.0` **will not** be installed on your system, it will simply be specified in `Gemfile_next.lock`, since installing it on the system would require changing the running Ruby version. This is sufficient to keep `Gemfile_next.lock` in sync, but is a potential source of confusion. To install gems under both versions of Ruby, see the next section.
142
+
143
+ Vendoring both sets of gems
144
+ ---------------------------
145
+ To vendor both sets of gems, make sure caching is enabled by checking `bundle config` or bundle gems using `bundle pack`.
146
+
147
+ ```bash
148
+ bundle pack
149
+ DEPENDENCIES_NEXT=1 bundle pack
150
+ ```
151
+
152
+ ### Example: running Ruby scripts while dual booting Ruby versions
153
+
154
+ When running Ruby scripts while dual booting two different Ruby versions, you have to remember to do two things simultaneously for every command:
155
+ - Run the command with the correct version of Ruby
156
+ - Add the DEPENDENCIES_NEXT environment variable to tell bundler to use `Gemfile_next.lock`
157
+
158
+ So to run a spec in both versions, the workflow would look like this (assuming chruby for version management):
159
+
160
+ ```sh
161
+ $ chruby 2.5.7
162
+ $ bundle exec rspec spec/some_spec.rb
163
+ $ chruby 2.6.5
164
+ $ DEPENDENCIES_NEXT=1 bundle exec rspec spec/some_spec.rb
165
+ ```
166
+
167
+ Perhaps more importantly, to update or install a gem, the workflow would look like this:
168
+
169
+ ```sh
170
+ # This will update Gemfile.lock and Gemfile_next.lock and install the gems
171
+ # specified in Gemfile.lock:
172
+ $ chruby 2.5.7
173
+ $ bundle update some_gem
174
+ # This will actually install the gems specified in Gemfile_next.lock under the
175
+ # correct Ruby installation:
176
+ $ chruby 2.6.5
177
+ $ DEPENDENCIES_NEXT=1 bundle install
178
+ ```
179
+
58
180
  Configuration (Optional)
59
181
  ------------------------
60
182
  By default Bootboot will use the `DEPENDENCIES_NEXT` environment variable to update your Gemfile_next.lock. You can however configure it. For example, if you want the dualboot to happen when the `SHOPIFY_NEXT` env variable is present, you simply have to add this in your Gemfile:
@@ -70,3 +192,9 @@ When a developer bumps or adds a dependency, Bootboot will ensure that the `Gemf
70
192
 
71
193
  **However, this feature is only available if you are on Bundler `>= 1.17`**
72
194
  Other versions will trigger a warning message telling them that Bootboot can't automatically keep the `Gemfile_next.lock` in sync.
195
+
196
+ If you use the deployment flag (`bundle --deployment`) this plugin won't work on Bundler `<= 2.0.1`. Consider using this workaround in your Gemfile for these versions of Bundler:
197
+
198
+ ```ruby
199
+ plugin 'bootboot', '~> 0.1.2' unless Bundler.settings[:frozen]
200
+ ```
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bootboot/ruby_source"
4
+
3
5
  module DefinitionPatch
4
6
  def initialize(wrong_lock, *args)
5
- lockfile = if ENV['SKIP_BUNDLER_PATCH']
7
+ lockfile = if ENV['BOOTBOOT_UPDATING_ALTERNATE_LOCKFILE']
6
8
  wrong_lock
7
9
  else
8
10
  Bootboot::GEMFILE_NEXT_LOCK
@@ -12,15 +14,48 @@ module DefinitionPatch
12
14
  end
13
15
  end
14
16
 
17
+ module RubyVersionPatch
18
+ def system
19
+ if ENV['BOOTBOOT_UPDATING_ALTERNATE_LOCKFILE']
20
+ # If we're updating the alternate file and the ruby version specified in
21
+ # the Gemfile is different from the Ruby version currently running, we
22
+ # want to write the version specified in `Gemfile` for the current
23
+ # dependency set to the lock file
24
+ Bundler::Definition.build(Bootboot::GEMFILE, nil, false).ruby_version || super
25
+ else
26
+ super
27
+ end
28
+ end
29
+ end
30
+
31
+ module DefinitionSourceRequirementsPatch
32
+ def source_requirements
33
+ super.tap do |source_requirements|
34
+ # Bundler has a hard requirement that Ruby should be in the Metadata
35
+ # source, so this replaces Ruby's Metadata source with our custom source
36
+ source = Bootboot::RubySource.new({})
37
+ source_requirements[source.ruby_spec_name] = source
38
+ end
39
+ end
40
+ end
41
+
15
42
  module SharedHelpersPatch
16
43
  def default_lockfile
17
44
  Bootboot::GEMFILE_NEXT_LOCK
18
45
  end
19
46
  end
20
47
 
48
+ Bundler::Definition.prepend(DefinitionSourceRequirementsPatch)
49
+ Bundler::RubyVersion.singleton_class.prepend(RubyVersionPatch)
50
+
21
51
  Bundler::Dsl.class_eval do
22
52
  def enable_dual_booting
23
53
  Bundler::Definition.prepend(DefinitionPatch)
24
54
  Bundler::SharedHelpers.singleton_class.prepend(SharedHelpersPatch)
55
+ Bundler::Settings.prepend(Module.new do
56
+ def app_cache_path
57
+ 'vendor/cache-next'
58
+ end
59
+ end)
25
60
  end
26
61
  end
@@ -49,7 +49,7 @@ module Bootboot
49
49
 
50
50
  Bundler.ui.confirm("Updating the #{lock}")
51
51
  ENV[env] = '1'
52
- ENV['SKIP_BUNDLER_PATCH'] = '1'
52
+ ENV['BOOTBOOT_UPDATING_ALTERNATE_LOCKFILE'] = '1'
53
53
 
54
54
  unlock = current_definition.instance_variable_get(:@unlock)
55
55
  definition = Bundler::Definition.build(GEMFILE, lock, unlock)
@@ -57,7 +57,7 @@ module Bootboot
57
57
  definition.lock(lock)
58
58
  ensure
59
59
  ENV.delete(env)
60
- ENV.delete('SKIP_BUNDLER_PATCH')
60
+ ENV.delete('BOOTBOOT_UPDATING_ALTERNATE_LOCKFILE')
61
61
  end
62
62
 
63
63
  def which_env
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootboot
4
+ class RubySource
5
+ include Bundler::Plugin::API::Source
6
+
7
+ # The spec name for Ruby changed from "ruby\0" to "Ruby\0" between Bundler
8
+ # 1.17 and 2.0, so we want to use the Ruby spec name from Metadata so
9
+ # Bootboot works across Bundler versions
10
+ def ruby_spec_name
11
+ @ruby_spec_name ||= begin
12
+ metadata = Bundler::Source::Metadata.new
13
+ ruby_spec = metadata.specs.find { |s| s.name[/[R|r]uby\0/] }
14
+ # Default to Bundler > 2 in case the Bundler internals change
15
+ ruby_spec ? ruby_spec.name : "Ruby\0"
16
+ end
17
+ end
18
+
19
+ def specs
20
+ Bundler::Index.build do |idx|
21
+ # If the ruby version specified in the Gemfile is different from the
22
+ # Ruby version currently running, we want to build a definition without
23
+ # a lockfile (so that `ruby_version` in the Gemfile isn't overridden by
24
+ # the lockfile) and get its `ruby_version`. This will be used both
25
+ # during dependency resolution so that we can pretend the intended Ruby
26
+ # version is present, as well as when updating the lockfile itself.
27
+ ruby_version = Bundler::Definition.build(Bootboot::GEMFILE, nil, false).ruby_version
28
+ ruby_version ||= Bundler::RubyVersion.system
29
+ ruby_spec = Gem::Specification.new(ruby_spec_name, ruby_version.to_gem_version_with_patchlevel)
30
+ ruby_spec.source = self
31
+ idx << ruby_spec
32
+ end
33
+ end
34
+
35
+ def to_s
36
+ "Bootboot plugin Ruby source"
37
+ end
38
+ end
39
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bootboot
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootboot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-08 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.17'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.17'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -52,34 +38,27 @@ dependencies:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
40
  version: '5.0'
55
- description: " This gems removes you the overhead of monkeypatching your Gemfile in
56
- order to dualboot your app using the Gemfile_next lock strategy It also ensure that
57
- dependencies in the Gemfile lock and Gemfile_next lock are in sync whenever someone
58
- updates a gem "
41
+ description: " This gem remove the overhead of monkeypatching your Gemfile in order
42
+ to dualboot your app using the Gemfile_next lock strategy It also ensure that dependencies
43
+ in the Gemfile lock and Gemfile_next lock are in sync whenever someone updates a
44
+ gem "
59
45
  email:
60
46
  - rails@shopify.com
61
47
  executables: []
62
48
  extensions: []
63
- extra_rdoc_files: []
49
+ extra_rdoc_files:
50
+ - LICENSE.txt
51
+ - README.md
64
52
  files:
65
- - ".gitignore"
66
- - ".rubocop-https---shopify-github-io-ruby-style-guide-rubocop-yml"
67
- - ".rubocop.yml"
68
- - ".travis.yml"
69
- - CHANGELOG.md
70
- - Gemfile
71
- - Gemfile.lock
72
53
  - LICENSE.txt
73
54
  - README.md
74
- - Rakefile
75
- - bootboot.gemspec
76
55
  - lib/bootboot.rb
77
56
  - lib/bootboot/bundler_patch.rb
78
57
  - lib/bootboot/command.rb
79
58
  - lib/bootboot/gemfile_next_auto_sync.rb
59
+ - lib/bootboot/ruby_source.rb
80
60
  - lib/bootboot/version.rb
81
61
  - plugins.rb
82
- - shipit.rubygems.yml
83
62
  homepage: https://github.com/shopify/bootboot
84
63
  licenses:
85
64
  - MIT
@@ -87,6 +66,7 @@ metadata:
87
66
  homepage_uri: https://github.com/shopify/bootboot
88
67
  source_code_uri: https://github.com/shopify/bootboot
89
68
  changelog_uri: https://github.com/Shopify/bootboot/blob/master/CHANGELOG.md
69
+ allowed_push_host: https://rubygems.org
90
70
  post_install_message:
91
71
  rdoc_options: []
92
72
  require_paths:
@@ -102,8 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
82
  - !ruby/object:Gem::Version
103
83
  version: '0'
104
84
  requirements: []
105
- rubyforge_project:
106
- rubygems_version: 2.7.6
85
+ rubygems_version: 3.0.3
107
86
  signing_key:
108
87
  specification_version: 4
109
88
  summary: Dualbooting your ruby app made easy.
data/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
@@ -1,1179 +0,0 @@
1
- AllCops:
2
- Exclude:
3
- - 'db/schema.rb'
4
- DisabledByDefault: true
5
- StyleGuideBaseURL: https://shopify.github.io/ruby-style-guide/
6
-
7
- Layout/AccessModifierIndentation:
8
- EnforcedStyle: indent
9
- SupportedStyles:
10
- - outdent
11
- - indent
12
- IndentationWidth:
13
-
14
- Style/Alias:
15
- EnforcedStyle: prefer_alias_method
16
- SupportedStyles:
17
- - prefer_alias
18
- - prefer_alias_method
19
-
20
- Layout/AlignHash:
21
- EnforcedHashRocketStyle: key
22
- EnforcedColonStyle: key
23
- EnforcedLastArgumentHashStyle: ignore_implicit
24
- SupportedLastArgumentHashStyles:
25
- - always_inspect
26
- - always_ignore
27
- - ignore_implicit
28
- - ignore_explicit
29
-
30
- Layout/AlignParameters:
31
- EnforcedStyle: with_fixed_indentation
32
- SupportedStyles:
33
- - with_first_parameter
34
- - with_fixed_indentation
35
- IndentationWidth:
36
-
37
- Style/AndOr:
38
- EnforcedStyle: always
39
- SupportedStyles:
40
- - always
41
- - conditionals
42
-
43
- Style/BarePercentLiterals:
44
- EnforcedStyle: bare_percent
45
- SupportedStyles:
46
- - percent_q
47
- - bare_percent
48
-
49
- Style/BlockDelimiters:
50
- EnforcedStyle: line_count_based
51
- SupportedStyles:
52
- - line_count_based
53
- - semantic
54
- - braces_for_chaining
55
- ProceduralMethods:
56
- - benchmark
57
- - bm
58
- - bmbm
59
- - create
60
- - each_with_object
61
- - measure
62
- - new
63
- - realtime
64
- - tap
65
- - with_object
66
- FunctionalMethods:
67
- - let
68
- - let!
69
- - subject
70
- - watch
71
- IgnoredMethods:
72
- - lambda
73
- - proc
74
- - it
75
-
76
- Style/BracesAroundHashParameters:
77
- EnforcedStyle: no_braces
78
- SupportedStyles:
79
- - braces
80
- - no_braces
81
- - context_dependent
82
-
83
- Layout/CaseIndentation:
84
- EnforcedStyle: end
85
- SupportedStyles:
86
- - case
87
- - end
88
- IndentOneStep: false
89
- IndentationWidth:
90
-
91
- Style/ClassAndModuleChildren:
92
- EnforcedStyle: nested
93
- SupportedStyles:
94
- - nested
95
- - compact
96
-
97
- Style/ClassCheck:
98
- EnforcedStyle: is_a?
99
- SupportedStyles:
100
- - is_a?
101
- - kind_of?
102
-
103
- Style/CommandLiteral:
104
- EnforcedStyle: percent_x
105
- SupportedStyles:
106
- - backticks
107
- - percent_x
108
- - mixed
109
- AllowInnerBackticks: false
110
-
111
- Style/CommentAnnotation:
112
- Keywords:
113
- - TODO
114
- - FIXME
115
- - OPTIMIZE
116
- - HACK
117
- - REVIEW
118
-
119
- Style/ConditionalAssignment:
120
- EnforcedStyle: assign_to_condition
121
- SupportedStyles:
122
- - assign_to_condition
123
- - assign_inside_condition
124
- SingleLineConditionsOnly: true
125
-
126
- Layout/DotPosition:
127
- EnforcedStyle: leading
128
- SupportedStyles:
129
- - leading
130
- - trailing
131
-
132
- Style/EmptyElse:
133
- EnforcedStyle: both
134
- SupportedStyles:
135
- - empty
136
- - nil
137
- - both
138
-
139
- Layout/EmptyLineBetweenDefs:
140
- AllowAdjacentOneLineDefs: false
141
-
142
- Layout/EmptyLinesAroundBlockBody:
143
- EnforcedStyle: no_empty_lines
144
- SupportedStyles:
145
- - empty_lines
146
- - no_empty_lines
147
-
148
- Layout/EmptyLinesAroundClassBody:
149
- EnforcedStyle: no_empty_lines
150
- SupportedStyles:
151
- - empty_lines
152
- - empty_lines_except_namespace
153
- - no_empty_lines
154
-
155
- Layout/EmptyLinesAroundModuleBody:
156
- EnforcedStyle: no_empty_lines
157
- SupportedStyles:
158
- - empty_lines
159
- - empty_lines_except_namespace
160
- - no_empty_lines
161
-
162
- Layout/ExtraSpacing:
163
- AllowForAlignment: true
164
- ForceEqualSignAlignment: false
165
-
166
- Naming/FileName:
167
- Exclude: []
168
- ExpectMatchingDefinition: false
169
- Regex:
170
- IgnoreExecutableScripts: true
171
-
172
- Layout/FirstParameterIndentation:
173
- EnforcedStyle: consistent
174
- SupportedStyles:
175
- - consistent
176
- - special_for_inner_method_call
177
- - special_for_inner_method_call_in_parentheses
178
- IndentationWidth:
179
-
180
- Style/For:
181
- EnforcedStyle: each
182
- SupportedStyles:
183
- - for
184
- - each
185
-
186
- Style/FormatString:
187
- EnforcedStyle: format
188
- SupportedStyles:
189
- - format
190
- - sprintf
191
- - percent
192
-
193
- Style/FrozenStringLiteralComment:
194
- Details: >-
195
- Add `# frozen_string_literal: true` to the top of the file. Frozen string
196
- literals will become the default in a future Ruby version, and we want to
197
- make sure we're ready.
198
- EnforcedStyle: when_needed
199
- SupportedStyles:
200
- - when_needed
201
- - always
202
- - never
203
-
204
- Style/GlobalVars:
205
- AllowedVariables: []
206
-
207
- Style/HashSyntax:
208
- EnforcedStyle: ruby19
209
- SupportedStyles:
210
- - ruby19
211
- - hash_rockets
212
- - no_mixed_keys
213
- - ruby19_no_mixed_keys
214
- UseHashRocketsWithSymbolValues: false
215
- PreferHashRocketsForNonAlnumEndingSymbols: false
216
-
217
- Layout/IndentationConsistency:
218
- EnforcedStyle: normal
219
- SupportedStyles:
220
- - normal
221
- - rails
222
-
223
- Layout/IndentationWidth:
224
- Width: 2
225
-
226
- Layout/IndentArray:
227
- EnforcedStyle: consistent
228
- SupportedStyles:
229
- - special_inside_parentheses
230
- - consistent
231
- - align_brackets
232
- IndentationWidth:
233
-
234
- Layout/IndentAssignment:
235
- IndentationWidth:
236
-
237
- Layout/IndentHash:
238
- EnforcedStyle: consistent
239
- SupportedStyles:
240
- - special_inside_parentheses
241
- - consistent
242
- - align_braces
243
- IndentationWidth:
244
-
245
- Style/LambdaCall:
246
- EnforcedStyle: call
247
- SupportedStyles:
248
- - call
249
- - braces
250
-
251
- Style/Next:
252
- EnforcedStyle: skip_modifier_ifs
253
- MinBodyLength: 3
254
- SupportedStyles:
255
- - skip_modifier_ifs
256
- - always
257
-
258
- Style/NonNilCheck:
259
- IncludeSemanticChanges: false
260
-
261
- Style/MethodDefParentheses:
262
- EnforcedStyle: require_parentheses
263
- SupportedStyles:
264
- - require_parentheses
265
- - require_no_parentheses
266
- - require_no_parentheses_except_multiline
267
-
268
- Naming/MethodName:
269
- EnforcedStyle: snake_case
270
- SupportedStyles:
271
- - snake_case
272
- - camelCase
273
-
274
- Layout/MultilineArrayBraceLayout:
275
- EnforcedStyle: symmetrical
276
- SupportedStyles:
277
- - symmetrical
278
- - new_line
279
- - same_line
280
-
281
- Layout/MultilineHashBraceLayout:
282
- EnforcedStyle: symmetrical
283
- SupportedStyles:
284
- - symmetrical
285
- - new_line
286
- - same_line
287
-
288
- Layout/MultilineMethodCallBraceLayout:
289
- EnforcedStyle: symmetrical
290
- SupportedStyles:
291
- - symmetrical
292
- - new_line
293
- - same_line
294
-
295
- Layout/MultilineMethodCallIndentation:
296
- EnforcedStyle: indented
297
- SupportedStyles:
298
- - aligned
299
- - indented
300
- - indented_relative_to_receiver
301
- IndentationWidth: 2
302
-
303
- Layout/MultilineMethodDefinitionBraceLayout:
304
- EnforcedStyle: symmetrical
305
- SupportedStyles:
306
- - symmetrical
307
- - new_line
308
- - same_line
309
-
310
- Style/NumericLiteralPrefix:
311
- EnforcedOctalStyle: zero_only
312
- SupportedOctalStyles:
313
- - zero_with_o
314
- - zero_only
315
-
316
- Style/ParenthesesAroundCondition:
317
- AllowSafeAssignment: true
318
-
319
- Style/PercentLiteralDelimiters:
320
- PreferredDelimiters:
321
- '%': '()'
322
- '%i': '()'
323
- '%q': '()'
324
- '%Q': '()'
325
- '%r': '{}'
326
- '%s': '()'
327
- '%w': '()'
328
- '%W': '()'
329
- '%x': '()'
330
-
331
- Style/PercentQLiterals:
332
- EnforcedStyle: lower_case_q
333
- SupportedStyles:
334
- - lower_case_q
335
- - upper_case_q
336
-
337
- Naming/PredicateName:
338
- NamePrefix:
339
- - is_
340
- NamePrefixBlacklist:
341
- - is_
342
- NameWhitelist:
343
- - is_a?
344
- Exclude:
345
- - 'spec/**/*'
346
-
347
- Style/PreferredHashMethods:
348
- EnforcedStyle: short
349
- SupportedStyles:
350
- - short
351
- - verbose
352
-
353
- Style/RaiseArgs:
354
- EnforcedStyle: exploded
355
- SupportedStyles:
356
- - compact
357
- - exploded
358
-
359
- Style/RedundantReturn:
360
- AllowMultipleReturnValues: false
361
-
362
- Style/RegexpLiteral:
363
- EnforcedStyle: mixed
364
- SupportedStyles:
365
- - slashes
366
- - percent_r
367
- - mixed
368
- AllowInnerSlashes: false
369
-
370
- Style/SafeNavigation:
371
- ConvertCodeThatCanStartToReturnNil: false
372
- Enabled: true
373
-
374
- Lint/SafeNavigationChain:
375
- Enabled: true
376
-
377
- Style/Semicolon:
378
- AllowAsExpressionSeparator: false
379
-
380
- Style/SignalException:
381
- EnforcedStyle: only_raise
382
- SupportedStyles:
383
- - only_raise
384
- - only_fail
385
- - semantic
386
-
387
- Style/SingleLineMethods:
388
- AllowIfMethodIsEmpty: true
389
-
390
- Layout/SpaceBeforeFirstArg:
391
- AllowForAlignment: true
392
-
393
- Style/SpecialGlobalVars:
394
- EnforcedStyle: use_english_names
395
- SupportedStyles:
396
- - use_perl_names
397
- - use_english_names
398
-
399
- Style/StabbyLambdaParentheses:
400
- EnforcedStyle: require_parentheses
401
- SupportedStyles:
402
- - require_parentheses
403
- - require_no_parentheses
404
-
405
- Style/StringLiteralsInInterpolation:
406
- EnforcedStyle: single_quotes
407
- SupportedStyles:
408
- - single_quotes
409
- - double_quotes
410
-
411
- Layout/SpaceAroundBlockParameters:
412
- EnforcedStyleInsidePipes: no_space
413
- SupportedStylesInsidePipes:
414
- - space
415
- - no_space
416
-
417
- Layout/SpaceAroundEqualsInParameterDefault:
418
- EnforcedStyle: space
419
- SupportedStyles:
420
- - space
421
- - no_space
422
-
423
- Layout/SpaceAroundOperators:
424
- AllowForAlignment: true
425
-
426
- Layout/SpaceBeforeBlockBraces:
427
- EnforcedStyle: space
428
- EnforcedStyleForEmptyBraces: space
429
- SupportedStyles:
430
- - space
431
- - no_space
432
-
433
- Layout/SpaceInsideBlockBraces:
434
- EnforcedStyle: space
435
- SupportedStyles:
436
- - space
437
- - no_space
438
- EnforcedStyleForEmptyBraces: no_space
439
- SpaceBeforeBlockParameters: true
440
-
441
- Layout/SpaceInsideHashLiteralBraces:
442
- EnforcedStyle: space
443
- EnforcedStyleForEmptyBraces: no_space
444
- SupportedStyles:
445
- - space
446
- - no_space
447
- - compact
448
-
449
- Layout/SpaceInsideStringInterpolation:
450
- EnforcedStyle: no_space
451
- SupportedStyles:
452
- - space
453
- - no_space
454
-
455
- Style/SymbolProc:
456
- IgnoredMethods:
457
- - respond_to
458
- - define_method
459
-
460
- Style/TernaryParentheses:
461
- EnforcedStyle: require_no_parentheses
462
- SupportedStyles:
463
- - require_parentheses
464
- - require_no_parentheses
465
- AllowSafeAssignment: true
466
-
467
- Layout/TrailingBlankLines:
468
- EnforcedStyle: final_newline
469
- SupportedStyles:
470
- - final_newline
471
- - final_blank_line
472
-
473
- Style/TrivialAccessors:
474
- ExactNameMatch: true
475
- AllowPredicates: true
476
- AllowDSLWriters: false
477
- IgnoreClassMethods: false
478
- Whitelist:
479
- - to_ary
480
- - to_a
481
- - to_c
482
- - to_enum
483
- - to_h
484
- - to_hash
485
- - to_i
486
- - to_int
487
- - to_io
488
- - to_open
489
- - to_path
490
- - to_proc
491
- - to_r
492
- - to_regexp
493
- - to_str
494
- - to_s
495
- - to_sym
496
-
497
- Naming/VariableName:
498
- EnforcedStyle: snake_case
499
- SupportedStyles:
500
- - snake_case
501
- - camelCase
502
-
503
- Style/WhileUntilModifier:
504
- Enabled: true
505
-
506
- Style/WordArray:
507
- EnforcedStyle: percent
508
- SupportedStyles:
509
- - percent
510
- - brackets
511
- MinSize: 0
512
- WordRegex: !ruby/regexp /\A[\p{Word}\n\t]+\z/
513
-
514
- Metrics/BlockNesting:
515
- Max: 3
516
-
517
- Metrics/LineLength:
518
- Max: 120
519
- AllowHeredoc: true
520
- AllowURI: true
521
- URISchemes:
522
- - http
523
- - https
524
- IgnoreCopDirectives: false
525
- IgnoredPatterns:
526
- - '\A\s*(remote_)?test(_\w+)?\s.*(do|->)(\s|\Z)'
527
-
528
- Metrics/ParameterLists:
529
- Max: 5
530
- CountKeywordArgs: false
531
-
532
- Layout/BlockAlignment:
533
- EnforcedStyleAlignWith: either
534
- SupportedStylesAlignWith:
535
- - either
536
- - start_of_block
537
- - start_of_line
538
-
539
- Layout/EndAlignment:
540
- EnforcedStyleAlignWith: variable
541
- SupportedStylesAlignWith:
542
- - keyword
543
- - variable
544
- - start_of_line
545
-
546
- Layout/DefEndAlignment:
547
- EnforcedStyleAlignWith: start_of_line
548
- SupportedStylesAlignWith:
549
- - start_of_line
550
- - def
551
-
552
- Lint/InheritException:
553
- EnforcedStyle: runtime_error
554
- SupportedStyles:
555
- - runtime_error
556
- - standard_error
557
-
558
- Lint/UnusedBlockArgument:
559
- IgnoreEmptyBlocks: true
560
- AllowUnusedKeywordArguments: false
561
-
562
- Lint/UnusedMethodArgument:
563
- AllowUnusedKeywordArguments: false
564
- IgnoreEmptyMethods: true
565
-
566
- Performance/RedundantMerge:
567
- MaxKeyValuePairs: 2
568
-
569
- Rails/ActionFilter:
570
- EnforcedStyle: action
571
- SupportedStyles:
572
- - action
573
- - filter
574
- Include:
575
- - app/controllers/**/*.rb
576
-
577
- Rails/Date:
578
- EnforcedStyle: flexible
579
- SupportedStyles:
580
- - strict
581
- - flexible
582
-
583
- Rails/DynamicFindBy:
584
- Whitelist:
585
- - find_by_sql
586
-
587
- Rails/Exit:
588
- Include:
589
- - app/**/*.rb
590
- - config/**/*.rb
591
- - lib/**/*.rb
592
- Exclude:
593
- - 'lib/**/*.rake'
594
-
595
- Rails/FindBy:
596
- Include:
597
- - app/models/**/*.rb
598
-
599
- Rails/FindEach:
600
- Include:
601
- - app/models/**/*.rb
602
-
603
- Rails/HasAndBelongsToMany:
604
- Include:
605
- - app/models/**/*.rb
606
-
607
- Rails/NotNullColumn:
608
- Include:
609
- - db/migrate/*.rb
610
-
611
- Rails/Output:
612
- Include:
613
- - app/**/*.rb
614
- - config/**/*.rb
615
- - db/**/*.rb
616
- - lib/**/*.rb
617
-
618
- Rails/ReadWriteAttribute:
619
- Include:
620
- - app/models/**/*.rb
621
-
622
- Rails/RequestReferer:
623
- EnforcedStyle: referer
624
- SupportedStyles:
625
- - referer
626
- - referrer
627
-
628
- Rails/SafeNavigation:
629
- ConvertTry: false
630
-
631
- Rails/ScopeArgs:
632
- Include:
633
- - app/models/**/*.rb
634
-
635
- Rails/TimeZone:
636
- EnforcedStyle: flexible
637
- SupportedStyles:
638
- - strict
639
- - flexible
640
-
641
- Rails/UniqBeforePluck:
642
- EnforcedStyle: conservative
643
- SupportedStyles:
644
- - conservative
645
- - aggressive
646
-
647
- Rails/Validation:
648
- Include:
649
- - app/models/**/*.rb
650
-
651
- Naming/AccessorMethodName:
652
- Enabled: true
653
-
654
- Layout/AlignArray:
655
- Enabled: true
656
-
657
- Style/ArrayJoin:
658
- Enabled: true
659
-
660
- Naming/AsciiIdentifiers:
661
- Enabled: true
662
-
663
- Style/Attr:
664
- Enabled: true
665
-
666
- Style/BeginBlock:
667
- Enabled: true
668
-
669
- Style/BlockComments:
670
- Enabled: true
671
-
672
- Layout/BlockEndNewline:
673
- Enabled: true
674
-
675
- Style/CaseEquality:
676
- Enabled: true
677
-
678
- Style/CharacterLiteral:
679
- Enabled: true
680
-
681
- Naming/ClassAndModuleCamelCase:
682
- Enabled: true
683
-
684
- Style/ClassMethods:
685
- Enabled: true
686
-
687
- Style/ClassVars:
688
- Enabled: true
689
-
690
- Layout/ClosingParenthesisIndentation:
691
- Enabled: true
692
-
693
- Style/ColonMethodCall:
694
- Enabled: true
695
-
696
- Layout/CommentIndentation:
697
- Enabled: true
698
-
699
- Naming/ConstantName:
700
- Enabled: true
701
-
702
- Style/DateTime:
703
- Enabled: true
704
-
705
- Style/DefWithParentheses:
706
- Enabled: true
707
-
708
- Style/EachForSimpleLoop:
709
- Enabled: true
710
-
711
- Style/EachWithObject:
712
- Enabled: true
713
-
714
- Layout/ElseAlignment:
715
- Enabled: true
716
-
717
- Style/EmptyCaseCondition:
718
- Enabled: true
719
-
720
- Layout/EmptyLines:
721
- Enabled: true
722
-
723
- Layout/EmptyLinesAroundAccessModifier:
724
- Enabled: true
725
-
726
- Layout/EmptyLinesAroundMethodBody:
727
- Enabled: true
728
-
729
- Style/EmptyLiteral:
730
- Enabled: true
731
-
732
- Style/EndBlock:
733
- Enabled: true
734
-
735
- Layout/EndOfLine:
736
- Enabled: true
737
-
738
- Style/EvenOdd:
739
- Enabled: true
740
-
741
- Layout/InitialIndentation:
742
- Enabled: true
743
-
744
- Style/FlipFlop:
745
- Enabled: true
746
-
747
- Style/IfInsideElse:
748
- Enabled: true
749
-
750
- Style/IfUnlessModifierOfIfUnless:
751
- Enabled: true
752
-
753
- Style/IfWithSemicolon:
754
- Enabled: true
755
-
756
- Style/IdenticalConditionalBranches:
757
- Enabled: true
758
-
759
- Style/InfiniteLoop:
760
- Enabled: true
761
-
762
- Layout/LeadingCommentSpace:
763
- Enabled: true
764
-
765
- Style/LineEndConcatenation:
766
- Enabled: true
767
-
768
- Style/MethodCallWithoutArgsParentheses:
769
- Enabled: true
770
-
771
- Style/MethodMissingSuper:
772
- Enabled: true
773
-
774
- Style/MissingRespondToMissing:
775
- Enabled: true
776
-
777
- Style/MultilineBlockChain:
778
- Enabled: true
779
-
780
- Layout/MultilineBlockLayout:
781
- Enabled: true
782
-
783
- Style/MultilineIfThen:
784
- Enabled: true
785
-
786
- Style/MultilineMemoization:
787
- Enabled: true
788
-
789
- Style/MultilineTernaryOperator:
790
- Enabled: true
791
-
792
- Style/NegatedIf:
793
- Enabled: true
794
-
795
- Style/NegatedWhile:
796
- Enabled: true
797
-
798
- Style/NestedModifier:
799
- Enabled: true
800
-
801
- Style/NestedParenthesizedCalls:
802
- Enabled: true
803
-
804
- Style/NestedTernaryOperator:
805
- Enabled: true
806
-
807
- Style/NilComparison:
808
- Enabled: true
809
-
810
- Style/Not:
811
- Enabled: true
812
-
813
- Style/OneLineConditional:
814
- Enabled: true
815
-
816
- Naming/BinaryOperatorParameterName:
817
- Enabled: true
818
-
819
- Style/OptionalArguments:
820
- Enabled: true
821
-
822
- Style/ParallelAssignment:
823
- Enabled: true
824
-
825
- Style/PerlBackrefs:
826
- Enabled: true
827
-
828
- Style/Proc:
829
- Enabled: true
830
-
831
- Style/RedundantBegin:
832
- Enabled: true
833
-
834
- Style/RedundantException:
835
- Enabled: true
836
-
837
- Style/RedundantFreeze:
838
- Enabled: true
839
-
840
- Style/RedundantParentheses:
841
- Enabled: true
842
-
843
- Style/RedundantSelf:
844
- Enabled: true
845
-
846
- Layout/RescueEnsureAlignment:
847
- Enabled: true
848
-
849
- Style/RescueModifier:
850
- Enabled: true
851
-
852
- Style/SelfAssignment:
853
- Enabled: true
854
-
855
- Layout/SpaceAfterColon:
856
- Enabled: true
857
-
858
- Layout/SpaceAfterComma:
859
- Enabled: true
860
-
861
- Layout/SpaceAfterMethodName:
862
- Enabled: true
863
-
864
- Layout/SpaceAfterNot:
865
- Enabled: true
866
-
867
- Layout/SpaceAfterSemicolon:
868
- Enabled: true
869
-
870
- Layout/SpaceBeforeComma:
871
- Enabled: true
872
-
873
- Layout/SpaceBeforeComment:
874
- Enabled: true
875
-
876
- Layout/SpaceBeforeSemicolon:
877
- Enabled: true
878
-
879
- Layout/SpaceAroundKeyword:
880
- Enabled: true
881
-
882
- Layout/SpaceInsideArrayPercentLiteral:
883
- Enabled: true
884
-
885
- Layout/SpaceInsidePercentLiteralDelimiters:
886
- Enabled: true
887
-
888
- Layout/SpaceInsideArrayLiteralBrackets:
889
- Enabled: true
890
-
891
- Layout/SpaceInsideParens:
892
- Enabled: true
893
-
894
- Layout/SpaceInsideRangeLiteral:
895
- Enabled: true
896
-
897
- Style/SymbolLiteral:
898
- Enabled: true
899
-
900
- Layout/Tab:
901
- Enabled: true
902
-
903
- Layout/TrailingWhitespace:
904
- Enabled: true
905
-
906
- Style/UnlessElse:
907
- Enabled: true
908
-
909
- Style/UnneededCapitalW:
910
- Enabled: true
911
-
912
- Style/UnneededInterpolation:
913
- Enabled: true
914
-
915
- Style/UnneededPercentQ:
916
- Enabled: true
917
-
918
- Style/VariableInterpolation:
919
- Enabled: true
920
-
921
- Style/WhenThen:
922
- Enabled: true
923
-
924
- Style/WhileUntilDo:
925
- Enabled: true
926
-
927
- Style/ZeroLengthPredicate:
928
- Enabled: true
929
-
930
- Lint/AmbiguousOperator:
931
- Enabled: true
932
-
933
- Lint/AmbiguousRegexpLiteral:
934
- Enabled: true
935
-
936
- Lint/CircularArgumentReference:
937
- Enabled: true
938
-
939
- Layout/ConditionPosition:
940
- Enabled: true
941
-
942
- Lint/Debugger:
943
- Enabled: true
944
-
945
- Lint/DeprecatedClassMethods:
946
- Enabled: true
947
-
948
- Lint/DuplicateMethods:
949
- Enabled: true
950
-
951
- Lint/DuplicatedKey:
952
- Enabled: true
953
-
954
- Lint/EachWithObjectArgument:
955
- Enabled: true
956
-
957
- Lint/ElseLayout:
958
- Enabled: true
959
-
960
- Lint/EmptyEnsure:
961
- Enabled: true
962
-
963
- Lint/EmptyInterpolation:
964
- Enabled: true
965
-
966
- Lint/EndInMethod:
967
- Enabled: true
968
-
969
- Lint/EnsureReturn:
970
- Enabled: true
971
-
972
- Lint/FloatOutOfRange:
973
- Enabled: true
974
-
975
- Lint/FormatParameterMismatch:
976
- Enabled: true
977
-
978
- Lint/HandleExceptions:
979
- Enabled: true
980
-
981
- Lint/ImplicitStringConcatenation:
982
- Description: Checks for adjacent string literals on the same line, which could
983
- better be represented as a single string literal.
984
-
985
- Lint/IneffectiveAccessModifier:
986
- Description: Checks for attempts to use `private` or `protected` to set the visibility
987
- of a class method, which does not work.
988
-
989
- Lint/LiteralAsCondition:
990
- Enabled: true
991
-
992
- Lint/LiteralInInterpolation:
993
- Enabled: true
994
-
995
- Lint/Loop:
996
- Description: Use Kernel#loop with break rather than begin/end/until or begin/end/while
997
- for post-loop tests.
998
-
999
- Lint/NestedMethodDefinition:
1000
- Enabled: true
1001
-
1002
- Lint/NextWithoutAccumulator:
1003
- Description: Do not omit the accumulator when calling `next` in a `reduce`/`inject`
1004
- block.
1005
-
1006
- Lint/NonLocalExitFromIterator:
1007
- Enabled: true
1008
-
1009
- Lint/ParenthesesAsGroupedExpression:
1010
- Enabled: true
1011
-
1012
- Lint/PercentStringArray:
1013
- Enabled: true
1014
-
1015
- Lint/PercentSymbolArray:
1016
- Enabled: true
1017
-
1018
- Lint/RandOne:
1019
- Description: Checks for `rand(1)` calls. Such calls always return `0` and most
1020
- likely a mistake.
1021
-
1022
- Lint/RequireParentheses:
1023
- Enabled: true
1024
-
1025
- Lint/RescueException:
1026
- Enabled: true
1027
-
1028
- Lint/ShadowedException:
1029
- Enabled: true
1030
-
1031
- Lint/ShadowingOuterLocalVariable:
1032
- Enabled: true
1033
-
1034
- Lint/StringConversionInInterpolation:
1035
- Enabled: true
1036
-
1037
- Lint/UnderscorePrefixedVariableName:
1038
- Enabled: true
1039
-
1040
- Lint/UnifiedInteger:
1041
- Enabled: true
1042
-
1043
- Lint/UnneededCopDisableDirective:
1044
- Enabled: true
1045
-
1046
- Lint/UnneededCopEnableDirective:
1047
- Enabled: true
1048
-
1049
- Lint/UnneededSplatExpansion:
1050
- Enabled: true
1051
-
1052
- Lint/UnreachableCode:
1053
- Enabled: true
1054
-
1055
- Lint/UselessAccessModifier:
1056
- ContextCreatingMethods: []
1057
-
1058
- Lint/UselessAssignment:
1059
- Enabled: true
1060
-
1061
- Lint/UselessComparison:
1062
- Enabled: true
1063
-
1064
- Lint/UselessElseWithoutRescue:
1065
- Enabled: true
1066
-
1067
- Lint/UselessSetterCall:
1068
- Enabled: true
1069
-
1070
- Lint/Void:
1071
- Enabled: true
1072
-
1073
- Performance/CaseWhenSplat:
1074
- Enabled: true
1075
-
1076
- Performance/Count:
1077
- SafeMode: true
1078
-
1079
- Performance/Detect:
1080
- SafeMode: true
1081
-
1082
- Performance/DoubleStartEndWith:
1083
- Enabled: true
1084
-
1085
- Performance/EndWith:
1086
- Enabled: true
1087
-
1088
- Performance/FixedSize:
1089
- Enabled: true
1090
-
1091
- Performance/FlatMap:
1092
- EnabledForFlattenWithoutParams: false
1093
-
1094
- Performance/LstripRstrip:
1095
- Enabled: true
1096
-
1097
- Performance/RangeInclude:
1098
- Enabled: true
1099
-
1100
- Performance/RedundantBlockCall:
1101
- Enabled: true
1102
-
1103
- Performance/RedundantMatch:
1104
- Enabled: true
1105
-
1106
- Performance/RedundantSortBy:
1107
- Enabled: true
1108
-
1109
- Performance/RegexpMatch:
1110
- Enabled: true
1111
-
1112
- Performance/ReverseEach:
1113
- Enabled: true
1114
-
1115
- Performance/Sample:
1116
- Enabled: true
1117
-
1118
- Performance/Size:
1119
- Enabled: true
1120
-
1121
- Performance/CompareWithBlock:
1122
- Enabled: true
1123
-
1124
- Performance/StartWith:
1125
- Enabled: true
1126
-
1127
- Performance/StringReplacement:
1128
- Enabled: true
1129
-
1130
- Rails/DelegateAllowBlank:
1131
- Enabled: true
1132
-
1133
- Rails/HttpPositionalArguments:
1134
- Include:
1135
- - spec/**/*
1136
- - test/**/*
1137
-
1138
- Rails/OutputSafety:
1139
- Enabled: true
1140
-
1141
- Rails/PluralizationGrammar:
1142
- Enabled: true
1143
-
1144
- Security/Eval:
1145
- Enabled: true
1146
-
1147
- Security/JSONLoad:
1148
- Enabled: true
1149
-
1150
- Security/Open:
1151
- Enabled: true
1152
-
1153
- Lint/BigDecimalNew:
1154
- Enabled: true
1155
-
1156
- Style/TrailingBodyOnClass:
1157
- Enabled: true
1158
-
1159
- Style/TrailingBodyOnModule:
1160
- Enabled: true
1161
-
1162
- Style/TrailingCommaInArrayLiteral:
1163
- EnforcedStyleForMultiline: comma
1164
- Enabled: true
1165
-
1166
- Style/TrailingCommaInHashLiteral:
1167
- EnforcedStyleForMultiline: comma
1168
- Enabled: true
1169
-
1170
- Layout/SpaceInsideReferenceBrackets:
1171
- EnforcedStyle: no_space
1172
- EnforcedStyleForEmptyBrackets: no_space
1173
- Enabled: true
1174
-
1175
- Style/ModuleFunction:
1176
- EnforcedStyle: extend_self
1177
-
1178
- Lint/OrderedMagicComments:
1179
- Enabled: true