datarockets-style 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +5 -2
- data/Gemfile.lock +29 -4
- data/README.md +59 -0
- data/config/rspec.yml +7 -0
- data/config/ruby.yml +1 -0
- data/datarockets-style.gemspec +4 -6
- data/doc/STYLE_GUIDE_RSPEC.md +42 -0
- data/lib/datarockets/style.rb +4 -0
- data/lib/datarockets/style/formatter/todo_list_formatter.rb +50 -0
- data/lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb +57 -0
- data/lib/datarockets/style/version.rb +1 -1
- metadata +8 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3ade75e0b19c3f2b41a520e098d424d304c20be
|
4
|
+
data.tar.gz: 3a7e44ccc88f575b2b304fa80dfa92c2264131fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4edf5fa617146f569cb0309a3d2afb759bb5cda8dfea4da7c330506771bfbc57a539ce726d5137d186ea3b66258a284974ec2e6a3ec839bade5c4ef587ea8683
|
7
|
+
data.tar.gz: 1814b31a4678a7bedc82aa112ee5327234b8c73e8671e3de6c87df41fd97d4e1f8d54da39dd84a71a0a6178e07a40948cd01fba8b239f884fa14041088dcb33b
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,18 @@ The format is described in [Contributing notes](CONTRIBUTING.md#changelog-entry-
|
|
4
4
|
|
5
5
|
## master (unreleased)
|
6
6
|
|
7
|
+
## 0.5.0 (2019-11-06)
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
* [#107](https://github.com/datarockets/datarockets-style/issues/107): Add ToDo list formatter. ([@r.dubrovsky][])
|
12
|
+
|
13
|
+
### Changed
|
14
|
+
|
15
|
+
* Update rubocop to `0.76`. ([@r.dubrovsky][])
|
16
|
+
* Change default value for `RSpec/ExampleLength` cop. ([@a.branzeanu][])
|
17
|
+
* Disable `RSpec/NestedGroups` cop by default. ([@r.dubrovsky][])
|
18
|
+
|
7
19
|
## 0.5.0 (2019-10-26)
|
8
20
|
|
9
21
|
### Changed
|
@@ -79,3 +91,5 @@ The format is described in [Contributing notes](CONTRIBUTING.md#changelog-entry-
|
|
79
91
|
[@aleks]: https://github.com/AleksSenkou
|
80
92
|
[@ula]: https://github.com/lazycoder9
|
81
93
|
[@v.kuzmik]: https://github.com/TheBlackArroVV/
|
94
|
+
[@a.branzeanu]: https://github.com/texpert
|
95
|
+
|
data/Gemfile
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
3
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
4
|
|
5
|
-
# Specify your gem's dependencies in datarockets-style.gemspec
|
6
5
|
gemspec
|
6
|
+
|
7
|
+
gem "pry-byebug"
|
8
|
+
gem "rake", "~> 13.0"
|
9
|
+
gem "rspec", "~> 3.7"
|
data/Gemfile.lock
CHANGED
@@ -1,21 +1,44 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
datarockets-style (0.
|
5
|
-
rubocop (
|
4
|
+
datarockets-style (0.6.0)
|
5
|
+
rubocop (~> 0.76)
|
6
6
|
rubocop-rspec (~> 1.36)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
ast (2.4.0)
|
12
|
-
|
12
|
+
byebug (11.0.1)
|
13
|
+
coderay (1.1.2)
|
14
|
+
diff-lcs (1.3)
|
15
|
+
jaro_winkler (1.5.4)
|
16
|
+
method_source (0.9.2)
|
13
17
|
parallel (1.18.0)
|
14
18
|
parser (2.6.5.0)
|
15
19
|
ast (~> 2.4.0)
|
20
|
+
pry (0.12.2)
|
21
|
+
coderay (~> 1.1.0)
|
22
|
+
method_source (~> 0.9.0)
|
23
|
+
pry-byebug (3.7.0)
|
24
|
+
byebug (~> 11.0)
|
25
|
+
pry (~> 0.10)
|
16
26
|
rainbow (3.0.0)
|
17
27
|
rake (13.0.0)
|
18
|
-
|
28
|
+
rspec (3.9.0)
|
29
|
+
rspec-core (~> 3.9.0)
|
30
|
+
rspec-expectations (~> 3.9.0)
|
31
|
+
rspec-mocks (~> 3.9.0)
|
32
|
+
rspec-core (3.9.0)
|
33
|
+
rspec-support (~> 3.9.0)
|
34
|
+
rspec-expectations (3.9.0)
|
35
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
36
|
+
rspec-support (~> 3.9.0)
|
37
|
+
rspec-mocks (3.9.0)
|
38
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
+
rspec-support (~> 3.9.0)
|
40
|
+
rspec-support (3.9.0)
|
41
|
+
rubocop (0.76.0)
|
19
42
|
jaro_winkler (~> 1.5.1)
|
20
43
|
parallel (~> 1.10)
|
21
44
|
parser (>= 2.6)
|
@@ -32,7 +55,9 @@ PLATFORMS
|
|
32
55
|
|
33
56
|
DEPENDENCIES
|
34
57
|
datarockets-style!
|
58
|
+
pry-byebug
|
35
59
|
rake (~> 13.0)
|
60
|
+
rspec (~> 3.7)
|
36
61
|
|
37
62
|
BUNDLED WITH
|
38
63
|
1.16.1
|
data/README.md
CHANGED
@@ -88,6 +88,65 @@ P.S. The string literals in this gem are using double quotes by default.
|
|
88
88
|
|
89
89
|
For an existing project, we suggest to run rubocop with both styles and choose which has fewer offenses (which is more popular in the current project).
|
90
90
|
|
91
|
+
## Formatters
|
92
|
+
|
93
|
+
### ToDo list formatter
|
94
|
+
|
95
|
+
This formatter allows us to get list of files for some offense and with number of offenses in each file. This file can be useful if you need to fix a large some cop cop step by step.
|
96
|
+
|
97
|
+
Result of the formatter is compatible with rubocop config or rubocop todo file.
|
98
|
+
|
99
|
+
For running that cop, just print in your command like
|
100
|
+
|
101
|
+
```bash
|
102
|
+
$ bundle exec rubocop -f TodoListFormatter -r datarockets/style
|
103
|
+
Inspecting 10 files
|
104
|
+
...CC.CC..
|
105
|
+
10 files inspected, 7 offenses detected
|
106
|
+
|
107
|
+
Layout/IndentationConsistency
|
108
|
+
Exclude:
|
109
|
+
- 'spec/datarockets/style/formatter/todo_list_formatter_spec.rb' # 1
|
110
|
+
|
111
|
+
Naming/MemoizedInstanceVariableName
|
112
|
+
Exclude:
|
113
|
+
- 'lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb' # 1
|
114
|
+
|
115
|
+
RSpec/ExampleLength
|
116
|
+
Exclude:
|
117
|
+
- 'spec/datarockets/style/formatter/todo_list_formatter/report_summary_spec.rb' # 1
|
118
|
+
- 'spec/datarockets/style/formatter/todo_list_formatter_spec.rb' # 2
|
119
|
+
|
120
|
+
Style/Documentation
|
121
|
+
Exclude:
|
122
|
+
- 'lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb' # 1
|
123
|
+
- 'lib/datarockets/style/formatter/todo_list_formatter.rb' # 1
|
124
|
+
```
|
125
|
+
|
126
|
+
#### Autocorrection
|
127
|
+
|
128
|
+
If you run the formatter with autocorrection options, the formatter skip corrected cop and does not include it to the result.
|
129
|
+
|
130
|
+
```bash
|
131
|
+
$ bundle exec rubocop -f TodoListFormatter -r datarockets/style -a
|
132
|
+
Inspecting 10 files
|
133
|
+
...CC.CC..
|
134
|
+
10 files inspected, 7 offenses detected, 1 offenses corrected
|
135
|
+
|
136
|
+
Naming/MemoizedInstanceVariableName
|
137
|
+
Exclude:
|
138
|
+
- 'lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb' # 1
|
139
|
+
|
140
|
+
RSpec/ExampleLength
|
141
|
+
Exclude:
|
142
|
+
- 'spec/datarockets/style/formatter/todo_list_formatter/report_summary_spec.rb' # 1
|
143
|
+
- 'spec/datarockets/style/formatter/todo_list_formatter_spec.rb' # 2
|
144
|
+
|
145
|
+
Style/Documentation
|
146
|
+
Exclude:
|
147
|
+
- 'lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb' # 1
|
148
|
+
- 'lib/datarockets/style/formatter/todo_list_formatter.rb' # 1
|
149
|
+
```
|
91
150
|
|
92
151
|
## Changelog
|
93
152
|
|
data/config/rspec.yml
CHANGED
@@ -15,6 +15,10 @@ RSpec/ContextWording:
|
|
15
15
|
- without
|
16
16
|
- for
|
17
17
|
|
18
|
+
RSpec/ExampleLength:
|
19
|
+
Enabled: true
|
20
|
+
Max: 10
|
21
|
+
|
18
22
|
RSpec/ExpectChange:
|
19
23
|
EnforcedStyle: block
|
20
24
|
|
@@ -23,3 +27,6 @@ RSpec/ImplicitSubject:
|
|
23
27
|
|
24
28
|
RSpec/MessageSpies:
|
25
29
|
EnforcedStyle: have_received
|
30
|
+
|
31
|
+
RSpec/NestedGroups:
|
32
|
+
Enabled: false
|
data/config/ruby.yml
CHANGED
data/datarockets-style.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path("
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require "datarockets/style/version"
|
4
4
|
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.homepage = "https://github.com/datarockets/datarockets-style"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
15
|
-
spec.required_ruby_version =
|
15
|
+
spec.required_ruby_version = ">= 2.3.0"
|
16
16
|
|
17
17
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
18
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
@@ -23,15 +23,13 @@ Gem::Specification.new do |spec|
|
|
23
23
|
"public gem pushes."
|
24
24
|
end
|
25
25
|
|
26
|
-
spec.files
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
27
27
|
f.match(%r{^(test|spec|features)/})
|
28
28
|
end
|
29
29
|
spec.bindir = "exe"
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
|
-
spec.add_dependency "rubocop", "
|
33
|
+
spec.add_dependency "rubocop", "~> 0.76"
|
34
34
|
spec.add_dependency "rubocop-rspec", "~> 1.36"
|
35
|
-
|
36
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
37
35
|
end
|
data/doc/STYLE_GUIDE_RSPEC.md
CHANGED
@@ -10,6 +10,11 @@ This style guide recommends best practices for writing a clear Rspec tests and e
|
|
10
10
|
We're not limiting a length of rspec files.
|
11
11
|
<sup>[[link](#rspec-file-length)]</sup>
|
12
12
|
|
13
|
+
* <a name="rspec-nested-groups"></a>
|
14
|
+
Nested context is a nice approach for organizing your code and tests structure.
|
15
|
+
So there are not any limits for deep or nested groups.
|
16
|
+
<sup>[[link](#rspec-nested-groups)]</sup>
|
17
|
+
|
13
18
|
* <a name="rspec-subject"></a>
|
14
19
|
Each subject should be named and we should not use `subject` in our test cases.
|
15
20
|
Prefer to use `is_expected` that `expect(subject_name)` for small tests.
|
@@ -54,6 +59,43 @@ context "when the display name is not present" do
|
|
54
59
|
end
|
55
60
|
```
|
56
61
|
|
62
|
+
* <a name="rspec-example-length"></a>
|
63
|
+
A long example is usually more difficult to understand. Consider extracting out some behaviour, e.g. with a `let` block, or a helper method.
|
64
|
+
|
65
|
+
<sup>[[link](#rspec-example-length)]</sup>
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
# bad
|
69
|
+
it 'creates correct deal config object' do
|
70
|
+
expect(ZohoUtil::DealConfig).to receive(:new)
|
71
|
+
.with(
|
72
|
+
deal_name: translated_deal_name,
|
73
|
+
stage_uid: zoho_post.stage_uid,
|
74
|
+
change_existing_stage: zoho_post.change_existing_stage,
|
75
|
+
note_title: translated_note_title,
|
76
|
+
note: translated_note
|
77
|
+
)
|
78
|
+
|
79
|
+
execute_action
|
80
|
+
end
|
81
|
+
|
82
|
+
# good
|
83
|
+
let(:service_arguments) do
|
84
|
+
{
|
85
|
+
deal_name: translated_deal_name,
|
86
|
+
stage_uid: zoho_post.stage_uid,
|
87
|
+
change_existing_stage: zoho_post.change_existing_stage,
|
88
|
+
note_title: translated_note_title,
|
89
|
+
note: translated_note
|
90
|
+
}
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'creates correct deal config object' do
|
94
|
+
expect(ZohoUtil::DealConfig).to receive(:new).with(**service_arguments)
|
95
|
+
execute_action
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
57
99
|
* <a name="rspec-expect-change"></a>
|
58
100
|
Prefer using blocks for change matcher than method calls.
|
59
101
|
<sup>[[link](#rspec-expect-change)]</sup>
|
data/lib/datarockets/style.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
require "pathname"
|
2
|
+
require_relative "./todo_list_formatter/report_summary"
|
3
|
+
|
4
|
+
# This formatter works like default formattter (display dots for files with no offenses and
|
5
|
+
# letters for files with problems in the them).
|
6
|
+
#
|
7
|
+
# In the end, it shows report with sorted cops and files which can be added to rubocop config.
|
8
|
+
#
|
9
|
+
# Here's the format:
|
10
|
+
#
|
11
|
+
# Inspecting 3 files
|
12
|
+
# .CC
|
13
|
+
# 3 files inspected, 1005001 offenses detected
|
14
|
+
#
|
15
|
+
# LineLength
|
16
|
+
# Exclude:
|
17
|
+
# - "really/bad/file.rb" # 100500
|
18
|
+
# - "almost/ok.rb" # 1
|
19
|
+
class TodoListFormatter < RuboCop::Formatter::ProgressFormatter
|
20
|
+
attr_reader :offense_list
|
21
|
+
|
22
|
+
FileOffence = Struct.new(:file_path, :cop_name)
|
23
|
+
|
24
|
+
def started(target_files)
|
25
|
+
super
|
26
|
+
@offense_list = []
|
27
|
+
end
|
28
|
+
|
29
|
+
def file_finished(file, offenses)
|
30
|
+
count_stats(offenses)
|
31
|
+
report_file_as_mark(offenses)
|
32
|
+
|
33
|
+
return if offenses.empty?
|
34
|
+
|
35
|
+
path = Pathname.new(file).relative_path_from(Pathname.new(Dir.pwd))
|
36
|
+
|
37
|
+
offenses.reject(&:corrected?).each do |offense|
|
38
|
+
offense_list << FileOffence.new(path, offense.cop_name)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def finished(inspected_files)
|
43
|
+
report_summary(inspected_files.length,
|
44
|
+
@total_offense_count,
|
45
|
+
@total_correction_count)
|
46
|
+
output.puts
|
47
|
+
|
48
|
+
Datarockets::Style::Formatter::TodoListFormatter::ReportSummary.new(offense_list).call(output)
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Datarockets
|
2
|
+
module Style
|
3
|
+
module Formatter
|
4
|
+
module TodoListFormatter
|
5
|
+
# Get file of pairs: file path and cop name - and prepare report for ToDo list formatter.
|
6
|
+
#
|
7
|
+
# Example of result:
|
8
|
+
#
|
9
|
+
# LineLength
|
10
|
+
# Exclude:
|
11
|
+
# - "really/bad/file.rb" # 100500
|
12
|
+
# - "almost/ok.rb" # 1
|
13
|
+
class ReportSummary
|
14
|
+
attr_reader :offense_list
|
15
|
+
|
16
|
+
FileGroup = Struct.new(:file, :count) do
|
17
|
+
def print(output)
|
18
|
+
output.puts " - '#{file}' # #{count}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
OffenseGroup = Struct.new(:cop_name, :offenses) do
|
23
|
+
def file_groups
|
24
|
+
@_file_groups ||= offenses.group_by(&:file_path).map do |file, offenses|
|
25
|
+
FileGroup.new(file, offenses.length)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def print(output)
|
30
|
+
output.puts(cop_name)
|
31
|
+
output.puts(" Exclude:")
|
32
|
+
file_groups.sort_by(&:file).each do |file_group|
|
33
|
+
file_group.print(output)
|
34
|
+
end
|
35
|
+
output.puts
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize(offense_list)
|
40
|
+
@offense_list = offense_list
|
41
|
+
end
|
42
|
+
|
43
|
+
def call(output)
|
44
|
+
offense_groups.sort_by(&:cop_name).each { |group| group.print(output) }
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def offense_groups
|
50
|
+
@_offense_groups ||= offense_list.group_by(&:cop_name)
|
51
|
+
.map { |cop_name, offenses| OffenseGroup.new(cop_name, offenses) }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,33 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datarockets-style
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Dubrovsky
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.74'
|
20
|
-
- - "<"
|
17
|
+
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: '0.76'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0.74'
|
30
|
-
- - "<"
|
24
|
+
- - "~>"
|
31
25
|
- !ruby/object:Gem::Version
|
32
26
|
version: '0.76'
|
33
27
|
- !ruby/object:Gem::Dependency
|
@@ -44,20 +38,6 @@ dependencies:
|
|
44
38
|
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: '1.36'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: rake
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '13.0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '13.0'
|
61
41
|
description:
|
62
42
|
email:
|
63
43
|
- r.dubrovsky@datarockets.com
|
@@ -69,6 +49,8 @@ files:
|
|
69
49
|
- ".github/ISSUE_TEMPLATE/update-dependencies.md"
|
70
50
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
71
51
|
- ".gitignore"
|
52
|
+
- ".rspec"
|
53
|
+
- ".rubocop.yml"
|
72
54
|
- CHANGELOG.md
|
73
55
|
- CODE_OF_CONDUCT.md
|
74
56
|
- CONTRIBUTING.md
|
@@ -89,6 +71,8 @@ files:
|
|
89
71
|
- doc/STYLE_GUIDE_RAILS.md
|
90
72
|
- doc/STYLE_GUIDE_RSPEC.md
|
91
73
|
- lib/datarockets/style.rb
|
74
|
+
- lib/datarockets/style/formatter/todo_list_formatter.rb
|
75
|
+
- lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb
|
92
76
|
- lib/datarockets/style/version.rb
|
93
77
|
homepage: https://github.com/datarockets/datarockets-style
|
94
78
|
licenses:
|