rubocop-zuno 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4260a4f2d8b1f8b20a9c677bfed64b64351d402a03e48995fcdebfadb725b891
4
+ data.tar.gz: cfca4a71374fae4119d8b6d670603262e676c5efc34d4a7fb30ff96be8f4e17b
5
+ SHA512:
6
+ metadata.gz: 12238ab2f81cf94b91075efe8bdabb950679a94099840ef30ac0f4680d0ac482a74d0330faa9442d69fd8a69de1ce45747b31526a721f5c1b4b64feb294d2212
7
+ data.tar.gz: 036a548cacb38b0004ece7ac07a4b89c7b3e838182298d8725070ff0e4656432000c352d21971e826818e7d5d053ef83233c07255cb9a84f73123ad95ad71d44
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2025 Zuno
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # Rubocop Zuno
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/rubocop-zuno.svg)](https://badge.fury.io/rb/rubocop-zuno)
4
+ [![CI](https://github.com/zuno-tech/rubocop-zuno/actions/workflows/ci.yml/badge.svg)](https://github.com/zuno-tech/rubocop-zuno/actions/workflows/ci.yml)
5
+
6
+ Base [Rubocop](https://rubocop.org) settings for all Zuno Ruby projects.
7
+
8
+ ## Requirements
9
+
10
+ - Ruby >= 3.0
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ group :development, :test do
18
+ # ...
19
+ gem "rubocop-zuno"
20
+ end
21
+ ```
22
+
23
+ And then execute:
24
+
25
+ ```sh
26
+ bundle
27
+ ```
28
+
29
+ ## Usage
30
+
31
+ Put this into your .rubocop.yml.
32
+
33
+ ```yml
34
+ require:
35
+ - rubocop-zuno
36
+ ```
37
+
38
+ To enable additional configuration for `rubocop-rails` and `rubocop-rspec`, add the following to your .rubocop.yml:
39
+
40
+ ```yml
41
+ inherit_gem:
42
+ rubocop-zuno:
43
+ - rails.yml # use Rails cops - see Additional Extensions/Cops
44
+ - rspec.yml # use rspec cops - see Additional Extensions/Cops
45
+ ```
46
+
47
+ ## Creating new custom cops
48
+
49
+ Use the rake task new_cop to generate a cop template:
50
+
51
+ ```sh
52
+ $ bundle exec rake 'new_cop[Zuno/Name]'
53
+ [create] lib/rubocop/cop/zuno/name.rb
54
+ [create] spec/rubocop/cop/zuno/name_spec.rb
55
+ [modify] lib/rubocop/cop/boxt_cops.rb - `require_relative 'zuno/name'` was injected.
56
+ [modify] A configuration for the cop is added into config/default.yml.
57
+
58
+ ```
59
+
60
+ Documentation on creating a new cop can be found [here](https://docs.rubocop.org/rubocop/1.56/development.html#create-a-new-cop).
61
+
62
+ ### NewCops
63
+
64
+ `NewCops` is enabled by default.
65
+
66
+ ### Additional Extensions/Cops
67
+
68
+ The following Rubocop gems are also installed with this gem:
69
+
70
+ - [rubocop-faker](https://github.com/koic/rubocop-faker)
71
+ - [rubocop-performance](https://github.com/rubocop/rubocop-performance)
72
+ - [rubocop-rails](https://github.com/rubocop-hq/rubocop-rails)
73
+ - [rubocop-rake](https://github.com/rubocop-hq/rubocop-rake)
74
+ - [rubocop-rspec](https://github.com/rubocop-hq/rubocop-rspec)
75
+
76
+ To enable these add the following to your `.rubocop.yml` file.
77
+
78
+ ```yml
79
+ inherit_gem:
80
+ rubocop-zuno:
81
+ # .... add cops
82
+
83
+ require:
84
+ - rubocop-faker # if your project is using the Faker gem then add this
85
+ - rubocop-performance # Add this for performance cops
86
+ - rubocop-rails # if your project is a Rails app/engine then add this, plus the - rails.yml setting above
87
+ - rubocop-rake # if your project is using rake then add this
88
+ - rubocop-rspec # if your project is using rspec then add this, plus the - rspec.yml setting above
89
+ ```
90
+
91
+ ## Editor Plugins
92
+
93
+ There are also some useful Rubocop editor plugins to help with in-editor linting.
94
+
95
+ ### Atom
96
+
97
+ - [linter-rubocop](https://atom.io/packages/linter-rubocop)
98
+ - [rubocop-auto-correct](https://atom.io/packages/rubocop-auto-correct)
99
+
100
+ ### RubyMine
101
+
102
+ - [rubocop](https://www.jetbrains.com/help/ruby/rubocop.html)
103
+
104
+ ### VSCode
105
+
106
+ - [ruby-rubocop](https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop)
107
+
108
+ ## Contributing
109
+
110
+ Bug reports and pull requests are welcome on GitHub at https://github.com/zuno/boxt_rubocop.
111
+
112
+ ## License
113
+
114
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ desc "Map rake test to rake spec"
7
+ task test: :spec
8
+
9
+ RSpec::Core::RakeTask.new(:spec) do |spec|
10
+ spec.pattern = FileList["spec/**/*_spec.rb"]
11
+ end
12
+
13
+ desc "Generate a new cop with a template"
14
+ task :new_cop, [:cop] do |_task, args|
15
+ require "rubocop"
16
+
17
+ cop_name = args.fetch(:cop) do
18
+ warn "usage: bundle exec rake 'new_cop[Zuno/Name]'"
19
+ exit!
20
+ end
21
+
22
+ generator = RuboCop::Cop::Generator.new(cop_name)
23
+
24
+ generator.write_source
25
+ generator.write_spec
26
+ generator.inject_require(root_file_path: "lib/rubocop/cop/zuno_cops.rb")
27
+ generator.inject_config(config_file_path: "config/default.yml")
28
+
29
+ puts generator.todo
30
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 3.0.0
@@ -0,0 +1,75 @@
1
+ AllCops:
2
+ Exclude:
3
+ - "**/*/schema.rb"
4
+ - Gemfile.lock
5
+ - node_modules/**/*
6
+ - tmp/**/*
7
+ - vendor/**/*
8
+ NewCops: enable
9
+
10
+ Zuno/ApiPathFormat:
11
+ Description: "Ensure that the API path uses kebab case"
12
+ Enabled: false
13
+
14
+ Zuno/ApiTypeParameters:
15
+ Description: "Ensure that API parameters are typed"
16
+ Enabled: false
17
+
18
+ Layout/ClassStructure:
19
+ Enabled: true
20
+
21
+ Layout/LineLength:
22
+ Exclude:
23
+ - config/routes.rb
24
+ - config/routes/*
25
+ Max: 120
26
+
27
+ Metrics/AbcSize:
28
+ Exclude:
29
+ - db/migrate/**/*
30
+
31
+ Metrics/BlockLength:
32
+ CountAsOne: ["array", "hash"]
33
+ Exclude:
34
+ - "*.gemspec"
35
+ - Gemfile
36
+ - config/environments/*
37
+ - config/routes.rb
38
+ - config/routes/*
39
+ - db/migrate/**/*
40
+ - lib/tasks/**/*
41
+ - spec/**/*
42
+ - test/**/*
43
+
44
+ Metrics/ClassLength:
45
+ CountAsOne: ["array", "hash"]
46
+ Exclude:
47
+ - db/migrate/**/*
48
+ - spec/**/*
49
+ - test/**/*
50
+
51
+ Metrics/MethodLength:
52
+ CountAsOne: ["array", "heredoc", "hash"]
53
+ Exclude:
54
+ - db/migrate/**/*
55
+ - spec/**/*
56
+ - test/**/*
57
+
58
+ Metrics/ModuleLength:
59
+ CountAsOne: ["array", "hash"]
60
+
61
+ Style/Documentation:
62
+ Enabled: false
63
+
64
+ Style/DoubleNegation:
65
+ Enabled: false
66
+
67
+ Style/HashSyntax:
68
+ EnforcedShorthandSyntax: "always"
69
+
70
+ # Setting this to a max of 3 as 2 is too restrictive for some of our code
71
+ Style/SafeNavigationChainLength:
72
+ Max: 3
73
+
74
+ Style/StringLiterals:
75
+ EnforcedStyle: double_quotes
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Zuno
6
+ # Clients expect to interface with our API using kebab-case.
7
+ #
8
+ # This cop ensures that our API paths are formatted using the correct case.
9
+ #
10
+ # Underscores are acceptable in path variables (e.g. "/path/:path_id/update")
11
+ #
12
+ # @example
13
+ # # bad
14
+ # post "/admin/orders/:order_id/contact_details/update"
15
+ # get "/installation_days"
16
+ # namespace "password_resets"
17
+ # namespace :password_resets
18
+ #
19
+ # # good
20
+ # post "/admin/orders/:order_id/contact-details/update"
21
+ # get "/installation-days"
22
+ # namespace "password-resets"
23
+ #
24
+ class ApiPathFormat < RuboCop::Cop::Base
25
+ def_node_matcher :path_defining_method_with_string_path, <<~PATTERN
26
+ (send nil? {:get | :post | :put | :patch | :delete | :namespace} (:str $_))
27
+ PATTERN
28
+
29
+ def_node_matcher :namespace_with_symbol, <<~PATTERN
30
+ (send nil? :namespace (:sym $_))
31
+ PATTERN
32
+
33
+ MSG = "Use kebab-case for the API path"
34
+
35
+ def on_send(node)
36
+ path_defining_method_with_string_path(node) do |path|
37
+ add_offense(node) if path_name_does_not_follow_kebab_case?(path)
38
+ end
39
+
40
+ namespace_with_symbol(node) do |path|
41
+ add_offense(node) if path.to_s.include?("_")
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def path_name_does_not_follow_kebab_case?(path)
48
+ path.split("/").any? { |split| !split.start_with?(":") && split.include?("_") }
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Zuno
6
+ # This cop ensures that each parameter in a Grape API has a type specified.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # requires :name
11
+ # optional :age
12
+ #
13
+ # # good
14
+ # requires :name, type: String
15
+ # optional :age, type: Integer
16
+ #
17
+ class ApiTypeParameters < RuboCop::Cop::Base
18
+ API_MESSAGE = "Ensure each parameter has a type specified, e.g., `type: String`."
19
+ ENTITY_MESSAGE = "Ensure each parameter has a type specified, e.g., `documentation: { type: String }`."
20
+
21
+ def_node_matcher :param_declaration, <<-PATTERN
22
+ (send nil? {:optional :requires :expose} _ $...)
23
+ PATTERN
24
+
25
+ def_node_search :param_with_type, <<-PATTERN
26
+ (send nil? {:optional :requires} _ (hash <(pair (sym :type) $_) ...>))
27
+ PATTERN
28
+
29
+ def_node_search :entity_with_type_documentation, <<-PATTERN
30
+ (send nil? :expose _ (hash <(pair (sym :documentation) (hash <(pair (sym :type) $_) ...>)) ...>))
31
+ PATTERN
32
+
33
+ def on_send(node)
34
+ param_declaration(node) do
35
+ next unless grape_api_class?(node) || grape_entity_class?(node)
36
+
37
+ if grape_api_class?(node) && param_with_type(node).none?
38
+ add_offense(node, message: API_MESSAGE)
39
+ elsif grape_entity_class?(node) && entity_with_type_documentation(node).none?
40
+ add_offense(node, message: ENTITY_MESSAGE)
41
+ end
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def grape_api_class?(node)
48
+ grape_parent_class?(node, "Grape::API")
49
+ end
50
+
51
+ def grape_entity_class?(node)
52
+ grape_parent_class?(node, "Grape::Entity")
53
+ end
54
+
55
+ def grape_parent_class?(node, class_name)
56
+ node.each_ancestor(:class).any? do |ancestor|
57
+ ancestor.children.any? do |child|
58
+ child&.source == class_name
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "zuno/api_path_format"
4
+ require_relative "zuno/api_type_parameters"
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The original code is from https://github.com/rubocop/rubocop-rspec/blob/master/lib/rubocop/rspec/inject.rb
4
+ # See https://github.com/rubocop/rubocop-rspec/blob/master/MIT-LICENSE.md
5
+ module RuboCop
6
+ module Zuno
7
+ # Because RuboCop doesn't yet support plugins, we have to monkey patch in a
8
+ # bit of our configuration.
9
+ module Inject
10
+ def self.defaults!
11
+ path = CONFIG_DEFAULT.to_s
12
+ hash = ConfigLoader.send(:load_yaml_configuration, path)
13
+ config = Config.new(hash, path).tap(&:make_excludes_absolute)
14
+
15
+ # Using Rails.logger here will cause an error.
16
+ # See https://github.com/zuno-tech/rubocop-zuno/pull/187
17
+ # rubocop:disable Rails/Output
18
+ puts "configuration from #{path}" if ConfigLoader.debug?
19
+ # rubocop:enable Rails/Output
20
+ config = ConfigLoader.merge_with_default(config, path)
21
+ ConfigLoader.instance_variable_set(:@default_configuration, config)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Zuno
5
+ VERSION = File.read(File.join(File.dirname(__FILE__), "../../../VERSION")).split("\n").first
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "zuno/version"
4
+
5
+ module RuboCop
6
+ module Zuno
7
+ class Error < StandardError; end
8
+ PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
9
+ CONFIG_DEFAULT = PROJECT_ROOT.join("config", "default.yml").freeze
10
+ CONFIG = YAML.safe_load(CONFIG_DEFAULT.read).freeze
11
+
12
+ private_constant(:CONFIG_DEFAULT, :PROJECT_ROOT)
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubocop"
4
+
5
+ require_relative "rubocop/zuno"
6
+ require_relative "rubocop/zuno/version"
7
+ require_relative "rubocop/zuno/inject"
8
+
9
+ RuboCop::Zuno::Inject.defaults!
10
+
11
+ require_relative "rubocop/cop/zuno_cops"
data/rails.yml ADDED
@@ -0,0 +1,20 @@
1
+ Rails/ApplicationController:
2
+ Exclude:
3
+ - spec/**/*
4
+ - test/**/*
5
+
6
+ Rails/SkipsModelValidations:
7
+ Exclude:
8
+ - db/migrate/**/*
9
+ - lib/tasks/**/*
10
+ - spec/**/*
11
+ - test/**/*
12
+
13
+ Rails/UnknownEnv:
14
+ Environments:
15
+ - cucumber
16
+ - development
17
+ - production
18
+ - qa
19
+ - test
20
+ - uat
data/rspec.yml ADDED
@@ -0,0 +1,30 @@
1
+ # Excluding as we set up the rake specs as 'describe "rake namespace:task", type: :task do' which determines what task
2
+ # is being tested, and this cop doesn't like having a describe block without a class or module name.
3
+ RSpec/DescribeClass:
4
+ Exclude:
5
+ - spec/tasks/**/*
6
+
7
+ # Avoid opening modules and defining specs within them
8
+ RSpec/DescribedClassModuleWrapping:
9
+ Enabled: true
10
+
11
+ # This is to prevent Rubocop from bugging on a spec helper that doesn't contain an example, which the support ones don't
12
+ RSpec/LeadingSubject:
13
+ Exclude:
14
+ - spec/support
15
+
16
+ # Allow arrays, hashes, and method calls to be counted as one line in examples
17
+ RSpec/ExampleLength:
18
+ CountAsOne: ["array", "hash", "method_call"]
19
+
20
+ # Because 5 is a bit mean
21
+ RSpec/MultipleMemoizedHelpers:
22
+ Max: 10
23
+
24
+ # Allow there to be a max of 4 example groups deep in Rspec tests
25
+ RSpec/NestedGroups:
26
+ Max: 4
27
+
28
+ # Multi-line examples must have a description
29
+ RSpec/ExampleWithoutDescription:
30
+ EnforcedStyle: single_line_only
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubocop-zuno
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Zuno
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rubocop
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - '='
17
+ - !ruby/object:Gem::Version
18
+ version: 1.81.1
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - '='
24
+ - !ruby/object:Gem::Version
25
+ version: 1.81.1
26
+ - !ruby/object:Gem::Dependency
27
+ name: rubocop-factory_bot
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '='
31
+ - !ruby/object:Gem::Version
32
+ version: 2.27.1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '='
38
+ - !ruby/object:Gem::Version
39
+ version: 2.27.1
40
+ - !ruby/object:Gem::Dependency
41
+ name: rubocop-faker
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.3.0
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.3.0
54
+ - !ruby/object:Gem::Dependency
55
+ name: rubocop-performance
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '='
59
+ - !ruby/object:Gem::Version
60
+ version: 1.26.0
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '='
66
+ - !ruby/object:Gem::Version
67
+ version: 1.26.0
68
+ - !ruby/object:Gem::Dependency
69
+ name: rubocop-rails
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '='
73
+ - !ruby/object:Gem::Version
74
+ version: 2.33.4
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '='
80
+ - !ruby/object:Gem::Version
81
+ version: 2.33.4
82
+ - !ruby/object:Gem::Dependency
83
+ name: rubocop-rake
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '='
87
+ - !ruby/object:Gem::Version
88
+ version: 0.7.1
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '='
94
+ - !ruby/object:Gem::Version
95
+ version: 0.7.1
96
+ - !ruby/object:Gem::Dependency
97
+ name: rubocop-rspec
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '='
101
+ - !ruby/object:Gem::Version
102
+ version: 3.7.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 3.7.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: rubocop-rspec_rails
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '='
115
+ - !ruby/object:Gem::Version
116
+ version: 2.31.0
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - '='
122
+ - !ruby/object:Gem::Version
123
+ version: 2.31.0
124
+ description: Base Rubocop settings for all Zuno Ruby projects
125
+ email:
126
+ - developers@zuno.tech
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files: []
130
+ files:
131
+ - MIT-LICENSE
132
+ - README.md
133
+ - Rakefile
134
+ - VERSION
135
+ - config/default.yml
136
+ - lib/rubocop-zuno.rb
137
+ - lib/rubocop/cop/zuno/api_path_format.rb
138
+ - lib/rubocop/cop/zuno/api_type_parameters.rb
139
+ - lib/rubocop/cop/zuno_cops.rb
140
+ - lib/rubocop/zuno.rb
141
+ - lib/rubocop/zuno/inject.rb
142
+ - lib/rubocop/zuno/version.rb
143
+ - rails.yml
144
+ - rspec.yml
145
+ homepage: https://github.com/zuno-tech/rubocop-zuno
146
+ licenses:
147
+ - MIT
148
+ metadata:
149
+ rubygems_mfa_required: 'true'
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '3.2'
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubygems_version: 3.6.9
165
+ specification_version: 4
166
+ summary: Base Rubocop settings for all Zuno Ruby projects
167
+ test_files: []