rubocop_rules 1.0.2 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b8336ab0273eaa5a7c4a0d088bc7ac9810a741e
4
- data.tar.gz: 922465650ca90d1b9446ea248baeea1bdb05c1ae
3
+ metadata.gz: 4e0bd546785d9a1d9df847bf044ae292ec66c401
4
+ data.tar.gz: 2f00f916b40b00a277af380347d70dd3239e4906
5
5
  SHA512:
6
- metadata.gz: 868353dd4492d90ee7d19ce9921b61ba227ee93d48b19eb8868525bde7a302ed414c436c36be35214f3d2b3dad3ca98bf9379cd2b946ebe116b2457ef2e8087b
7
- data.tar.gz: 42f7691892bc591236b633b3de76b6d3c2e38f425541741c027e4a2964e3dd063c1cf1232eb450621025521b2e0e9f8c4ddfcc3f55ec0fe343c11503e3fa8562
6
+ metadata.gz: a2fa4ec3bfb6745389f50cc0c924629651552ddc0d269a8ba015efb7ad2bffc14c621e336c815dede00b092ef0b63babcaa0489e638f99eabde9efcc201db43e
7
+ data.tar.gz: afc0abcc63f6d213da68b9ecabd65aa588a146fc6c3ca41b8c03559a3f2450c3d081ff44721ba1c82ac8aa1a643b179dcbd44f01725ca71d1dcdd41dc753b847
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
@@ -12,8 +12,20 @@
12
12
  inherit_from:
13
13
  - .rubocop_common.yml
14
14
 
15
- ##############
16
- # Project specific overrides here, example:
17
- # Metrics/BlockLength:
18
- # Exclude:
19
- # - 'tasks/the_huge_task.rake'
15
+ AllCops:
16
+ Exclude:
17
+ - db/**/*
18
+
19
+ Rails:
20
+ Enabled: false
21
+
22
+ Style/SymbolArray:
23
+ EnforcedStyle: brackets
24
+
25
+ Metrics/LineLength:
26
+ Max: 100
27
+
28
+ Metrics/BlockLength:
29
+ Exclude:
30
+ - '*.gemspec'
31
+ - 'spec/**/*.rb'
@@ -1,19 +1,13 @@
1
1
  ##############
2
2
  # Global rules
3
- AllCops:
4
- Exclude:
5
- - db/**/*
6
-
7
- Rails:
8
- Enabled: false
9
-
10
- Style/SymbolArray:
11
- EnforcedStyle: brackets
12
-
13
- Metrics/LineLength:
14
- Max: 100
15
-
16
- Metrics/BlockLength:
17
- Exclude:
18
- - '*.gemspec'
19
- - 'spec/**/*.rb'
3
+ #
4
+ # This file is meant to be shared across all projects belonging to a specific team.
5
+ # Check this file in to a dedicated repo, and link to it .rubosync.yml config file.
6
+ # Evolve it over time and use rubocop-rules update to apply it.
7
+ #
8
+
9
+ # Example:
10
+ # ========
11
+ # AllCops:
12
+ # Exclude:
13
+ # - db/**/*
@@ -2,4 +2,4 @@ sudo: false
2
2
  language: ruby
3
3
  rvm:
4
4
  - 2.4.1
5
- before_install: gem install bundler -v 1.15.4
5
+ before_install: gem install bundler -v 1.16
@@ -1,16 +1,27 @@
1
1
  # Changelog
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
4
- The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
- and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
5
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project
6
+ adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
7
 
7
8
  ## [Unreleased]
8
9
 
10
+ ## [1.1.0] - 2017-11-28
11
+
12
+ ### Added
13
+
14
+ * Sync .rubocop_common.yml from external git repo
15
+
9
16
  ## [1.0.2] - 2017-11-09
17
+
10
18
  ### Changed
11
- - spec/lint_spec.rb was not packaged
19
+
20
+ * spec/lint_spec.rb was not packaged
12
21
 
13
22
  ## [1.0.1] - 2017-11-09
23
+
14
24
  ### Added
15
- - rubocop-rules init
16
- - rubocop-rules update
25
+
26
+ * rubocop-rules init
27
+ * rubocop-rules update
data/README.md CHANGED
@@ -1,7 +1,18 @@
1
- # Rubocop::Rules
1
+ [![Build Status](https://travis-ci.org/klippx/rubocop_rules.svg?branch=master)](https://travis-ci.org/klippx/rubocop_rules)
2
+
3
+ # Rubocop Rules
2
4
 
3
5
  A common place to house rubocop rule enforcement across projects.
4
6
 
7
+ When you or your team have a large number of repos, with different Rubocop Rules spread all over the
8
+ place, it gets hard to maintain and sync all "shared" config together with project specific
9
+ "tweaks", as well as todos that are more like todonts...
10
+
11
+ This is where this tool can be quite handy. It enables you to put all SHARED stuff in one single
12
+ place, and you and your team can develop this file gradually over time. This tool downloads the
13
+ latest version and applies it to your project, leaving you with clean rubocop_todo files and still
14
+ allowing you to have project specific overrides.
15
+
5
16
  ## Installation
6
17
 
7
18
  Add this line to your application's Gemfile:
@@ -24,17 +35,84 @@ After installing the gem, you need to initialize your project using the provided
24
35
 
25
36
  ### Initializing a project
26
37
 
27
- Initialize your project with the cli: `rubocop-rules init`
38
+ Initialize your project with the cli: `rubocop-rules init`, sample output:
39
+
40
+ ```shell
41
+ $ bundle exec rubocop-rules init
42
+ Copying config...
43
+ create .rubosync.yml
44
+ create .rubocop.yml
45
+ create spec/lint_spec.rb
46
+ Downloading latest configuration from git://github.com/klippx/rubocop_rules.git...
47
+ create .rubocop_common.yml
48
+ Autocorrecting your code... 28 files inspected, 59 offenses detected
49
+ Generating rubocop_todo... Run `rubocop --config .rubocop_todo.yml`, or add `inherit_from: .rubocop_todo.yml` in a .rubocop.yml file.
50
+ Adding rubocop_todo to configuration...
51
+ insert .rubocop.yml
52
+ ```
53
+
54
+ This will create a few files:
28
55
 
29
- This will create `.rubocop.yml` and `rubucop_common.yml`, it will then run `rubucop -a` to automatically fix what can be fixed for you.
30
- In addition to this it will create `rubucop_todo.yml` to put what cannot be fixed in quarantine for you to fix later.
56
+ * `.rubosync.yml` is the configuration object for this micro-framework. Use this to configure your
57
+ git remote hosting the shared rubocop configuration. By default it will use this repo, which is
58
+ empty. The idea is to customize this.
59
+ * `.rubocop.yml` will source the required rubocop yml files
60
+ * `rubucop_common.yml` is downloaded from git remote specified in `.rubosync.yml`. Note that it
61
+ expects the `rubucop_common.yml` in the root of this git repo.
31
62
 
32
- Finally, a linter spec to make sure your code is following the common conventions.
63
+ The script it will then run `rubucop -a` to automatically fix what can be fixed for you. In addition
64
+ to this it will create `rubucop_todo.yml` to put what cannot be fixed in quarantine for you to fix
65
+ later.
66
+
67
+ Finally, a linter spec `spec/lint_spec.rb` is added to make sure your code is following the common
68
+ conventions.
33
69
 
34
70
  ### Updating a project
35
71
 
36
- Whenever a new version of the gem is deployed, you may update your project configuration using the command: `rubocop-rules update`. This command
37
- will get a fresh copy of `rubucop_common.yml`, it will run autofixes and regenerate a new `rubucop_todo.yml` for you.
72
+ Whenever a new version of the gem is deployed, you may update your project configuration using the
73
+ command: `rubocop-rules update`. This command will download a fresh copy of `rubucop_common.yml`, it
74
+ will run autofixes and regenerate a new `rubucop_todo.yml` for you!
75
+
76
+ Sample output:
77
+
78
+ ```shell
79
+ $ bundle exec rubocop-rules update
80
+ Recreating configuration...
81
+ remove .rubocop_common.yml
82
+ Downloading latest configuration from ssh://git@stash.int.klarna.net:7999/klapp/rubocop_common.git...
83
+ create .rubocop_common.yml
84
+ Regenerating rubocop_todo...
85
+ remove .rubocop_todo.yml
86
+ gsub .rubocop.yml
87
+ gsub .rubocop.yml
88
+ ```
89
+
90
+ ## Best practices
91
+
92
+ ### .rubosync.yml
93
+
94
+ Only configured once per repo, point it to the correct remote.
95
+
96
+ ### .rubocop_common.yml
97
+
98
+ Never update `.rubocop_common.yml` directly. Allow this tool take care of this for you.
99
+
100
+ If you feel that you need to update the config in `.rubocop_common.yml`, update it on the shared git
101
+ repo housing this file instead, and then reissue the `rubocop-rules update` command.
102
+
103
+ ### .rubocop_todo.yml
104
+
105
+ Never update `.rubocop_todo.yml` directly. Allow this tool take care of this for you.
106
+
107
+ If you feel that you need to update the config in `.rubocop_todo.yml`, fix the actual source code
108
+ and then reissue the `rubocop-rules update` command.
109
+
110
+ ### .rubocop.yml
111
+
112
+ Update `.rubocop.yml` for project specific overrides. Could be a project with a very large Rake task
113
+ that is pending removal rather than refactoring.
114
+
115
+ Keep this to a minimum and always consider if it belongs in .rubocop_common.yml or not.
38
116
 
39
117
  ## Development
40
118
 
@@ -1,5 +1,7 @@
1
1
  require 'thor'
2
2
  require 'open3'
3
+ require 'git'
4
+ require 'yaml'
3
5
 
4
6
  module RubocopRules
5
7
  module CLI
@@ -22,15 +24,15 @@ module RubocopRules
22
24
  desc 'init', 'Initialize RubocopRules in your project'
23
25
  def init
24
26
  puts 'Copying config... '
25
- copy_file '.rubocop_common.yml', '.rubocop_common.yml'
26
- copy_file '.rubocop.yml', '.rubocop.yml'
27
+ copy_file 'templates/.rubosync.yml', '.rubosync.yml'
28
+ copy_file 'templates/.rubocop.yml', '.rubocop.yml'
27
29
  copy_file 'spec/lint_spec.rb', 'spec/lint_spec.rb'
28
30
 
29
- print 'Autocorrecting your code... '
30
- run_process(command: 'rubocop -a')
31
+ ensure_rubosync_config
32
+ rubosync_common
31
33
 
32
- print 'Generating rubocop_todo... '
33
- run_process(command: 'rubocop --auto-gen-config')
34
+ print 'Generating rubocop_todo...'
35
+ generate_todo
34
36
 
35
37
  puts 'Adding rubocop_todo to configuration... '
36
38
  insert_into_file '.rubocop.yml', ' - .rubocop_todo.yml', after: " - .rubocop_common.yml\n"
@@ -39,19 +41,44 @@ module RubocopRules
39
41
  desc 'update', 'Regenerate RubocopRules configuration in your project'
40
42
  def update
41
43
  puts 'Recreating configuration...'
44
+ ensure_rubosync_config
42
45
  remove_file '.rubocop_common.yml'
43
- copy_file '.rubocop_common.yml', '.rubocop_common.yml'
46
+ rubosync_common
44
47
 
45
- puts 'Regenerating rubocop_todo... '
48
+ puts 'Regenerating rubocop_todo...'
46
49
  remove_file '.rubocop_todo.yml'
47
50
  comment_lines '.rubocop.yml', /\.rubocop_todo\.yml/
48
- run_process(command: 'rubocop -a', silent: true)
49
- run_process(command: 'rubocop --auto-gen-config', silent: true)
51
+ generate_todo(silent: true)
50
52
  uncomment_lines '.rubocop.yml', /\.rubocop_todo\.yml/
51
53
  end
52
54
 
53
55
  private
54
56
 
57
+ def generate_todo(silent: false)
58
+ run_process(command: 'rubocop -a', silent: silent)
59
+ run_process(command: 'rubocop --auto-gen-config', silent: silent)
60
+ end
61
+
62
+ def ensure_rubosync_config
63
+ unless File.exist?('.rubosync.yml')
64
+ raise 'Missing configuration file! Please add and configure .rubosync.yml'
65
+ end
66
+ @config = YAML.safe_load(ERB.new(File.read('.rubosync.yml')).result, [], [], true)
67
+ end
68
+
69
+ def rubosync_common
70
+ unless @config && @config['git'] && @config['git']['repo']
71
+ raise 'Missing git repo in configuration! Please configure .rubosync.yml'
72
+ end
73
+ repo = @config['git']['repo']
74
+
75
+ puts "Downloading latest configuration from #{repo}..."
76
+ Git.clone(repo, 'common')
77
+ copy_file Dir.pwd + '/common/.rubocop_common.yml', '.rubocop_common.yml'
78
+ ensure
79
+ FileUtils.rm_rf('./common')
80
+ end
81
+
55
82
  def run_process(command:, silent: false)
56
83
  output = ''
57
84
  Open3.popen2(command) do |stdin, stdout_stderr, wait_thr|
@@ -1,3 +1,3 @@
1
1
  module RubocopRules
2
- VERSION = '1.0.2'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.bindir = 'bin'
33
33
  spec.executables = spec.files.grep(%r{^bin/rubocop-rules}) { |f| File.basename(f) }
34
34
  spec.require_paths = ['lib']
35
+ spec.add_dependency 'git'
35
36
  spec.add_dependency 'rubocop', '~> 0.51.0'
36
37
  spec.add_dependency 'thor'
37
38
 
@@ -0,0 +1,19 @@
1
+ ###########################
2
+ # Configuration for rubocop
3
+ # in .rubocop.yml
4
+
5
+ ##############
6
+ # Global rules
7
+ # see .rubocop_common.yml
8
+
9
+ ##############
10
+ # Inherit default rules first, and then override those rules with
11
+ # our violation whitelist.
12
+ inherit_from:
13
+ - .rubocop_common.yml
14
+
15
+ ##############
16
+ # Project specific overrides here, example:
17
+ # Metrics/BlockLength:
18
+ # Exclude:
19
+ # - 'tasks/the_huge_task.rake'
@@ -0,0 +1,2 @@
1
+ git:
2
+ repo: git://github.com/klippx/rubocop_rules.git
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop_rules
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mathias Klippinge
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-09 00:00:00.000000000 Z
11
+ date: 2017-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: git
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rubocop
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -104,11 +118,11 @@ executables:
104
118
  extensions: []
105
119
  extra_rdoc_files: []
106
120
  files:
121
+ - ".editorconfig"
107
122
  - ".gitignore"
108
123
  - ".rspec"
109
124
  - ".rubocop.yml"
110
125
  - ".rubocop_common.yml"
111
- - ".rubocop_todo.yml"
112
126
  - ".travis.yml"
113
127
  - CHANGELOG.md
114
128
  - Gemfile
@@ -123,6 +137,8 @@ files:
123
137
  - lib/rubocop_rules/version.rb
124
138
  - rubocop-rules.gemspec
125
139
  - spec/lint_spec.rb
140
+ - templates/.rubocop.yml
141
+ - templates/.rubosync.yml
126
142
  homepage:
127
143
  licenses: []
128
144
  metadata:
@@ -1,7 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2017-11-09 14:30:10 +0100 using RuboCop version 0.51.0.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.