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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +114 -0
- data/Rakefile +30 -0
- data/VERSION +1 -0
- data/config/default.yml +75 -0
- data/lib/rubocop/cop/zuno/api_path_format.rb +53 -0
- data/lib/rubocop/cop/zuno/api_type_parameters.rb +65 -0
- data/lib/rubocop/cop/zuno_cops.rb +4 -0
- data/lib/rubocop/zuno/inject.rb +25 -0
- data/lib/rubocop/zuno/version.rb +7 -0
- data/lib/rubocop/zuno.rb +14 -0
- data/lib/rubocop-zuno.rb +11 -0
- data/rails.yml +20 -0
- data/rspec.yml +30 -0
- metadata +167 -0
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
|
+
[](https://badge.fury.io/rb/rubocop-zuno)
|
4
|
+
[](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
|
data/config/default.yml
ADDED
@@ -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,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
|
data/lib/rubocop/zuno.rb
ADDED
@@ -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
|
data/lib/rubocop-zuno.rb
ADDED
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: []
|