guideline 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
File without changes
data/README.md CHANGED
@@ -1,16 +1,34 @@
1
1
  # Guideline
2
- Check your code
3
-
4
- ## Installation
5
-
2
+ Guideline checks that your code is protecting the rule of coding guideline.
3
+ This library requires Ruby 1.9 or later.
4
+
5
+ ## Feature
6
+ * For each method
7
+ * Check ABC-complexity
8
+ * Check the number of lines
9
+ * Check unused method
10
+ * For each file
11
+ * Check the precense of hard tab indent
12
+ * Check the presense of comma at the end of multiline Hash literal
13
+ * Check the horizontal length of each line
14
+
15
+ ## Install
6
16
  ```
7
17
  $ gem install guideline
8
18
  ```
9
19
 
10
20
  ## Usage
21
+ ```
22
+ $ guideline --help
23
+ Usage: guideline [directory] [options]
24
+ -c, --config Path to config YAML file.
25
+ -i, --init Generate config YAML template into current directory.
26
+ -h, --help Display this help message.
27
+ ```
11
28
 
12
29
  ```
13
- $ guideline
30
+ $ guideline ./chatroid
31
+
14
32
  lib/chatroid/adapter/campfire.rb
15
33
  26: Line length 85 should be less than 80 characters
16
34
 
@@ -26,3 +44,13 @@ spec/chatroid/adapter/twitter_spec.rb
26
44
  lib/chatroid/adapter/twitter.rb
27
45
  19: Too long 12 lines method <#stream>
28
46
  ```
47
+
48
+ ```
49
+ $ guideline ./guideline
50
+
51
+ lib/guideline/checkers/abc_complexity_checker.rb
52
+ 40: ABC Complexity of method<Guideline::AbcComplexityChecker::Moduleable.included> 16 should be less than 10
53
+
54
+ lib/guideline/error.rb
55
+ 5: Remove unused method <render>
56
+ ```
data/guideline.gemspec CHANGED
@@ -8,7 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Guideline::VERSION
9
9
  gem.authors = ["Ryo NAKAMURA"]
10
10
  gem.email = ["r7kamura@gmail.com"]
11
- gem.description = "Guideline.gem checks if your code observes your coding guidelines"
11
+ gem.description = "Guideline.gem checks that your code is protecting" +
12
+ "the rule of coding guideline"
12
13
  gem.summary = "The guideline of your code"
13
14
  gem.homepage = "https://github.com/r7kamura/guideline"
14
15
 
@@ -20,7 +21,6 @@ Gem::Specification.new do |gem|
20
21
  gem.add_dependency "slop"
21
22
  gem.add_dependency "code_analyzer"
22
23
  gem.add_dependency "active_support"
23
- gem.add_dependency "i18n"
24
24
  gem.add_development_dependency "rspec", ">=2.12.0"
25
25
  gem.add_development_dependency "pry"
26
26
  end
@@ -1,32 +1,56 @@
1
1
  require "yaml"
2
+ require "fileutils"
2
3
  require "slop"
4
+ require "active_support/core_ext/hash/indifferent_access"
3
5
 
4
6
  module Guideline
5
- module Runner
6
- extend self
7
+ class Runner
8
+ CONFIG_FILE_NAME = ".guideline.yml"
7
9
 
8
- def parse(argv)
9
- hash = Parser.parse(argv)
10
- hash[:config] = load_config(hash[:config])
11
- hash.delete(:help)
12
- hash
10
+ def self.parse(*argv)
11
+ new(*argv).parse
13
12
  end
14
13
 
15
- private
14
+ def initialize(argv)
15
+ @hash = Parser.parse(argv).with_indifferent_access
16
+ end
16
17
 
17
- def load_config(path)
18
- hash = load_yaml(path || default_config_path)
19
- HashWithIndifferentAccess.new(hash)
18
+ def parse
19
+ generate_default_config_file if @hash[:init]
20
+ @hash[:config] = load_config
21
+ @hash.delete(:help)
22
+ @hash
20
23
  end
21
24
 
22
- def load_yaml(path)
23
- YAML.load_file(path)
25
+ private
26
+
27
+ def load_config
28
+ YAML.load_file(config_path)
24
29
  rescue Errno::ENOENT
25
- raise "No such config file - #{path}"
30
+ puts "No such config file - #{config_path}"
31
+ exit
32
+ end
33
+
34
+ def config_path
35
+ @hash[:config] || default_config_path
26
36
  end
27
37
 
28
38
  def default_config_path
29
- File.expand_path("../../../guideline.yml", __FILE__)
39
+ File.expand_path("../../../#{CONFIG_FILE_NAME}", __FILE__)
40
+ end
41
+
42
+ def generate_default_config_file
43
+ if config_file_exist?
44
+ puts "./#{CONFIG_FILE_NAME} already exists"
45
+ else
46
+ FileUtils.copy(default_config_path, "./")
47
+ puts "./#{CONFIG_FILE_NAME} was generated"
48
+ end
49
+ exit
50
+ end
51
+
52
+ def config_file_exist?
53
+ File.exist?(CONFIG_FILE_NAME)
30
54
  end
31
55
 
32
56
  class Parser
@@ -47,8 +71,9 @@ module Guideline
47
71
 
48
72
  def slop
49
73
  @slop ||= Slop.new(:help => true) do
50
- banner "Usage: guidline [directory] [options]"
51
- on :c=, :config=, "path to config YAML file"
74
+ banner "Usage: guideline [directory] [options]"
75
+ on :c=, :config=, "Path to config YAML file."
76
+ on :i, :init, "Generate config YAML template into current directory."
52
77
  end
53
78
  end
54
79
  end
@@ -1,3 +1,3 @@
1
1
  module Guideline
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -1,5 +1,4 @@
1
1
  require "pathname"
2
- require "active_support/all"
3
2
 
4
3
  module Guideline
5
4
  class Visitor
@@ -8,54 +8,88 @@ module Guideline
8
8
  end
9
9
 
10
10
  before do
11
- YAML.stub(:load_file).and_return(config)
11
+ described_class.any_instance.stub(:puts)
12
12
  end
13
13
 
14
- let(:config) do
15
- { "a" => 1 }
14
+ let(:argv) do
15
+ []
16
16
  end
17
17
 
18
- let(:path) do
19
- File.expand_path("../../../guideline.yml", __FILE__)
20
- end
18
+ it { should be_a HashWithIndifferentAccess }
21
19
 
22
- let(:argv) do
23
- ["--config", path]
24
- end
20
+ context "when given --init option" do
21
+ let(:argv) do
22
+ ["--init"]
23
+ end
25
24
 
26
- it "loads config option as YAML path" do
27
- YAML.should_receive(:load_file).with(path)
28
- subject
29
- end
25
+ context "when config file already exists" do
26
+ before do
27
+ described_class.any_instance.stub(:config_file_exist? => true)
28
+ end
30
29
 
31
- it "returns config option as HashWithIndifferentAccess" do
32
- subject[:config].should be_a HashWithIndifferentAccess
30
+ it "does not generate config file" do
31
+ FileUtils.should_not_receive(:copy)
32
+ expect { subject }.to raise_error(SystemExit)
33
+ end
34
+ end
35
+
36
+ context "when config file does not exist" do
37
+ before do
38
+ described_class.any_instance.stub(:config_file_exist? => false)
39
+ end
40
+
41
+ it "generates config file" do
42
+ FileUtils.should_receive(:copy)
43
+ expect { subject }.to raise_error(SystemExit)
44
+ end
45
+ end
33
46
  end
34
47
 
35
- context "when config option is passed" do
36
- it "returns parsed options" do
37
- should == { :config => config }
48
+ context "when not given --config option" do
49
+ it "returns default config parsed from guideline.yml" do
50
+ should == {
51
+ "config" => {
52
+ "Guideline::LongLineChecker" => {
53
+ "max" => 80,
54
+ },
55
+ "Guideline::LongMethodChecker" => {
56
+ "max" => 10,
57
+ },
58
+ "Guideline::AbcComplexityChecker" => {
59
+ "max" => 10,
60
+ },
61
+ },
62
+ "init" => nil,
63
+ }
38
64
  end
39
65
  end
40
66
 
41
- context "when config option is passed in short version" do
67
+ context "when existent file is specified by --config option" do
42
68
  let(:argv) do
43
- ["-c", path]
69
+ ["--config", "existent.yml"]
70
+ end
71
+
72
+ before do
73
+ YAML.stub(:load_file).and_return("a" => "b")
44
74
  end
45
75
 
46
- it "returns parsed options" do
47
- should == { :config => config }
76
+ it "returns config parsed from specified file" do
77
+ should == {
78
+ "config" => {
79
+ "a" => "b",
80
+ },
81
+ "init" => nil,
82
+ }
48
83
  end
49
84
  end
50
85
 
51
- context "when config option is not passed" do
86
+ context "when non-existent file is specified by --config option" do
52
87
  let(:argv) do
53
- []
88
+ ["--config", "non-existent.yml"]
54
89
  end
55
90
 
56
- it "returns parsed options with default config path" do
57
- described_class.should_receive(:default_config_path)
58
- should have_key(:config)
91
+ it do
92
+ expect { subject }.to raise_error
59
93
  end
60
94
  end
61
95
  end
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.8
4
+ version: 0.0.9
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-11-30 00:00:00.000000000 Z
12
+ date: 2012-12-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: slop
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70154114004860 !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: *70154114004860
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: code_analyzer
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &70154114004440 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,31 +32,10 @@ dependencies:
37
32
  version: '0'
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *70154114004440
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: active_support
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: i18n
64
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70154114004020 !ruby/object:Gem::Requirement
65
39
  none: false
66
40
  requirements:
67
41
  - - ! '>='
@@ -69,15 +43,10 @@ dependencies:
69
43
  version: '0'
70
44
  type: :runtime
71
45
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
46
+ version_requirements: *70154114004020
78
47
  - !ruby/object:Gem::Dependency
79
48
  name: rspec
80
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &70154114003520 !ruby/object:Gem::Requirement
81
50
  none: false
82
51
  requirements:
83
52
  - - ! '>='
@@ -85,15 +54,10 @@ dependencies:
85
54
  version: 2.12.0
86
55
  type: :development
87
56
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: 2.12.0
57
+ version_requirements: *70154114003520
94
58
  - !ruby/object:Gem::Dependency
95
59
  name: pry
96
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &70154114003100 !ruby/object:Gem::Requirement
97
61
  none: false
98
62
  requirements:
99
63
  - - ! '>='
@@ -101,13 +65,8 @@ dependencies:
101
65
  version: '0'
102
66
  type: :development
103
67
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- description: Guideline.gem checks if your code observes your coding guidelines
68
+ version_requirements: *70154114003100
69
+ description: Guideline.gem checks that your code is protectingthe rule of coding guideline
111
70
  email:
112
71
  - r7kamura@gmail.com
113
72
  executables:
@@ -116,13 +75,13 @@ extensions: []
116
75
  extra_rdoc_files: []
117
76
  files:
118
77
  - .gitignore
78
+ - .guideline.yml
119
79
  - Gemfile
120
80
  - LICENSE.txt
121
81
  - README.md
122
82
  - Rakefile
123
83
  - bin/guideline
124
84
  - guideline.gemspec
125
- - guideline.yml
126
85
  - lib/guideline.rb
127
86
  - lib/guideline/checker_factory.rb
128
87
  - lib/guideline/checkers/abc_complexity_checker.rb
@@ -168,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
127
  version: '0'
169
128
  requirements: []
170
129
  rubyforge_project:
171
- rubygems_version: 1.8.24
130
+ rubygems_version: 1.8.15
172
131
  signing_key:
173
132
  specification_version: 3
174
133
  summary: The guideline of your code
@@ -185,3 +144,4 @@ test_files:
185
144
  - spec/guideline/visitor_spec.rb
186
145
  - spec/guideline_spec.rb
187
146
  - spec/spec_helper.rb
147
+ has_rdoc: