guideline 0.0.8 → 0.0.9

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.
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: