cane 2.4.0 → 2.5.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.
data/HISTORY.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Cane History
2
2
 
3
+ ## 2.5.0 - 17 November 2012 (628cc1e9)
4
+
5
+ * Feature: `--doc-exclude` option to exclude globs from documentation checks.
6
+ * Feature: `--style-exclude` supports globbing.
7
+
3
8
  ## 2.4.0 - 21 October 2012 (46949e77)
4
9
 
5
10
  * Feature: Rake task can load configuration from a `.cane` file.
data/README.md CHANGED
@@ -44,16 +44,19 @@ Customize behaviour with a wealth of options:
44
44
 
45
45
  --style-glob GLOB Glob to run style checks over (default: {app,lib,spec}/**/*.rb)
46
46
  --style-measure VALUE Max line length (default: 80)
47
- --style-exclude FILE Exclude file from style checking
47
+ --style-exclude GLOB Exclude file or glob from style checking
48
48
  --no-style Disable style checking
49
49
 
50
50
  --doc-glob GLOB Glob to run doc checks over (default: {app,lib}/**/*.rb)
51
+ --doc-exclude GLOB Exclude file or glob from documentation checking
52
+ --no-readme Disable readme checking
51
53
  --no-doc Disable documentation checking
52
54
 
53
- --gte FILE,THRESHOLD If FILE contains a number, verify it is >= to THRESHOLD
55
+ --gte FILE,THRESHOLD Check the number in FILE is >= to THRESHOLD (a number or another file name)
54
56
 
55
57
  -f, --all FILE Apply all checks to given file
56
58
  --max-violations VALUE Max allowed violations (default: 0)
59
+ --json Output as JSON
57
60
  --parallel Use all processors. Slower on small projects, faster on large.
58
61
 
59
62
  -v, --version Show version
@@ -14,6 +14,7 @@ Gem::Specification.new do |gem|
14
14
  gem.homepage = "http://github.com/square/cane"
15
15
 
16
16
  gem.executables = []
17
+ gem.required_ruby_version = '>= 1.9.0'
17
18
  gem.files = Dir.glob("{spec,lib}/**/*.rb") + %w(
18
19
  README.md
19
20
  HISTORY.md
@@ -14,12 +14,17 @@ module Cane
14
14
  def self.name; "documentation checking"; end
15
15
  def self.options
16
16
  {
17
- doc_glob: ['Glob to run doc checks over',
18
- default: '{app,lib}/**/*.rb',
19
- variable: 'GLOB',
20
- clobber: :no_doc],
21
- no_readme: ['Disable readme checking', cast: ->(x) { !x }],
22
- no_doc: ['Disable documentation checking', cast: ->(x) { !x }]
17
+ doc_glob: ['Glob to run doc checks over',
18
+ default: '{app,lib}/**/*.rb',
19
+ variable: 'GLOB',
20
+ clobber: :no_doc],
21
+ doc_exclude: ['Exclude file or glob from documentation checking',
22
+ variable: 'GLOB',
23
+ type: Array,
24
+ default: [],
25
+ clobber: :no_doc],
26
+ no_readme: ['Disable readme checking', cast: ->(x) { !x }],
27
+ no_doc: ['Disable documentation checking', cast: ->(x) { !x }]
23
28
  }
24
29
  end
25
30
 
@@ -68,7 +73,7 @@ module Cane
68
73
  end
69
74
 
70
75
  def file_names
71
- Dir[opts.fetch(:doc_glob)]
76
+ Dir[opts.fetch(:doc_glob)].reject { |file| excluded?(file) }
72
77
  end
73
78
 
74
79
  def class_definition?(line)
@@ -83,6 +88,16 @@ module Cane
83
88
  line.match(/class\s+([^\s;]+)/)[1]
84
89
  end
85
90
 
91
+ def exclusions
92
+ @exclusions ||= opts.fetch(:doc_exclude, []).flatten.map do |i|
93
+ Dir[i]
94
+ end.flatten.to_set
95
+ end
96
+
97
+ def excluded?(file)
98
+ exclusions.include?(file)
99
+ end
100
+
86
101
  def worker
87
102
  Cane.task_runner(opts)
88
103
  end
@@ -23,8 +23,8 @@ module Cane
23
23
  default: 80,
24
24
  cast: :to_i,
25
25
  clobber: :no_style],
26
- style_exclude: ['Exclude file from style checking',
27
- variable: 'FILE',
26
+ style_exclude: ['Exclude file or glob from style checking',
27
+ variable: 'GLOB',
28
28
  type: Array,
29
29
  default: [],
30
30
  clobber: :no_style],
@@ -72,7 +72,9 @@ module Cane
72
72
  end
73
73
 
74
74
  def exclusions
75
- @exclusions ||= opts.fetch(:style_exclude, []).flatten.to_set
75
+ @exclusions ||= opts.fetch(:style_exclude, []).flatten.map do |i|
76
+ Dir[i]
77
+ end.flatten.to_set
76
78
  end
77
79
 
78
80
  def excluded?(file)
@@ -1,3 +1,3 @@
1
1
  module Cane
2
- VERSION = '2.4.0'
2
+ VERSION = '2.5.0'
3
3
  end
@@ -71,4 +71,30 @@ class Doc; end
71
71
  "Missing documentation", "No README found"
72
72
  ]
73
73
  end
74
+
75
+ it 'skips declared exclusions' do
76
+ file_name = make_file <<-FILE.gsub /^\s{6}/, ''
77
+ class NeedsDocumentation
78
+ end
79
+ FILE
80
+
81
+ violations = check(file_name,
82
+ doc_exclude: [file_name]
83
+ ).violations
84
+
85
+ violations.length.should == 0
86
+ end
87
+
88
+ it 'skips declared glob-based exclusions' do
89
+ file_name = make_file <<-FILE.gsub /^\s{6}/, ''
90
+ class NeedsDocumentation
91
+ end
92
+ FILE
93
+
94
+ violations = check(file_name,
95
+ doc_exclude: ["#{File.dirname(file_name)}/*"]
96
+ ).violations
97
+
98
+ violations.length.should == 0
99
+ end
74
100
  end
@@ -63,11 +63,13 @@ describe Cane::CLI::Parser do
63
63
  it 'supports exclusions' do
64
64
  options = [
65
65
  "--abc-exclude", "Harness#complex_method",
66
+ "--doc-exclude", 'myfile',
66
67
  "--style-exclude", 'myfile'
67
68
  ].join(' ')
68
69
 
69
70
  _, result = run(options)
70
71
  result[:abc_exclude].should == [['Harness#complex_method']]
72
+ result[:doc_exclude].should == [['myfile']]
71
73
  result[:style_exclude].should == [['myfile']]
72
74
  end
73
75
 
@@ -33,6 +33,17 @@ describe Cane::StyleCheck do
33
33
  violations.length.should == 0
34
34
  end
35
35
 
36
+ it 'skips declared glob-based exclusions' do
37
+ file_name = make_file(ruby_with_style_issue)
38
+
39
+ violations = check(file_name,
40
+ style_measure: 80,
41
+ style_exclude: ["#{File.dirname(file_name)}/*"]
42
+ ).violations
43
+
44
+ violations.length.should == 0
45
+ end
46
+
36
47
  it 'does not include trailing new lines in the character count' do
37
48
  file_name = make_file('#' * 80 + "\n" + '#' * 80)
38
49
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-21 00:00:00.000000000 Z
12
+ date: 2012-11-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parallel
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &2156715960 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
24
+ version_requirements: *2156715960
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: rspec
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &2156715440 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ~>
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: '2.0'
38
33
  type: :development
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '2.0'
35
+ version_requirements: *2156715440
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: rake
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &2156715000 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ! '>='
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: '0'
54
44
  type: :development
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
46
+ version_requirements: *2156715000
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: simplecov
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &2156714520 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ! '>='
@@ -69,15 +54,10 @@ dependencies:
69
54
  version: '0'
70
55
  type: :development
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
57
+ version_requirements: *2156714520
78
58
  - !ruby/object:Gem::Dependency
79
59
  name: rspec-fire
80
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &2156714100 !ruby/object:Gem::Requirement
81
61
  none: false
82
62
  requirements:
83
63
  - - ! '>='
@@ -85,12 +65,7 @@ dependencies:
85
65
  version: '0'
86
66
  type: :development
87
67
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
68
+ version_requirements: *2156714100
94
69
  description: Fails your build if code quality thresholds are not met
95
70
  email:
96
71
  - xavier@squareup.com
@@ -145,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
120
  requirements:
146
121
  - - ! '>='
147
122
  - !ruby/object:Gem::Version
148
- version: '0'
123
+ version: 1.9.0
149
124
  required_rubygems_version: !ruby/object:Gem::Requirement
150
125
  none: false
151
126
  requirements:
@@ -154,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
129
  version: '0'
155
130
  requirements: []
156
131
  rubyforge_project:
157
- rubygems_version: 1.8.23
132
+ rubygems_version: 1.8.6
158
133
  signing_key:
159
134
  specification_version: 3
160
135
  summary: Fails your build if code quality thresholds are not met. Provides complexity