solidus_dev_support 1.1.0 → 1.6.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 +4 -4
- data/.circleci/config.yml +7 -16
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -1
- data/.github_changelog_generator +4 -0
- data/.mergify.yml +39 -0
- data/.rubocop.yml +42 -0
- data/CHANGELOG.md +74 -5
- data/Gemfile +1 -1
- data/OLD_CHANGELOG.md +200 -0
- data/README.md +13 -6
- data/Rakefile +11 -1
- data/lib/solidus_dev_support/extension.rb +1 -1
- data/lib/solidus_dev_support/rake_tasks.rb +12 -0
- data/lib/solidus_dev_support/rspec/feature_helper.rb +18 -9
- data/lib/solidus_dev_support/rspec/rails_helper.rb +28 -0
- data/lib/solidus_dev_support/rubocop/config.yml +82 -202
- data/lib/solidus_dev_support/solidus_command.rb +0 -1
- data/lib/solidus_dev_support/templates/extension/.circleci/config.yml +6 -0
- data/lib/solidus_dev_support/templates/extension/README.md +43 -22
- data/lib/solidus_dev_support/templates/extension/bin/rails +7 -0
- data/lib/solidus_dev_support/templates/extension/bin/{r.tt → rails-engine.tt} +0 -0
- data/lib/solidus_dev_support/templates/extension/bin/{sandbox_rails → rails-sandbox} +1 -3
- data/lib/solidus_dev_support/templates/extension/bin/sandbox.tt +3 -0
- data/lib/solidus_dev_support/templates/extension/extension.gemspec.tt +2 -2
- data/lib/solidus_dev_support/templates/extension/gitignore +3 -0
- data/lib/solidus_dev_support/templates/extension/lib/%file_name%/engine.rb.tt +1 -1
- data/lib/solidus_dev_support/templates/extension/lib/generators/%file_name%/install/install_generator.rb.tt +5 -5
- data/lib/solidus_dev_support/templates/extension/rubocop.yml +0 -5
- data/lib/solidus_dev_support/templates/extension/spec/spec_helper.rb.tt +9 -2
- data/lib/solidus_dev_support/version.rb +1 -1
- data/solidus_dev_support.gemspec +14 -12
- data/spec/features/create_extension_spec.rb +166 -0
- data/spec/lib/extension_spec.rb +33 -0
- data/spec/spec_helper.rb +16 -0
- metadata +37 -27
- data/.github/stale.yml +0 -17
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            # solidus_dev_support
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
             | 
| 4 | 
            +
            [](https://circleci.com/gh/solidusio/solidus_dev_support)
         | 
| 5 | 
            +
            [](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/ | 
| 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/ | 
| 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/ | 
| 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/ | 
| 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/ | 
| 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
         | 
| @@ -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
         | 
| @@ -22,18 +22,27 @@ end | |
| 22 22 |  | 
| 23 23 | 
             
            require 'spree/testing_support/capybara_ext'
         | 
| 24 24 |  | 
| 25 | 
            +
            def dev_support_assets_preload
         | 
| 26 | 
            +
              if Rails.application.respond_to?(:precompiled_assets)
         | 
| 27 | 
            +
                Rails.application.precompiled_assets
         | 
| 28 | 
            +
              else
         | 
| 29 | 
            +
                # For older sprockets 2.x
         | 
| 30 | 
            +
                Rails.application.config.assets.precompile.each do |asset|
         | 
| 31 | 
            +
                  Rails.application.assets.find_asset(asset)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| 35 | 
            +
             | 
| 25 36 | 
             
            RSpec.configure do |config|
         | 
| 26 37 | 
             
              config.when_first_matching_example_defined(type: :feature) do
         | 
| 27 38 | 
             
                config.before :suite do
         | 
| 28 | 
            -
                   | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
                    end
         | 
| 36 | 
            -
                  end
         | 
| 39 | 
            +
                  dev_support_assets_preload
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              config.when_first_matching_example_defined(type: :system) do
         | 
| 44 | 
            +
                config.before :suite do
         | 
| 45 | 
            +
                  dev_support_assets_preload
         | 
| 37 46 | 
             
                end
         | 
| 38 47 | 
             
              end
         | 
| 39 48 | 
             
            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 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
            Style/ | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
            Style/ | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
            Style/ | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
            Style/ | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
            Style/ | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
            Style/NegatedIf:
         | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
            Style/ | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
            Style/ | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
            Style/ | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
            Style/ | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
            Style/ | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 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/**/*"]}
         | 
| 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"}
         |