guideline 0.0.3 → 0.0.4
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/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:
|