rubocop-config-captive 1.0.0.pre.alpha.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 89d38bf5656750c061e2f17069a6b5b9e2919d462cc1fb527c15896cf807c751
4
+ data.tar.gz: 700106edcfd7d46a29150039913a00d1033c6c80ba222cf54c4754da0d729a75
5
+ SHA512:
6
+ metadata.gz: d24d1dff0a51f0fa491d7233ccc9a2e5b7f9d1ca14519feaa6c65120c3694455bc353e044d625848bad04c53ea69a733ca35fe834ec5449a126deaca64cd75a3
7
+ data.tar.gz: d79d9497e83fcfbb5b26cee87bc7fea4b1d017899bda5b75baf22f9cfcac5977589ba5efb870a9f80b07f7d62f9f2b135d698a0503426e3c1682e702b25b5339
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gemspec
6
+
7
+ gem "rubocop", "~> 1.21"
8
+ gem 'rspec'
9
+ gem 'rubocop-rspec'
10
+
11
+ group :test do
12
+ gem 'pry'
13
+ end
data/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # Captive Rubocop config
2
+
3
+ [![License][license-image]][license-url]
4
+
5
+ > Rubocop shared configurations for projects
6
+
7
+ ## Install
8
+
9
+ add the follow line into your `Gemfile`
10
+
11
+ ```ruby
12
+ group :test, :development do
13
+ gem 'rubocop-config-captive', github: 'Captive-Studio/rubocop-config'
14
+ end
15
+ ```
16
+
17
+ And then in a terminal
18
+
19
+ ```console
20
+ $ bundle install
21
+ [...]
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ ```yml
27
+ # /.rubocop.yml
28
+ inherit_gem:
29
+ rubocop-config-captive:
30
+ - config/default.yml
31
+ # -OR-
32
+ # - config/rubocop-XXX.yml
33
+ ```
34
+
35
+ ## My project has too many errors
36
+
37
+ Firstly, you can use `bundle exec rubocop -a` to auto-correct your project
38
+
39
+ Then if you have too many warnings, you can use the command line :
40
+
41
+ `bundle exec rubocop --auto-gen-config` to create `.rubocop_todo.yml` file that ignore these errors
42
+
43
+ ## Contributing
44
+
45
+ To contribute, here are some inspirations for good configurations :
46
+
47
+ - [Airbnb](https://github.com/airbnb/ruby/tree/main/rubocop-airbnb)
48
+
49
+ ## License
50
+ <!-- AUTO-GENERATED-CONTENT:START (PKG_JSON:template=[${license}][license-url] © ${author}) -->
51
+ [MIT][license-url] © Captive Studio <julien.polo@captive.fr>
52
+
53
+ <!-- AUTO-GENERATED-CONTENT:START (PKG_JSON:template=[license-image]: https://img.shields.io/badge/license-${license}-green.svg?style=flat-square) -->
54
+ [license-image]: https://img.shields.io/badge/license-MIT-green.svg?style=flat-square
55
+ <!-- AUTO-GENERATED-CONTENT:END -->
56
+ [license-url]: ./LICENSE
@@ -0,0 +1,20 @@
1
+ # Straight up ripped from the custom Rspec rubocop
2
+ # https://github.com/nevir/rubocop-rspec/blob/master/lib/rubocop/rspec/inject.rb
3
+ require 'yaml'
4
+
5
+ module RuboCop
6
+ module Captive
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.load_file(path).to_hash
13
+ config = Config.new(hash, path)
14
+ puts "configuration from #{path}" if ConfigLoader.debug?
15
+ config = ConfigLoader.merge_with_default(config, path)
16
+ ConfigLoader.instance_variable_set(:@default_configuration, config)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require 'pathname'
2
+ require 'psych'
3
+
4
+ Dir.glob(File.expand_path('cop/**/*.rb', File.dirname(__FILE__))).map(&method(:require))
5
+
6
+ module RuboCop
7
+ # RuboCop Captive project namespace
8
+ module Captive
9
+ PROJECT_ROOT =
10
+ Pathname.new(__FILE__).parent.parent.parent.expand_path.freeze
11
+ CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze
12
+ CONFIG = Psych.safe_load(CONFIG_DEFAULT.read).freeze
13
+
14
+ private_constant(*constants(false))
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Captive
6
+ module ActiveAdmin
7
+ class ActiveAdminAddonsPresence < RuboCop::Cop::Cop
8
+ MSG = "The gem `activeadmin_addons` should be added to the Gemfile "\
9
+ "if `activeadmin` is present in Gemfile"
10
+
11
+ def on_send(node)
12
+ return unless node.command?(:gem)
13
+
14
+ gem_name = node.arguments[0]&.value
15
+ return unless gem_name == 'activeadmin'
16
+
17
+ add_offense(node, message: MSG) unless activeadmin_addons_present?
18
+ end
19
+
20
+ private
21
+
22
+ def activeadmin_addons_present?
23
+ Gem.loaded_specs.keys.include?('activeadmin_addons')
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Captive
6
+ class StringWhereInScope < RuboCop::Cop::Cop
7
+ MSG = 'The `where` method should be used in a scope in a model.'
8
+
9
+ def_node_matcher :where_with_string?, <<~PATTERN
10
+ (send _ :where (str _) ...)
11
+ PATTERN
12
+
13
+ def on_send(node)
14
+ return unless where_with_string?(node)
15
+
16
+ options_node = node.arguments[0]
17
+ return if options_node&.hash_type?
18
+
19
+ add_offense(options_node, message: MSG)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Captive
6
+ module Translation
7
+ class DeviseI18nPresence < RuboCop::Cop::Cop
8
+ MSG = "The gem `devise-i18n` should be added to the Gemfile "\
9
+ "if `devise` is present in Gemfile"
10
+
11
+ def on_send(node)
12
+ return unless node.command?(:gem)
13
+
14
+ gem_name = node.arguments[0]&.value
15
+ return unless gem_name == 'devise'
16
+
17
+ add_offense(node, message: MSG) unless devise_i18n_present?
18
+ end
19
+
20
+ private
21
+
22
+ def devise_i18n_present?
23
+ Gem.loaded_specs.keys.include?('devise-i18n')
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop'
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Captive
8
+ module Translation
9
+ class KaminariI18nPresence < RuboCop::Cop::Cop
10
+ MSG = "The gem `kaminari-i18n` should be added to the Gemfile "\
11
+ "if `kaminari` is present in Gemfile"
12
+
13
+ def on_send(node)
14
+ return unless node.command?(:gem)
15
+
16
+ gem_name = node.arguments[0]&.value
17
+ return unless gem_name == 'kaminari'
18
+
19
+ add_offense(node, message: MSG) unless kaminari_i18n_present?
20
+ end
21
+
22
+ private
23
+
24
+ def kaminari_i18n_present?
25
+ Gem.loaded_specs.keys.include?('kaminari-i18n')
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop'
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Captive
8
+ module Translation
9
+ class RailsI18nPresence < RuboCop::Cop::Cop
10
+ MSG = "The gem `rails-i18n` should be added to the Gemfile "\
11
+ "if `rails` is present in Gemfile"
12
+
13
+ def on_send(node)
14
+ return unless node.command?(:gem)
15
+
16
+ gem_name = node.arguments[0]&.value
17
+ return unless gem_name == 'rails'
18
+
19
+ add_offense(node, message: MSG) unless rails_i18n_present?
20
+ end
21
+
22
+ private
23
+
24
+ def rails_i18n_present?
25
+ Gem.loaded_specs.keys.include?('rails-i18n')
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,14 @@
1
+ require 'pathname'
2
+ require 'yaml'
3
+
4
+ # Load original rubocop gem
5
+ require 'rubocop'
6
+
7
+ require 'rubocop-performance'
8
+ require 'rubocop-rails'
9
+
10
+ require 'rubocop/captive'
11
+ require 'rubocop/captive/inject'
12
+ # require 'rubocop/airbnb/version'
13
+
14
+ RuboCop::Captive::Inject.defaults!
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = 'rubocop-config-captive'
5
+ gem.version = '1.0.0-alpha.3'
6
+ gem.summary = 'Shared rubocop configurations'
7
+ gem.description = 'Shared rubocop configuration for Captive projects'
8
+ gem.authors = ['Captive', 'Julien Polo', "Clément Prod'homme"]
9
+ gem.email = ['julien.polo@captive.fr']
10
+ gem.homepage = 'https://github.com/Captive-Studio/rubocop-config'
11
+ gem.license = 'MIT'
12
+ gem.required_ruby_version = '>= 2.5'
13
+
14
+ gem.files = Dir[
15
+ '{conf,lib}/**/*',
16
+ '*.md',
17
+ '*.gemspec',
18
+ 'Gemfile',
19
+ ]
20
+
21
+ # It is not clear what the level of support is provided by Airbnb
22
+ # ⚠️ Instead of depending on rubocop-airbnb we copy sources
23
+ #
24
+ # gem.add_dependency('rubocop-airbnb', '~> 4.0.0')
25
+ gem.add_dependency('rubocop', '~> 1.49.0')
26
+ gem.add_dependency('rubocop-performance', '~> 1.16.0 ')
27
+ gem.add_dependency('rubocop-rake', '~> 0.6.0')
28
+ gem.add_dependency('rubocop-rails', '~> 2.18.0')
29
+ gem.add_dependency('rubocop-rspec', '~> 2.19.0')
30
+ gem.add_dependency('rubocop-capybara', '~> 2.17.1')
31
+ gem.add_development_dependency('rspec', '~> 3.12')
32
+ # gem.metadata['rubygems_mfa_required'] = 'true'
33
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubocop-config-captive
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre.alpha.3
5
+ platform: ruby
6
+ authors:
7
+ - Captive
8
+ - Julien Polo
9
+ - Clément Prod'homme
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2023-04-06 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rubocop
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: 1.49.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: 1.49.0
29
+ - !ruby/object:Gem::Dependency
30
+ name: rubocop-performance
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: 1.16.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: 1.16.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: rubocop-rake
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 0.6.0
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: 0.6.0
57
+ - !ruby/object:Gem::Dependency
58
+ name: rubocop-rails
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: 2.18.0
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: 2.18.0
71
+ - !ruby/object:Gem::Dependency
72
+ name: rubocop-rspec
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: 2.19.0
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: 2.19.0
85
+ - !ruby/object:Gem::Dependency
86
+ name: rubocop-capybara
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: 2.17.1
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: 2.17.1
99
+ - !ruby/object:Gem::Dependency
100
+ name: rspec
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '3.12'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '3.12'
113
+ description: Shared rubocop configuration for Captive projects
114
+ email:
115
+ - julien.polo@captive.fr
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - Gemfile
121
+ - README.md
122
+ - lib/rubocop-captive.rb
123
+ - lib/rubocop/captive.rb
124
+ - lib/rubocop/captive/inject.rb
125
+ - lib/rubocop/cop/captive/active_admin/active_admin_addons_presence.rb
126
+ - lib/rubocop/cop/captive/string_where_in_scope.rb
127
+ - lib/rubocop/cop/captive/translation/devise_i18n_presence.rb
128
+ - lib/rubocop/cop/captive/translation/kaminari_i18n_presence.rb
129
+ - lib/rubocop/cop/captive/translation/rails_i18n_presence.rb
130
+ - rubocop-config-captive.gemspec
131
+ homepage: https://github.com/Captive-Studio/rubocop-config
132
+ licenses:
133
+ - MIT
134
+ metadata: {}
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '2.5'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">"
147
+ - !ruby/object:Gem::Version
148
+ version: 1.3.1
149
+ requirements: []
150
+ rubygems_version: 3.3.26
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: Shared rubocop configurations
154
+ test_files: []