guideline 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/guideline +33 -0
- data/examples/hard_tab_indent_checker.rb +9 -0
- data/guideline.gemspec +2 -1
- data/guideline.yml +4 -0
- data/lib/guideline/checker_factory.rb +18 -0
- data/lib/guideline/checkers/checker.rb +1 -1
- data/lib/guideline/checkers/hard_tab_indent_checker.rb +1 -1
- data/lib/guideline/checkers/long_line_checker.rb +12 -10
- data/lib/guideline/checkers/long_method_checker.rb +1 -1
- data/lib/guideline/version.rb +1 -1
- data/lib/guideline/visitor.rb +16 -6
- data/lib/guideline.rb +1 -0
- data/spec/guideline/checker_factory_spec.rb +29 -0
- data/spec/guideline/checkers/checker_spec.rb +3 -18
- data/spec/guideline/visitor_spec.rb +1 -15
- metadata +27 -28
data/bin/guideline
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path("../../lib/", __FILE__)
|
4
|
+
require "guideline"
|
5
|
+
require "yaml"
|
6
|
+
require "slop"
|
7
|
+
require "active_support/all"
|
8
|
+
|
9
|
+
def parse_options
|
10
|
+
Slop.parse(:help => true) do
|
11
|
+
banner "Usage: guidline [directory] [options]"
|
12
|
+
on :c, :config, "path to guideline.yml"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_config(options)
|
17
|
+
path = options[:config] || File.expand_path("../../guideline.yml", __FILE__)
|
18
|
+
hash = YAML.load_file(path)
|
19
|
+
HashWithIndifferentAccess.new(hash)
|
20
|
+
end
|
21
|
+
|
22
|
+
options = parse_options
|
23
|
+
config = load_config(options)
|
24
|
+
|
25
|
+
Guideline::Visitor.new(
|
26
|
+
:only => ARGV[0],
|
27
|
+
:checker => Guideline::CheckerFactory.new(
|
28
|
+
config,
|
29
|
+
Guideline::LongLineChecker,
|
30
|
+
Guideline::LongMethodChecker,
|
31
|
+
Guideline::HardTabIndentChecker
|
32
|
+
).create
|
33
|
+
).check.render
|
data/guideline.gemspec
CHANGED
@@ -17,8 +17,9 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
+
gem.add_dependency "slop"
|
20
21
|
gem.add_dependency "active_support"
|
21
22
|
gem.add_dependency "i18n"
|
22
|
-
gem.add_development_dependency "rspec"
|
23
|
+
gem.add_development_dependency "rspec", ">=2.12.0"
|
23
24
|
gem.add_development_dependency "pry"
|
24
25
|
end
|
data/guideline.yml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module Guideline
|
2
|
+
class CheckerFactory
|
3
|
+
def initialize(options, *checker_classes)
|
4
|
+
@options = options
|
5
|
+
@checker_classes = checker_classes
|
6
|
+
end
|
7
|
+
|
8
|
+
def create
|
9
|
+
@checker_classes.map do |klass|
|
10
|
+
klass.new(options_for(klass))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def options_for(klass)
|
15
|
+
@options[klass.to_s] || {}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,22 +1,20 @@
|
|
1
1
|
module Guideline
|
2
2
|
class LongLineChecker < Checker
|
3
3
|
def check(path)
|
4
|
-
lines(path).
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
)
|
11
|
-
end
|
4
|
+
lines(path).select(&:has_error?).each do |line|
|
5
|
+
report(
|
6
|
+
:line => line.lineno,
|
7
|
+
:message => line.message,
|
8
|
+
:path => path
|
9
|
+
)
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
15
13
|
private
|
16
14
|
|
17
15
|
def lines(path)
|
18
|
-
path.each_line.map do |line|
|
19
|
-
LineChecker.new(line, :max => max)
|
16
|
+
path.each_line.map.with_index do |line, index|
|
17
|
+
LineChecker.new(line, :max => max, :lineno => index + 1)
|
20
18
|
end
|
21
19
|
end
|
22
20
|
|
@@ -47,6 +45,10 @@ module Guideline
|
|
47
45
|
def length
|
48
46
|
@line.split(//).length
|
49
47
|
end
|
48
|
+
|
49
|
+
def lineno
|
50
|
+
@options[:lineno]
|
51
|
+
end
|
50
52
|
end
|
51
53
|
end
|
52
54
|
end
|
data/lib/guideline/version.rb
CHANGED
data/lib/guideline/visitor.rb
CHANGED
@@ -12,7 +12,7 @@ module Guideline
|
|
12
12
|
|
13
13
|
def check
|
14
14
|
travel
|
15
|
-
|
15
|
+
self
|
16
16
|
end
|
17
17
|
|
18
18
|
def render
|
@@ -63,18 +63,28 @@ module Guideline
|
|
63
63
|
private
|
64
64
|
|
65
65
|
def found_paths
|
66
|
-
|
66
|
+
Pathname.glob(only_pattern)
|
67
67
|
end
|
68
68
|
|
69
69
|
def excepted_paths
|
70
|
-
|
70
|
+
if except_pattern
|
71
|
+
Pathname.glob(only_pattern)
|
72
|
+
else
|
73
|
+
[]
|
74
|
+
end
|
71
75
|
end
|
72
76
|
|
73
|
-
def
|
74
|
-
|
75
|
-
|
77
|
+
def only_pattern
|
78
|
+
if options[:only]
|
79
|
+
"#{options[:only]}/**/*.rb"
|
80
|
+
else
|
81
|
+
"**/*.rb"
|
76
82
|
end
|
77
83
|
end
|
84
|
+
|
85
|
+
def except_pattern
|
86
|
+
options[:except]
|
87
|
+
end
|
78
88
|
end
|
79
89
|
end
|
80
90
|
end
|
data/lib/guideline.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Guideline
|
4
|
+
describe CheckerFactory do
|
5
|
+
describe "#create" do
|
6
|
+
subject do
|
7
|
+
described_class.new(
|
8
|
+
{
|
9
|
+
"Guideline::LongLineChecker" => { :max => 80 },
|
10
|
+
"Guideline::LongMethodChecker" => { :max => 10 },
|
11
|
+
},
|
12
|
+
LongLineChecker,
|
13
|
+
LongMethodChecker,
|
14
|
+
).create
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:checkers) do
|
18
|
+
subject
|
19
|
+
end
|
20
|
+
|
21
|
+
it "creates instances of given classes with given config" do
|
22
|
+
LongLineChecker.should_receive(:new).with(:max => 80).and_call_original
|
23
|
+
LongMethodChecker.should_receive(:new).with(:max => 10).and_call_original
|
24
|
+
checkers[0].should be_a LongLineChecker
|
25
|
+
checkers[1].should be_a LongMethodChecker
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -18,21 +18,6 @@ module Guideline
|
|
18
18
|
}
|
19
19
|
end
|
20
20
|
|
21
|
-
describe "#initialize" do
|
22
|
-
subject do
|
23
|
-
instance
|
24
|
-
end
|
25
|
-
|
26
|
-
it "saves given options" do
|
27
|
-
described_class.new(options).instance_variable_get(:@options).should == options
|
28
|
-
end
|
29
|
-
|
30
|
-
it "can omit options" do
|
31
|
-
described_class.new.instance_variable_get(:@options).should == {}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
21
|
describe "#errors" do
|
37
22
|
subject do
|
38
23
|
instance.errors
|
@@ -43,9 +28,9 @@ module Guideline
|
|
43
28
|
end
|
44
29
|
end
|
45
30
|
|
46
|
-
describe "#
|
31
|
+
describe "#report" do
|
47
32
|
it "adds error record into its errors" do
|
48
|
-
instance.
|
33
|
+
instance.report(error)
|
49
34
|
instance.errors.first.message.should == "message"
|
50
35
|
end
|
51
36
|
end
|
@@ -61,7 +46,7 @@ module Guideline
|
|
61
46
|
|
62
47
|
context "when its errors is not empty" do
|
63
48
|
before do
|
64
|
-
instance.
|
49
|
+
instance.report(error)
|
65
50
|
end
|
66
51
|
|
67
52
|
it { should be_true }
|
@@ -7,11 +7,7 @@ module Guideline
|
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:visitor) do
|
10
|
-
described_class.new(:checker => checker)
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:options) do
|
14
|
-
{ :checker => checker }
|
10
|
+
described_class.new(:checker => [checker])
|
15
11
|
end
|
16
12
|
|
17
13
|
let(:checker) do
|
@@ -26,16 +22,6 @@ module Guideline
|
|
26
22
|
mock
|
27
23
|
end
|
28
24
|
|
29
|
-
describe "#initialize" do
|
30
|
-
subject do
|
31
|
-
visitor
|
32
|
-
end
|
33
|
-
|
34
|
-
it "creates a new instance of #{described_class}" do
|
35
|
-
be_a described_class
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
25
|
describe "#check" do
|
40
26
|
subject do
|
41
27
|
visitor.check
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guideline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,8 +12,8 @@ cert_chain: []
|
|
12
12
|
date: 2012-11-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
15
|
+
name: slop
|
16
|
+
requirement: &70129049410700 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,21 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: *70129049410700
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: active_support
|
27
|
+
requirement: &70129049409360 !ruby/object:Gem::Requirement
|
25
28
|
none: false
|
26
29
|
requirements:
|
27
30
|
- - ! '>='
|
28
31
|
- !ruby/object:Gem::Version
|
29
32
|
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70129049409360
|
30
36
|
- !ruby/object:Gem::Dependency
|
31
37
|
name: i18n
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70129049423300 !ruby/object:Gem::Requirement
|
33
39
|
none: false
|
34
40
|
requirements:
|
35
41
|
- - ! '>='
|
@@ -37,31 +43,21 @@ dependencies:
|
|
37
43
|
version: '0'
|
38
44
|
type: :runtime
|
39
45
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
46
|
+
version_requirements: *70129049423300
|
46
47
|
- !ruby/object:Gem::Dependency
|
47
48
|
name: rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70129049419980 !ruby/object:Gem::Requirement
|
49
50
|
none: false
|
50
51
|
requirements:
|
51
52
|
- - ! '>='
|
52
53
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
54
|
+
version: 2.12.0
|
54
55
|
type: :development
|
55
56
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
57
|
+
version_requirements: *70129049419980
|
62
58
|
- !ruby/object:Gem::Dependency
|
63
59
|
name: pry
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70129049417400 !ruby/object:Gem::Requirement
|
65
61
|
none: false
|
66
62
|
requirements:
|
67
63
|
- - ! '>='
|
@@ -69,16 +65,12 @@ dependencies:
|
|
69
65
|
version: '0'
|
70
66
|
type: :development
|
71
67
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
68
|
+
version_requirements: *70129049417400
|
78
69
|
description: Guideline.gem checks if your code observes your coding guidelines
|
79
70
|
email:
|
80
71
|
- r7kamura@gmail.com
|
81
|
-
executables:
|
72
|
+
executables:
|
73
|
+
- guideline
|
82
74
|
extensions: []
|
83
75
|
extra_rdoc_files: []
|
84
76
|
files:
|
@@ -87,10 +79,14 @@ files:
|
|
87
79
|
- LICENSE.txt
|
88
80
|
- README.md
|
89
81
|
- Rakefile
|
82
|
+
- bin/guideline
|
83
|
+
- examples/hard_tab_indent_checker.rb
|
90
84
|
- examples/long_line_checker.rb
|
91
85
|
- examples/long_method_checker.rb
|
92
86
|
- guideline.gemspec
|
87
|
+
- guideline.yml
|
93
88
|
- lib/guideline.rb
|
89
|
+
- lib/guideline/checker_factory.rb
|
94
90
|
- lib/guideline/checkers/checker.rb
|
95
91
|
- lib/guideline/checkers/hard_tab_indent_checker.rb
|
96
92
|
- lib/guideline/checkers/long_line_checker.rb
|
@@ -98,6 +94,7 @@ files:
|
|
98
94
|
- lib/guideline/error.rb
|
99
95
|
- lib/guideline/version.rb
|
100
96
|
- lib/guideline/visitor.rb
|
97
|
+
- spec/guideline/checker_factory_spec.rb
|
101
98
|
- spec/guideline/checkers/checker_spec.rb
|
102
99
|
- spec/guideline/checkers/hard_tab_indent_checker_spec.rb
|
103
100
|
- spec/guideline/checkers/long_line_checker_spec.rb
|
@@ -125,11 +122,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
122
|
version: '0'
|
126
123
|
requirements: []
|
127
124
|
rubyforge_project:
|
128
|
-
rubygems_version: 1.8.
|
125
|
+
rubygems_version: 1.8.15
|
129
126
|
signing_key:
|
130
127
|
specification_version: 3
|
131
128
|
summary: The guideline of your code
|
132
129
|
test_files:
|
130
|
+
- spec/guideline/checker_factory_spec.rb
|
133
131
|
- spec/guideline/checkers/checker_spec.rb
|
134
132
|
- spec/guideline/checkers/hard_tab_indent_checker_spec.rb
|
135
133
|
- spec/guideline/checkers/long_line_checker_spec.rb
|
@@ -137,3 +135,4 @@ test_files:
|
|
137
135
|
- spec/guideline/visitor_spec.rb
|
138
136
|
- spec/guideline_spec.rb
|
139
137
|
- spec/spec_helper.rb
|
138
|
+
has_rdoc:
|