solidus_dev_support 1.2.0 → 2.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +10 -17
  3. data/.github/PULL_REQUEST_TEMPLATE.md +0 -1
  4. data/.github_changelog_generator +4 -0
  5. data/.mergify.yml +39 -0
  6. data/.rubocop.yml +42 -0
  7. data/CHANGELOG.md +85 -7
  8. data/Gemfile +1 -1
  9. data/OLD_CHANGELOG.md +200 -0
  10. data/README.md +13 -6
  11. data/Rakefile +11 -1
  12. data/lib/solidus_dev_support/extension.rb +1 -1
  13. data/lib/solidus_dev_support/rake_tasks.rb +12 -0
  14. data/lib/solidus_dev_support/rspec/capybara.rb +18 -0
  15. data/lib/solidus_dev_support/rspec/feature_helper.rb +17 -18
  16. data/lib/solidus_dev_support/rspec/rails_helper.rb +28 -0
  17. data/lib/solidus_dev_support/rubocop/config.yml +82 -202
  18. data/lib/solidus_dev_support/solidus_command.rb +0 -1
  19. data/lib/solidus_dev_support/templates/extension/.circleci/config.yml +6 -0
  20. data/lib/solidus_dev_support/templates/extension/.github/stale.yml +4 -4
  21. data/lib/solidus_dev_support/templates/extension/README.md +47 -22
  22. data/lib/solidus_dev_support/templates/extension/bin/rails +7 -0
  23. data/lib/solidus_dev_support/templates/extension/bin/{r.tt → rails-engine.tt} +0 -0
  24. data/lib/solidus_dev_support/templates/extension/bin/{sandbox_rails → rails-sandbox} +1 -3
  25. data/lib/solidus_dev_support/templates/extension/bin/sandbox.tt +2 -0
  26. data/lib/solidus_dev_support/templates/extension/extension.gemspec.tt +3 -3
  27. data/lib/solidus_dev_support/templates/extension/gitignore +3 -0
  28. data/lib/solidus_dev_support/templates/extension/lib/generators/%file_name%/install/install_generator.rb.tt +5 -5
  29. data/lib/solidus_dev_support/templates/extension/rubocop.yml +0 -5
  30. data/lib/solidus_dev_support/templates/extension/spec/spec_helper.rb.tt +9 -2
  31. data/lib/solidus_dev_support/version.rb +5 -1
  32. data/solidus_dev_support.gemspec +16 -14
  33. data/spec/features/create_extension_spec.rb +171 -0
  34. data/spec/lib/extension_spec.rb +33 -0
  35. data/spec/spec_helper.rb +16 -0
  36. metadata +52 -41
  37. data/.github/stale.yml +0 -17
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # solidus_dev_support
2
2
 
3
- [![CircleCI](https://circleci.com/gh/solidusio/solidus_dev_support.svg?style=svg)](https://circleci.com/gh/solidusio/solidus_dev_support)
3
+
4
+ [![CircleCI](https://circleci.com/gh/solidusio/solidus_dev_support.svg?style=shield)](https://circleci.com/gh/solidusio/solidus_dev_support)
5
+ [![codecov](https://codecov.io/gh/solidusio/solidus_dev_support/branch/master/graph/badge.svg)](https://codecov.io/gh/solidusio/solidus_dev_support)
4
6
 
5
7
  This gem contains common development functionality for Solidus extensions.
6
8
 
@@ -50,16 +52,16 @@ sense to you.
50
52
  ### Sandbox app
51
53
 
52
54
  When developing an extension you will surely need to try it out within a Rails app with Solidus
53
- installed. Using solidus_dev_support your extension will have a `bin/sandbox_rails` executable that will
55
+ installed. Using solidus_dev_support your extension will have a `bin/rails-sandbox` executable that will
54
56
  operate on a _sandbox_ app (creating it if necessary).
55
57
 
56
- The path for the sandbox app is `./sandbox` and `bin/sandbox_rails` will forward any Rails command
58
+ The path for the sandbox app is `./sandbox` and `bin/rails-sandbox` will forward any Rails command
57
59
  to `sandbox/bin/rails`.
58
60
 
59
61
  Example:
60
62
 
61
63
  ```bash
62
- $ bin/sandbox_rails server
64
+ $ bin/rails-sandbox server
63
65
  => Booting Puma
64
66
  => Rails 6.0.2.1 application starting in development
65
67
  * Listening on tcp://127.0.0.1:3000
@@ -80,15 +82,20 @@ By default we use sqlite3 and the master branch.
80
82
 
81
83
  ### Rails generators
82
84
 
83
- Your extension will have a `bin/r` executable that you can use for generating models, migrations
85
+ Your extension will have a `bin/rails-engine` executable that you can use for generating models, migrations
84
86
  etc. It's the same as the default `rails` command in Rails engines.
85
87
 
86
88
  Example:
87
89
 
88
90
  ```bash
89
- $ bin/r generate migration AddStoreIdToProducts
91
+ $ bin/rails-engine generate migration AddStoreIdToProducts
90
92
  ```
91
93
 
94
+ ### The `bin/rails` shortcut
95
+
96
+ For convenience a `bin/rails` executable is also provided that will run everything but generators on the sandbox application. Generators will instead be processed in the context of the extension.
97
+
98
+
92
99
  ### RSpec helpers
93
100
 
94
101
  This gem provides some useful helpers for RSpec to setup an extension's test environment easily.
data/Rakefile CHANGED
@@ -1,8 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
4
 
5
+ require 'github_changelog_generator/task'
6
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
7
+ config.user = 'solidusio'
8
+ config.project = 'solidus_dev_support'
9
+ config.exclude_labels = %w[infrastructure]
10
+ config.issues = false
11
+ config.base = "#{__dir__}/OLD_CHANGELOG.md"
12
+ config.since_tag = 'v1.4.0'
13
+ end
14
+
15
+ require "rspec/core/rake_task"
6
16
  RSpec::Core::RakeTask.new(:spec)
7
17
 
8
18
  task default: :spec
@@ -89,7 +89,7 @@ module SolidusDevSupport
89
89
  'remote get-url origin',
90
90
  "git@github.com:#{github_user}/#{file_name}.git"
91
91
  ).sub(
92
- %r{^.*github\.com.([^/]+)/([^/\.]+).*$},
92
+ %r{^.*github\.com.([^/]+)/([^/.]+).*$},
93
93
  'https://github.com/\1/\2'
94
94
  )
95
95
  end
@@ -23,6 +23,7 @@ module SolidusDevSupport
23
23
  install_test_app_task
24
24
  install_dev_app_task
25
25
  install_rspec_task
26
+ install_changelog_task
26
27
  end
27
28
 
28
29
  def install_test_app_task
@@ -71,5 +72,16 @@ module SolidusDevSupport
71
72
  end
72
73
  end
73
74
  end
75
+
76
+ def install_changelog_task
77
+ require 'github_changelog_generator/task'
78
+
79
+ user, project = gemspec.homepage.split("/")[3..5]
80
+ GitHubChangelogGenerator::RakeTask.new(:changelog) do |config|
81
+ config.user = user || 'solidus-contrib'
82
+ config.project = project || gemspec.name
83
+ config.future_release = "v#{gemspec.version}"
84
+ end
85
+ end
74
86
  end
75
87
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Allow to override the initial windows size
4
+ CAPYBARA_WINDOW_SIZE = (ENV['CAPYBARA_WINDOW_SIZE'] || '1920x1080').split('x', 2).map(&:to_i)
5
+
6
+ Capybara.javascript_driver = (ENV['CAPYBARA_JAVASCRIPT_DRIVER'] || "solidus_chrome_headless").to_sym
7
+ Capybara.default_max_wait_time = 10
8
+ Capybara.server = :puma, { Silent: true } # A fix for rspec/rspec-rails#1897
9
+
10
+ Capybara.drivers[:selenium_chrome_headless].tap do |original_driver|
11
+ Capybara.register_driver :solidus_chrome_headless do |app|
12
+ original_driver.call(app).tap do |driver|
13
+ driver.options[:options].args << "--window-size=#{CAPYBARA_WINDOW_SIZE.join(',')}"
14
+ end
15
+ end
16
+ end
17
+
18
+ require 'spree/testing_support/capybara_ext'
@@ -10,30 +10,29 @@
10
10
  require 'solidus_dev_support/rspec/rails_helper'
11
11
 
12
12
  require 'capybara-screenshot/rspec'
13
- require 'capybara/apparition'
13
+ require 'solidus_dev_support/rspec/capybara'
14
14
 
15
- Capybara.javascript_driver = (ENV['CAPYBARA_DRIVER'] || :apparition).to_sym
16
- Capybara.default_max_wait_time = 10
17
- Capybara.server = :puma, { Silent: true } # A fix for rspec/rspec-rails#1897
18
-
19
- Capybara.register_driver :apparition do |app|
20
- Capybara::Apparition::Driver.new(app, window_size: [1920, 1080])
15
+ def dev_support_assets_preload
16
+ if Rails.application.respond_to?(:precompiled_assets)
17
+ Rails.application.precompiled_assets
18
+ else
19
+ # For older sprockets 2.x
20
+ Rails.application.config.assets.precompile.each do |asset|
21
+ Rails.application.assets.find_asset(asset)
22
+ end
23
+ end
21
24
  end
22
25
 
23
- require 'spree/testing_support/capybara_ext'
24
-
25
26
  RSpec.configure do |config|
26
27
  config.when_first_matching_example_defined(type: :feature) do
27
28
  config.before :suite do
28
- # Preload assets
29
- if Rails.application.respond_to?(:precompiled_assets)
30
- Rails.application.precompiled_assets
31
- else
32
- # For older sprockets 2.x
33
- Rails.application.config.assets.precompile.each do |asset|
34
- Rails.application.assets.find_asset(asset)
35
- end
36
- end
29
+ dev_support_assets_preload
30
+ end
31
+ end
32
+
33
+ config.when_first_matching_example_defined(type: :system) do
34
+ config.before :suite do
35
+ dev_support_assets_preload
37
36
  end
38
37
  end
39
38
  end
@@ -59,4 +59,32 @@ RSpec.configure do |config|
59
59
  end
60
60
 
61
61
  config.include ActiveJob::TestHelper
62
+
63
+ config.after(:suite) do
64
+ if Rails.respond_to?(:autoloaders) && Rails.autoloaders.zeitwerk_enabled?
65
+ Rails.autoloaders.main.class.eager_load_all
66
+ end
67
+ rescue NameError => e
68
+ class ZeitwerkNameError < NameError; end
69
+
70
+ error_message =
71
+ if e.message =~ /expected file .*? to define constant [\w:]+/
72
+ e.message.sub(/expected file #{Regexp.escape(File.expand_path('../..', Rails.root))}./, "expected file ")
73
+ else
74
+ e.message
75
+ end
76
+
77
+ message = <<~WARN
78
+ Zeitwerk raised the following error when trying to eager load your extension:
79
+
80
+ #{error_message}
81
+
82
+ This most likely means that your extension's file structure is not
83
+ compatible with the Zeitwerk autoloader.
84
+ Refer to https://github.com/solidusio/solidus_support#engine-extensions in
85
+ order to update the file structure to match Zeitwerk's expectations.
86
+ WARN
87
+
88
+ raise ZeitwerkNameError, message
89
+ end
62
90
  end
@@ -1,202 +1,82 @@
1
- # Relaxed.Ruby.Style
2
- ## Version 2.4
3
-
4
- Style/Alias:
5
- Enabled: false
6
- StyleGuide: https://relaxed.ruby.style/#stylealias
7
-
8
- Style/AsciiComments:
9
- Enabled: false
10
- StyleGuide: https://relaxed.ruby.style/#styleasciicomments
11
-
12
- Style/BeginBlock:
13
- Enabled: false
14
- StyleGuide: https://relaxed.ruby.style/#stylebeginblock
15
-
16
- Style/BlockDelimiters:
17
- Enabled: false
18
- StyleGuide: https://relaxed.ruby.style/#styleblockdelimiters
19
-
20
- Style/CommentAnnotation:
21
- Enabled: false
22
- StyleGuide: https://relaxed.ruby.style/#stylecommentannotation
23
-
24
- Style/Documentation:
25
- Enabled: false
26
- StyleGuide: https://relaxed.ruby.style/#styledocumentation
27
-
28
- Layout/DotPosition:
29
- Enabled: false
30
- StyleGuide: https://relaxed.ruby.style/#layoutdotposition
31
-
32
- Style/DoubleNegation:
33
- Enabled: false
34
- StyleGuide: https://relaxed.ruby.style/#styledoublenegation
35
-
36
- Style/EndBlock:
37
- Enabled: false
38
- StyleGuide: https://relaxed.ruby.style/#styleendblock
39
-
40
- Style/FormatString:
41
- Enabled: false
42
- StyleGuide: https://relaxed.ruby.style/#styleformatstring
43
-
44
- Style/IfUnlessModifier:
45
- Enabled: false
46
- StyleGuide: https://relaxed.ruby.style/#styleifunlessmodifier
47
-
48
- Style/Lambda:
49
- Enabled: false
50
- StyleGuide: https://relaxed.ruby.style/#stylelambda
51
-
52
- Style/ModuleFunction:
53
- Enabled: false
54
- StyleGuide: https://relaxed.ruby.style/#stylemodulefunction
55
-
56
- Style/MultilineBlockChain:
57
- Enabled: false
58
- StyleGuide: https://relaxed.ruby.style/#stylemultilineblockchain
59
-
60
- Style/NegatedIf:
61
- Enabled: false
62
- StyleGuide: https://relaxed.ruby.style/#stylenegatedif
63
-
64
- Style/NegatedWhile:
65
- Enabled: false
66
- StyleGuide: https://relaxed.ruby.style/#stylenegatedwhile
67
-
68
- Style/NumericPredicate:
69
- Enabled: false
70
- StyleGuide: https://relaxed.ruby.style/#stylenumericpredicate
71
-
72
- Style/ParallelAssignment:
73
- Enabled: false
74
- StyleGuide: https://relaxed.ruby.style/#styleparallelassignment
75
-
76
- Style/PercentLiteralDelimiters:
77
- Enabled: false
78
- StyleGuide: https://relaxed.ruby.style/#stylepercentliteraldelimiters
79
-
80
- Style/PerlBackrefs:
81
- Enabled: false
82
- StyleGuide: https://relaxed.ruby.style/#styleperlbackrefs
83
-
84
- Style/Semicolon:
85
- Enabled: false
86
- StyleGuide: https://relaxed.ruby.style/#stylesemicolon
87
-
88
- Style/SignalException:
89
- Enabled: false
90
- StyleGuide: https://relaxed.ruby.style/#stylesignalexception
91
-
92
- Style/SingleLineBlockParams:
93
- Enabled: false
94
- StyleGuide: https://relaxed.ruby.style/#stylesinglelineblockparams
95
-
96
- Style/SingleLineMethods:
97
- Enabled: false
98
- StyleGuide: https://relaxed.ruby.style/#stylesinglelinemethods
99
-
100
- Layout/SpaceBeforeBlockBraces:
101
- Enabled: false
102
- StyleGuide: https://relaxed.ruby.style/#layoutspacebeforeblockbraces
103
-
104
- Layout/SpaceInsideParens:
105
- Enabled: false
106
- StyleGuide: https://relaxed.ruby.style/#layoutspaceinsideparens
107
-
108
- Style/SpecialGlobalVars:
109
- Enabled: false
110
- StyleGuide: https://relaxed.ruby.style/#stylespecialglobalvars
111
-
112
- Style/StringLiterals:
113
- Enabled: false
114
- StyleGuide: https://relaxed.ruby.style/#stylestringliterals
115
-
116
- Style/TrailingCommaInArguments:
117
- Enabled: false
118
- StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarguments
119
-
120
- Style/TrailingCommaInArrayLiteral:
121
- Enabled: false
122
- StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarrayliteral
123
-
124
- Style/TrailingCommaInHashLiteral:
125
- Enabled: false
126
- StyleGuide: https://relaxed.ruby.style/#styletrailingcommainhashliteral
127
-
128
- Style/SymbolArray:
129
- Enabled: false
130
- StyleGuide: http://relaxed.ruby.style/#stylesymbolarray
131
-
132
- Style/WhileUntilModifier:
133
- Enabled: false
134
- StyleGuide: https://relaxed.ruby.style/#stylewhileuntilmodifier
135
-
136
- Style/WordArray:
137
- Enabled: false
138
- StyleGuide: https://relaxed.ruby.style/#stylewordarray
139
-
140
- Lint/AmbiguousRegexpLiteral:
141
- Enabled: false
142
- StyleGuide: https://relaxed.ruby.style/#lintambiguousregexpliteral
143
-
144
- Lint/AssignmentInCondition:
145
- Enabled: false
146
- StyleGuide: https://relaxed.ruby.style/#lintassignmentincondition
147
-
148
- Metrics/AbcSize:
149
- Enabled: false
150
-
151
- Metrics/BlockNesting:
152
- Enabled: false
153
-
154
- Metrics/ClassLength:
155
- Enabled: false
156
-
157
- Metrics/ModuleLength:
158
- Enabled: false
159
-
160
- Metrics/CyclomaticComplexity:
161
- Enabled: false
162
-
163
- # Metrics/LineLength:
164
- # Enabled: false
165
-
166
- Metrics/MethodLength:
167
- Enabled: false
168
-
169
- Metrics/ParameterLists:
170
- Enabled: false
171
-
172
- Metrics/PerceivedComplexity:
173
- Enabled: false
174
-
175
- # Our overrides after this point:
176
-
177
- require:
178
- - rubocop-rspec
179
- - rubocop-rails
180
- - rubocop-performance
181
-
182
- AllCops:
183
- TargetRubyVersion: 2.4
184
- Exclude:
185
- - spec/dummy/**/*
186
- - vendor/**/*
187
-
188
- Metrics/BlockLength:
189
- Enabled: false
190
-
191
- Metrics/LineLength:
192
- Enabled: true
193
- Max: 100
194
-
195
- RSpec/ExampleLength:
196
- Enabled: false
197
-
198
- Layout/AlignArguments:
199
- EnforcedStyle: with_fixed_indentation
200
-
201
- Layout/MultilineOperationIndentation:
202
- Enabled: false
1
+ require: ["rubocop-rspec", "rubocop-rails", "rubocop-performance"]
2
+
3
+ AllCops: {TargetRubyVersion: 2.5, Exclude: ["spec/dummy/**/*", "sandbox/**/*", "vendor/**/*"], NewCops: enable}
4
+
5
+ Layout/ArgumentAlignment: {EnforcedStyle: with_fixed_indentation}
6
+ Layout/DotPosition: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#layoutdotposition"}
7
+ Layout/EmptyLinesAroundAttributeAccessor: {Enabled: true}
8
+ Layout/FirstArgumentIndentation: {EnforcedStyle: "consistent"}
9
+ Layout/FirstArrayElementIndentation: {EnforcedStyle: "consistent"}
10
+ Layout/LineLength: {Enabled: true, Max: 120}
11
+ Layout/MultilineOperationIndentation: {Enabled: false}
12
+ Layout/SpaceAroundMethodCallOperator: {Enabled: true}
13
+ Layout/SpaceBeforeBlockBraces: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#layoutspacebeforeblockbraces"}
14
+ Layout/SpaceInsideParens: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#layoutspaceinsideparens"}
15
+ Lint/AmbiguousRegexpLiteral: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#lintambiguousregexpliteral"}
16
+ Lint/AssignmentInCondition: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#lintassignmentincondition"}
17
+ Lint/DeprecatedOpenSSLConstant: {Enabled: true}
18
+ Lint/MixedRegexpCaptureTypes: {Enabled: true}
19
+ Lint/RaiseException: {Enabled: true}
20
+ Lint/StructNewOverride: {Enabled: true}
21
+ Metrics/AbcSize: {Enabled: false}
22
+ Metrics/BlockLength: {Enabled: false}
23
+ Metrics/BlockNesting: {Enabled: false}
24
+ Metrics/ClassLength: {Enabled: false}
25
+ Metrics/CyclomaticComplexity: {Enabled: false}
26
+ Metrics/MethodLength: {Enabled: false}
27
+ Metrics/ModuleLength: {Enabled: false}
28
+ Metrics/ParameterLists: {Enabled: false}
29
+ Metrics/PerceivedComplexity: {Enabled: false}
30
+ Performance/AncestorsInclude: {Enabled: true}
31
+ Performance/BigDecimalWithNumericArgument: {Enabled: true}
32
+ Performance/RedundantSortBlock: {Enabled: true}
33
+ Performance/RedundantStringChars: {Enabled: true}
34
+ Performance/ReverseFirst: {Enabled: true}
35
+ Performance/SortReverse: {Enabled: true}
36
+ Performance/Squeeze: {Enabled: true}
37
+ Performance/StringInclude: {Enabled: true}
38
+ RSpec/DescribeClass: {Exclude: ["spec/features/**/*"]} # Feature specs are not describing any class or module.
39
+ RSpec/ExampleLength: {Enabled: false}
40
+ Style/AccessorGrouping: {Enabled: true}
41
+ Style/Alias: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylealias"}
42
+ Style/AsciiComments: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styleasciicomments"}
43
+ Style/BeginBlock: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylebeginblock"}
44
+ Style/BisectedAttrAccessor: {Enabled: true}
45
+ Style/BlockDelimiters: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styleblockdelimiters"}
46
+ Style/CommentAnnotation: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylecommentannotation"}
47
+ Style/Documentation: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styledocumentation"}
48
+ Style/DoubleNegation: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styledoublenegation"}
49
+ Style/EndBlock: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styleendblock"}
50
+ Style/ExponentialNotation: {Enabled: true}
51
+ Style/FormatString: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styleformatstring"}
52
+ Style/FrozenStringLiteralComment: {Exclude: ["spec/**/*", "db/migrate/**/*", "bin/**/*"]}
53
+ Style/HashEachMethods: {Enabled: true}
54
+ Style/HashTransformKeys: {Enabled: true}
55
+ Style/HashTransformValues: {Enabled: true}
56
+ Style/IfUnlessModifier: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styleifunlessmodifier"}
57
+ Style/Lambda: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylelambda"}
58
+ Style/ModuleFunction: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylemodulefunction"}
59
+ Style/MultilineBlockChain: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylemultilineblockchain"}
60
+ Style/NegatedIf: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylenegatedif"}
61
+ Style/NegatedWhile: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylenegatedwhile"}
62
+ Style/NumericPredicate: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylenumericpredicate"}
63
+ Style/ParallelAssignment: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styleparallelassignment"}
64
+ Style/PercentLiteralDelimiters: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylepercentliteraldelimiters"}
65
+ Style/PerlBackrefs: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styleperlbackrefs"}
66
+ Style/RedundantAssignment: {Enabled: true}
67
+ Style/RedundantFetchBlock: {Enabled: true}
68
+ Style/RedundantRegexpCharacterClass: {Enabled: true}
69
+ Style/RedundantRegexpEscape: {Enabled: true}
70
+ Style/Semicolon: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylesemicolon"}
71
+ Style/SignalException: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylesignalexception"}
72
+ Style/SingleLineBlockParams: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylesinglelineblockparams"}
73
+ Style/SingleLineMethods: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylesinglelinemethods"}
74
+ Style/SlicingWithRange: {Enabled: true}
75
+ Style/SpecialGlobalVars: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylespecialglobalvars"}
76
+ Style/StringLiterals: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylestringliterals"}
77
+ Style/SymbolArray: {Enabled: false, StyleGuide: "http://relaxed.ruby.style/#stylesymbolarray"}
78
+ Style/TrailingCommaInArguments: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styletrailingcommainarguments"}
79
+ Style/TrailingCommaInArrayLiteral: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styletrailingcommainarrayliteral"}
80
+ Style/TrailingCommaInHashLiteral: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#styletrailingcommainhashliteral"}
81
+ Style/WhileUntilModifier: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylewhileuntilmodifier"}
82
+ Style/WordArray: {Enabled: false, StyleGuide: "https://relaxed.ruby.style/#stylewordarray"}