boxt_ruby_style_guide 7.6.0 → 7.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7fdb78910aef325a37d80abf635b2c675d190e63669133b14f19ebcad1c480d9
4
- data.tar.gz: 5c58cb56cfeb23d4769f8681bd21c16b5f39a3401ecbb6a016b3ba7cdf1c68f7
3
+ metadata.gz: df02aaff031561dd78d64ead4f814ff7b3dca32ed71c6e5ca80d0921a7a57ba6
4
+ data.tar.gz: c9e037578d06d41dafeaf714db0f1c2db9de4a63ab718a2188a943090301885c
5
5
  SHA512:
6
- metadata.gz: be5aa640996292e3d526e91a27fb2365eebb84c2e2c02f32f0a1d2b47dbe04340e0e11f15a30d9b6c60a2b25a56430dce48a950cf2522b227ce0f51acb99c58d
7
- data.tar.gz: 667f275e3560ec91b6c20ca8bdd6f58cfc7f079c1207812d891af364e5a086823e0f7679c8e0537598c9dd4f03d230c7853b8828787a481eb2a8e5b023adfc28
6
+ metadata.gz: 70be516ec5d55e77c4b0afde9fccff43f5ec2cc3f32dd57e14fca433c1e4cac544f655361994bc4e891db2d7090122e1c2c1165684776ac26f4a62c4b91344c5
7
+ data.tar.gz: b727e3d6d32dc4d329f559c0bf7a482408c1f166e9f3868bd511c5734f4c740539710cdd55a99bad327a3d18cc291f1a057509283483b562b9df7227f1c481a9
data/README.md CHANGED
@@ -24,13 +24,6 @@ And then execute:
24
24
  bundle
25
25
  ```
26
26
 
27
- To make the lint rake tasks available to non Rails apps and gems, add the following to the project's `Rakefile`:
28
-
29
- ```ruby
30
- require "boxt_ruby_style_guide"
31
- BoxtRubyStyleGuide.install_tasks
32
- ```
33
-
34
27
  Rails apps should have access to the lint tasks by default.
35
28
 
36
29
  ## Usage
@@ -41,10 +34,10 @@ Add a `.rubocop.yml` file to the root of your project with the following setting
41
34
  inherit_gem:
42
35
  boxt_ruby_style_guide:
43
36
  - default.yml # use default cops
44
- - pending.yml # use pending cops
37
+ - pending.yml # use pending cops
45
38
  - rails.yml # use Rails cops - see Additional Extensions/Cops
46
- - rails-pending.yml # use pending rails cops
47
- - rspec.yml # use rspec cops
39
+ - rails-pending.yml # use pending rails cops
40
+ - rspec.yml # use rspec cops
48
41
  ```
49
42
 
50
43
  ### Additional Extensions/Cops
@@ -60,7 +53,7 @@ To enable add the following to your `.rubocop.yml` file.
60
53
  ```yml
61
54
  inherit_gem:
62
55
  boxt_ruby_style_guide:
63
- # .... add cops
56
+ # .... add cops
64
57
 
65
58
  require:
66
59
  - rubocop-faker # if your project is using the Faker gem then add this
@@ -75,9 +68,17 @@ Lint tasks to run against files listed as changed by Git.
75
68
  To run `rubocop` against any changed files use:
76
69
 
77
70
  ```sh
78
- rake lint:rubocop
71
+ RUBOCOP_LINT_BASE=your-base-branch rake lint:rubocop
79
72
  ```
80
73
 
74
+ To run `rubocop` with autofix, use one of the following:
75
+
76
+ ```sh
77
+ RUBOCOP_LINT_BASE=your-base-branch rake lint:rubocop -a
78
+ RUBOCOP_LINT_BASE=your-base-branch rake lint:rubocop -A
79
+ ```
80
+
81
+
81
82
  If there are no changed files the commands will run against all files.
82
83
 
83
84
  ## Editor Plugins
data/Rakefile CHANGED
@@ -10,4 +10,5 @@ RSpec::Core::RakeTask.new(:spec) do |t|
10
10
  t.pattern = Dir.glob("spec/**/*_spec.rb")
11
11
  end
12
12
 
13
+ desc "Map rake test to rake spec"
13
14
  task test: :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 7.6.0
1
+ 7.9.0
data/default.yml CHANGED
@@ -1,11 +1,11 @@
1
1
  AllCops:
2
2
  Exclude:
3
3
  - "**/*/schema.rb"
4
- - Gemfile.lock
5
- - node_modules/**/*
6
- - tmp/**/*
7
- - vendor/**/*
8
- TargetRubyVersion: 2.7.1
4
+ - "Gemfile.lock"
5
+ - "node_modules/**/*"
6
+ - "tmp/**/*"
7
+ - "vendor/**/*"
8
+ TargetRubyVersion: 2.7.2
9
9
  Layout/LineLength:
10
10
  Exclude:
11
11
  - config/routes.rb
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BoxtRubyStyleGuide
4
+ ##
5
+ # Sanitizes a list of filepaths based on Rubocops exclusions
6
+ class FilepathMatcher
7
+ require "yaml"
8
+
9
+ ##
10
+ # Compare a given filepath with a grep-style filename pattern
11
+ FILEPATH_PATTERN_MATCH = proc do |filepath, pattern|
12
+ File.fnmatch(pattern, filepath, File::FNM_PATHNAME)
13
+ end
14
+
15
+ ##
16
+ # Array of file patterns to make sure we only check files that are Ruby files
17
+ INCLUDE_PATTERNS = %w[
18
+ Gemfile
19
+ Rakefile
20
+ *.gemspec
21
+ **/*.rb
22
+ **/*.rake
23
+ ].freeze
24
+
25
+ ##
26
+ # Array of the excluded files from Rubocop default.yml config
27
+ EXCLUDE_PATTERNS = YAML.load_file(
28
+ BoxtRubyStyleGuide.root.join("default.yml")
29
+ ).dig("AllCops", "Exclude")
30
+
31
+ attr_reader :filepaths
32
+
33
+ def initialize(*filepaths)
34
+ @filepaths = filepaths
35
+ end
36
+
37
+ def all_matches
38
+ filepaths.select do |filepath|
39
+ filepath_proc = FILEPATH_PATTERN_MATCH.curry.call(filepath)
40
+ INCLUDE_PATTERNS.any?(filepath_proc) && EXCLUDE_PATTERNS.none?(filepath_proc)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BoxtRubyStyleGuide
4
+ # Returns a list of files that have changed, as detected by `git-diff`
5
+ #
6
+ # TODO: Write tests for this to ensure we're pulling the desired diff files
7
+ # see: https://github.com/ruby-git/ruby-git
8
+ class GitDiff
9
+ require "git"
10
+
11
+ ##
12
+ # List of Git statuses we should test
13
+ # See: https://git-scm.com/docs/git-status#_short_format
14
+ TEST_STATUSES = %w[M A U].freeze
15
+
16
+ attr_reader :base
17
+
18
+ def initialize(base:)
19
+ @base = base
20
+ end
21
+
22
+ ##
23
+ # A list of the local file paths of Ruby files with committed changes.
24
+ #
25
+ # Returns Array
26
+ def all
27
+ @all ||= begin
28
+ git.diff(base).name_status.select { |_, stat| TEST_STATUSES.include?(stat) }.keys
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def git
35
+ @git ||= Git.open(".")
36
+ end
37
+ end
38
+ end
data/lib/tasks/lint.rake CHANGED
@@ -1,64 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "boxt_ruby_style_guide"
4
+ require "boxt_ruby_style_guide/filepath_matcher"
5
+ require "boxt_ruby_style_guide/git_diff"
4
6
  require "rubocop"
5
7
 
6
- ##
7
- # The base branch to compare HEAD with for changes
8
- BASE_BRANCH = "develop"
9
-
10
- ##
11
- # Directories containing Ruby files to lint
12
- RUBY_DIRS = %w[app lib test spec].freeze
13
-
14
- ##
15
- # Grep file pattern to make sure we only check files that are Ruby files
16
- # This pattern matches the following:
17
- #
18
- # - Gemfile
19
- # - Rakefile
20
- # - *.gemspec
21
- # - app/**/*.{rb,rake}
22
- # - lib/**/*.{rb,rake}
23
- # - test/**/*.{rb,rake}
24
- # - spec/**/*.{rb,rake}
25
- #
26
- GREP_PATTERN = <<~STRING.delete("\n").delete("\s")
27
- (
28
- (#{RUBY_DIRS.join('|')})\\/.+\\.(rb|rake)
29
- |^
30
- (Gemfile|Rakefile|.+\\.gemspec)
31
- \Z)
32
- STRING
33
-
34
8
  namespace :lint do
35
9
  desc "Runs rubocop against all files with committed changes different from base branch"
36
10
  task :rubocop do
37
- exec(<<~BASH)
38
- RUBOCOP_CHANGED_FILES=`#{diff_file_paths}`
39
- if [ -z "$RUBOCOP_CHANGED_FILES" ]; then
40
- echo "No matching Ruby files changed"
41
- else
42
- bundle exec rubocop $RUBOCOP_CHANGED_FILES
43
- fi
44
- BASH
11
+ file_paths = sanitized_file_paths
12
+ puts "File paths: #{file_paths.join(', ')}"
13
+
14
+ if file_paths.any?
15
+ auto_flag_opt = ARGV.select { |a| ["-a", "-A"].include?(a) }.first
16
+ exec("bundle exec rubocop #{file_paths.join(' ')} #{auto_flag_opt}".strip)
17
+ else
18
+ puts "No Ruby files changed"
19
+ end
45
20
  end
21
+ end
46
22
 
47
- private
23
+ private
48
24
 
49
- # A list of the local file paths of Ruby files with committed changes.
50
- #
51
- # Run a git diff-tree command with the following otions:
52
- # -r recursive
53
- # --name-only Only return the name of the files
54
- # --diff-filter Filter out results that have been deleted on HEAD
55
- #
56
- # Pipe the output from this command through grep to match only Ruby files in the
57
- # desired directories
58
- #
59
- # Returns String
60
- def diff_file_paths
61
- base_branch = ENV.fetch("RUBOCOP_LINT_BASE", BASE_BRANCH)
62
- "git diff -r --name-only --diff-filter=d #{base_branch} | egrep '#{GREP_PATTERN}'"
63
- end
25
+ # Returns an array of files
26
+ def sanitized_file_paths
27
+ base = ENV.fetch("RUBOCOP_LINT_BASE", "main")
28
+ changed_files = BoxtRubyStyleGuide::GitDiff.new(base: base).all
29
+ BoxtRubyStyleGuide::FilepathMatcher.new(*changed_files).all_matches
64
30
  end
metadata CHANGED
@@ -1,49 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boxt_ruby_style_guide
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.6.0
4
+ version: 7.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boxt
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-12 00:00:00.000000000 Z
11
+ date: 2021-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rubocop
14
+ name: git
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.92.0
19
+ version: '1.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.92.0
26
+ version: '1.4'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rails
28
+ name: rubocop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">"
32
- - !ruby/object:Gem::Version
33
- version: '5'
34
- - - "<"
31
+ - - '='
35
32
  - !ruby/object:Gem::Version
36
- version: '7'
37
- type: :development
33
+ version: 1.9.1
34
+ type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - ">"
42
- - !ruby/object:Gem::Version
43
- version: '5'
44
- - - "<"
38
+ - - '='
45
39
  - !ruby/object:Gem::Version
46
- version: '7'
40
+ version: 1.9.1
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: rubocop-faker
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -64,28 +58,42 @@ dependencies:
64
58
  requirements:
65
59
  - - '='
66
60
  - !ruby/object:Gem::Version
67
- version: 2.8.1
61
+ version: 2.9.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.9.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.5.1
68
76
  type: :runtime
69
77
  prerelease: false
70
78
  version_requirements: !ruby/object:Gem::Requirement
71
79
  requirements:
72
80
  - - '='
73
81
  - !ruby/object:Gem::Version
74
- version: 2.8.1
82
+ version: 0.5.1
75
83
  - !ruby/object:Gem::Dependency
76
84
  name: rubocop-rspec
77
85
  requirement: !ruby/object:Gem::Requirement
78
86
  requirements:
79
87
  - - '='
80
88
  - !ruby/object:Gem::Version
81
- version: 1.43.2
89
+ version: 2.1.0
82
90
  type: :runtime
83
91
  prerelease: false
84
92
  version_requirements: !ruby/object:Gem::Requirement
85
93
  requirements:
86
94
  - - '='
87
95
  - !ruby/object:Gem::Version
88
- version: 1.43.2
96
+ version: 2.1.0
89
97
  - !ruby/object:Gem::Dependency
90
98
  name: bundler
91
99
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +108,54 @@ dependencies:
100
108
  - - "~>"
101
109
  - !ruby/object:Gem::Version
102
110
  version: '2.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: bundler-audit
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.7.0.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.7.0.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: byebug
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">"
144
+ - !ruby/object:Gem::Version
145
+ version: '5'
146
+ - - "<"
147
+ - !ruby/object:Gem::Version
148
+ version: '7'
149
+ type: :development
150
+ prerelease: false
151
+ version_requirements: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">"
154
+ - !ruby/object:Gem::Version
155
+ version: '5'
156
+ - - "<"
157
+ - !ruby/object:Gem::Version
158
+ version: '7'
103
159
  - !ruby/object:Gem::Dependency
104
160
  name: rake
105
161
  requirement: !ruby/object:Gem::Requirement
@@ -170,6 +226,8 @@ files:
170
226
  - VERSION
171
227
  - default.yml
172
228
  - lib/boxt_ruby_style_guide.rb
229
+ - lib/boxt_ruby_style_guide/filepath_matcher.rb
230
+ - lib/boxt_ruby_style_guide/git_diff.rb
173
231
  - lib/boxt_ruby_style_guide/railtie.rb
174
232
  - lib/boxt_ruby_style_guide/version.rb
175
233
  - lib/tasks/lint.rake
@@ -181,7 +239,7 @@ homepage: https://github.com/boxt/ruby-style-guide
181
239
  licenses:
182
240
  - MIT
183
241
  metadata: {}
184
- post_install_message:
242
+ post_install_message:
185
243
  rdoc_options: []
186
244
  require_paths:
187
245
  - lib
@@ -196,8 +254,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
254
  - !ruby/object:Gem::Version
197
255
  version: '0'
198
256
  requirements: []
199
- rubygems_version: 3.1.2
200
- signing_key:
257
+ rubygems_version: 3.1.4
258
+ signing_key:
201
259
  specification_version: 4
202
260
  summary: Ruby styleguide info for the BOXT Ruby projects
203
261
  test_files: []