code_poetry 0.0.1 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb3462469131688d286ff7f768db70ae4de1e12a
4
- data.tar.gz: 2c18647925f0741cb981670ad94a53890cacf7fd
3
+ metadata.gz: 4351c2bdcf92e1b45ec1dace93b7923afca53c3f
4
+ data.tar.gz: 753445520ef195ff57eecc8697e93486ebd370fe
5
5
  SHA512:
6
- metadata.gz: 4c348c339d702a853aaa6cdf72c41bfb547f6d992223de44a20b2e28e6c5391ab4c861f4e72358eda2aa829b83e8dfd244d392137279c8e215ddd0bb75a5d1e9
7
- data.tar.gz: d0e0ea9ffa4aa906eb797931e85e46502ad409e1152c0e4f48994fd15d44ff6fd9e02427a110a8eb5b5b626ab24af52ac6361550cc08678d057fe0dd9e45e369
6
+ metadata.gz: 0756a302d0bd0b14477e6dbd36b77c7aa9fb5c86428b8171635fa245c1e9b985ce0a57bb0ee9902c0946f6b27a9e253a0fad15db5713238acdad948829deb5c3
7
+ data.tar.gz: 3ad8999a9690de69339b9af840f0e6a1733d206c3b18767873ed2b9477ff2864e0bcb8d59a29883a800708f6e00db75834305dec01d005e44529d924b80c843f
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
data/Gemfile CHANGED
@@ -2,3 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in code_poetry.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'rspec'
8
+ gem 'simplecov', require: false
9
+ end
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Code Poetry
2
2
 
3
+ [![Gem Version][rgb]][rgl] [![Build Status][trb]][trl] [![Code Climate][ccb]][ccl]
4
+
3
5
  The poor men's [Code Climate][cc].
4
6
 
5
7
  Analyzes the code of your Rails app and generates a straightforward HTML report.
@@ -36,6 +38,13 @@ This will generate a HTML report to ```metrics/index.html```.
36
38
  4. Push to the branch (`git push origin my-new-feature`)
37
39
  5. Create new Pull Request
38
40
 
41
+ [rgb]: https://badge.fury.io/rb/code_poetry.png
42
+ [rgl]: http://badge.fury.io/rb/code_poetry
43
+ [trb]: https://travis-ci.org/coding-chimp/code_poetry.png?branch=master
44
+ [trl]: https://travis-ci.org/coding-chimp/code_poetry
45
+ [ccb]: https://codeclimate.com/github/coding-chimp/code_poetry.png
46
+ [ccl]: https://codeclimate.com/github/coding-chimp/code_poetry
47
+
39
48
  [cc]: https://codeclimate.com
40
49
  [ch]: https://github.com/danmayer/churn
41
50
  [fl]: https://github.com/seattlerb/flog
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
- require "bundler/gem_tasks"
1
+ require 'rake/testtask'
2
+ require 'bundler/gem_tasks'
3
+
4
+ Rake::TestTask.new do |test|
5
+ test.verbose = true
6
+ test.libs << "spec"
7
+ test.test_files = FileList['spec/**/*_spec.rb']
8
+ end
9
+
10
+ task default: :test
data/code_poetry.gemspec CHANGED
@@ -4,25 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'code_poetry/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "code_poetry"
7
+ spec.name = 'code_poetry'
8
8
  spec.version = CodePoetry::VERSION
9
- spec.authors = ["Bastian Bartmann"]
10
- spec.email = ["babartmann@gmail.com"]
9
+ spec.authors = ['Bastian Bartmann']
10
+ spec.email = ['babartmann@gmail.com']
11
11
  spec.description = %q{Analyzes the code of your Rails app and generates a straightforward HTML report.}
12
12
  spec.summary = %q{The poor men's Code Climate}
13
- spec.homepage = "https://github.com/coding-chimp/code_poetry"
14
- spec.license = "MIT"
13
+ spec.homepage = 'https://github.com/coding-chimp/code_poetry'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'rake'
23
23
 
24
- spec.add_runtime_dependency 'code_poetry-html', ['~> 0.0']
25
- spec.add_runtime_dependency 'code_metrics', ['~> 0.1']
24
+ spec.add_runtime_dependency 'code_poetry-html', ['~> 0.1']
26
25
  spec.add_runtime_dependency 'churn', ['~> 0.0']
27
26
  spec.add_runtime_dependency 'flog', ['~> 4.2']
28
27
  end
@@ -20,6 +20,7 @@ module CodePoetry
20
20
 
21
21
  stat.set_churns(@churns[file])
22
22
  measure_flog(stat)
23
+ stat.set_smells
23
24
 
24
25
  @stats << stat
25
26
  end
@@ -42,28 +43,18 @@ module CodePoetry
42
43
  flogger.flog(stat.file)
43
44
  flogger.calculate
44
45
 
45
- outside_methods = 0
46
-
47
46
  unless flogger.scores.empty?
48
47
  klass = flogger.scores.first[0]
49
- stat.complexity = flogger.total_score.round(2)
50
- stat.complexity_per_method = flogger.average.round(2)
48
+ stat.complexity = flogger.total_score.round(0)
49
+ stat.complexity_per_method = flogger.average.round(0)
51
50
 
52
51
  flogger.method_scores[klass].each do |name, score|
53
- next if score.nil?
54
-
55
52
  name = (name.match(/#(.+)/) || name.match(/::(.+)/))[1]
56
- method = stat.get_method(name)
57
-
58
- if method
59
- method[:complexity] = score.round(2)
60
- else
61
- outside_methods += score
62
- end
53
+ stat.set_method_complexity(name, score)
63
54
  end
64
55
  end
65
56
 
66
- stat.set_outside_of_methods_complexity(outside_methods.round(2))
57
+ stat.definition_complexity = stat.definition_complexity.round(0)
67
58
  end
68
59
  end
69
60
  end
@@ -0,0 +1,23 @@
1
+ module CodePoetry
2
+ class Method
3
+ attr_accessor :node, :name, :first_line, :last_line, :complexity
4
+
5
+ def initialize(node, name, first_line, last_line)
6
+ @node = node
7
+ @name = name
8
+ @first_line = first_line
9
+ @last_line = last_line
10
+ @complexity = 0
11
+ end
12
+
13
+ def smelly?
14
+ complexity > 25
15
+ end
16
+
17
+ def pretty_name
18
+ symbol = node == :def ? "." : "#"
19
+ name.prepend(symbol)
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ module CodePoetry
2
+ class Smell
3
+ attr_accessor :type, :method
4
+
5
+ def initialize(type, method = nil)
6
+ @type = type
7
+ @method = method
8
+ end
9
+
10
+ def complex_class?
11
+ @type == "ComplexClass"
12
+ end
13
+
14
+ def complex_class_definition?
15
+ @type == "ComplexClassDefinition"
16
+ end
17
+
18
+ def complex_method?
19
+ @type == "ComplexMethod"
20
+ end
21
+ end
22
+ end
@@ -1,14 +1,18 @@
1
+ require 'code_poetry/method'
1
2
  require 'code_poetry/warning_scanner'
3
+ require 'code_poetry/smell'
2
4
 
3
5
  module CodePoetry
4
6
  class Stat
5
- attr_accessor :file, :name, :lines, :lines_of_code, :churns, :complexity, :details, :complexity_per_method
7
+ attr_accessor :file, :name, :lines, :lines_of_code, :churns, :complexity, :methods, :smells
8
+ attr_accessor :complexity_per_method, :definition_complexity
6
9
 
7
10
  def initialize(file)
8
- @lines_of_code, @churns, @complexity, @complexity_per_method = 0, 0, 0, 0
11
+ @lines_of_code, @churns, @complexity, @complexity_per_method, @definition_complexity = 0, 0, 0, 0, 0
9
12
  @file = file
10
13
  @lines = {}
11
- @details = []
14
+ @methods = []
15
+ @smells = []
12
16
 
13
17
  parse_file
14
18
  end
@@ -18,41 +22,24 @@ module CodePoetry
18
22
  end
19
23
 
20
24
  def get_method(name)
21
- method = details.select{|method| method[:name] == name}
22
- method[0] unless method.empty?
25
+ @methods.find{|method| method.name == name}
23
26
  end
24
27
 
25
- def set_method_complexity(name, complexity)
26
- method = details.select{|method| method[:name] == name}
27
- method[0][:complexity] = complexity unless method.empty?
28
- end
29
-
30
- def set_outside_of_methods_complexity(complexity)
31
- @details.unshift({name: "none", complexity: complexity})
28
+ def set_method_complexity(name, score)
29
+ if method = get_method(name)
30
+ method.complexity = score.round(0)
31
+ else
32
+ @definition_complexity += score
33
+ end
32
34
  end
33
35
 
34
36
  def get_method_at_line(line)
35
- @method = nil
36
-
37
- @details.each do |detail|
38
- next if detail[:first_line].nil?
39
-
40
- if detail[:last_line].nil?
41
- if detail[:first_line] == line
42
- @method = detail
43
- break
44
- else
45
- next
46
- end
47
- end
48
-
49
- if detail[:first_line] <= line && detail[:last_line] >= line
50
- @method = detail
51
- break
52
- end
53
- end
37
+ @methods.find{|method| method.first_line <= line && method.last_line >= line}
38
+ end
54
39
 
55
- @method
40
+ def set_smells
41
+ set_class_smells
42
+ set_method_smells
56
43
  end
57
44
 
58
45
  private
@@ -97,13 +84,13 @@ module CodePoetry
97
84
  name, first_line = find_method_params(element)
98
85
 
99
86
  if @indentation_warnings['def'] && @indentation_warnings['def'].any? { |first, last| first == first_line }
100
- warning = @indentation_warnings['def'].select{|first, last| first == first_line}[0]
87
+ warning = @indentation_warnings['def'].find{|first, last| first == first_line}
101
88
  last_line = warning[1]
102
89
  else
103
90
  last_line = find_last_line(name, first_line)
104
91
  end
105
92
 
106
- @details << {name: name, first_line: first_line, last_line: last_line, complexity: 0}
93
+ @methods << Method.new(element.first, name, first_line, last_line)
107
94
  else
108
95
  scan_sexp(element)
109
96
  end
@@ -129,5 +116,15 @@ module CodePoetry
129
116
  warning_scanner = WarningScanner.new
130
117
  warning_scanner.scan(@content)
131
118
  end
119
+
120
+ def set_class_smells
121
+ @smells << Smell.new("ComplexClass") if @complexity > 150
122
+ @smells << Smell.new("ComplexClassDefinition") if @definition_complexity > 40
123
+ end
124
+
125
+ def set_method_smells
126
+ smelly_methods = @methods.select{|method| method.smelly?}
127
+ @smells.concat smelly_methods.map{|method| Smell.new("ComplexMethod", method)}
128
+ end
132
129
  end
133
130
  end
@@ -1,3 +1,3 @@
1
1
  module CodePoetry
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -13,7 +13,7 @@ module CodePoetry
13
13
  status, @warnings, process = validate(source)
14
14
  end
15
15
 
16
- @indentation_warnings = parse_warnings
16
+ parse_warnings
17
17
  end
18
18
 
19
19
  private
@@ -0,0 +1,11 @@
1
+ class Foo
2
+
3
+ def self.bar?
4
+ true
5
+ end
6
+
7
+ def fooz?
8
+ false
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ class Foo
2
+
3
+ def self.bar?
4
+ true
5
+ end
6
+
7
+ def fooz?
8
+ false
9
+ end
10
+
11
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require_relative '../lib/code_poetry/method'
3
+
4
+ describe CodePoetry::Method do
5
+ let(:method) { CodePoetry::Method.new(:def, "smelly?", 8, 10) }
6
+
7
+ describe ".smell?" do
8
+ it "returns true if the complexity is greater 25" do
9
+ method.complexity = 26
10
+ expect(method.smelly?).to be_true
11
+ end
12
+
13
+ it "returns false if the complexity is less or equal 25" do
14
+ method.complexity = 25
15
+ expect(method.smelly?).to be_false
16
+ end
17
+ end
18
+
19
+ describe ".pretty_name" do
20
+ it "prepends a '.' to the name if the method is an instance method" do
21
+ expect(method.pretty_name).to eq(".smelly?")
22
+ end
23
+
24
+ it "prepends a '#' to the name if the method is an class method" do
25
+ method.node = :defs
26
+ expect(method.pretty_name).to eq("#smelly?")
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require_relative '../lib/code_poetry/smell'
3
+
4
+ describe CodePoetry::Smell do
5
+ let(:smell) { CodePoetry::Smell.new("ComplexClass") }
6
+
7
+ describe ".complex_class?" do
8
+ it "returns true if the smells type is 'ComplexClass'" do
9
+ expect(smell.complex_class?).to be_true
10
+ end
11
+
12
+ it "returns false if the smell type isn't 'ComplexClass'" do
13
+ smell.type = "ComplexClassDefinition"
14
+ expect(smell.complex_class?).to be_false
15
+ end
16
+ end
17
+
18
+ describe ".complex_class_definition?" do
19
+ it "returns true if the smells type is 'ComplexClassDefinition'" do
20
+ smell.type = "ComplexClassDefinition"
21
+ expect(smell.complex_class_definition?).to be_true
22
+ end
23
+
24
+ it "returns false if the smell type isn't 'ComplexClassDefinition'" do
25
+ expect(smell.complex_class_definition?).to be_false
26
+ end
27
+ end
28
+
29
+ describe ".complex_method?" do
30
+ it "returns true if the smells type is 'ComplexMethod'" do
31
+ smell.type = "ComplexMethod"
32
+ expect(smell.complex_method?).to be_true
33
+ end
34
+
35
+ it "returns false if the smell type isn't 'ComplexMethod'" do
36
+ expect(smell.complex_method?).to be_false
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,12 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter 'spec'
4
+ end if ENV['COVERAGE']
5
+
6
+ require 'rspec/autorun'
7
+
8
+ def test_file(file_name)
9
+ File.join(
10
+ File.dirname(__FILE__), "dummy_files/#{file_name}.rb"
11
+ )
12
+ end
data/spec/stat_spec.rb ADDED
@@ -0,0 +1,133 @@
1
+ require 'spec_helper'
2
+ require 'ripper'
3
+ require_relative '../lib/code_poetry/stat'
4
+
5
+ describe CodePoetry::Stat do
6
+ let(:stat) { CodePoetry::Stat.new(test_file(1)) }
7
+
8
+ describe ".initialize" do
9
+ it "sets the correct stat name" do
10
+ expect(stat.name).to eq("Foo")
11
+ end
12
+
13
+ it "counts the correct number of lines and lines of code" do
14
+ expect(stat.lines.count).to eq(11)
15
+ expect(stat.lines_of_code).to eq(8)
16
+ end
17
+
18
+ it "sets the methods correctly" do
19
+ expect(stat.methods.count).to eq(2)
20
+
21
+ method = stat.get_method("bar?")
22
+ expect(method.node).to eq(:defs)
23
+ expect(method.first_line).to eq(3)
24
+ expect(method.last_line).to eq(5)
25
+
26
+ method = stat.get_method("fooz?")
27
+ expect(method.node).to eq(:def)
28
+ expect(method.first_line).to eq(7)
29
+ expect(method.last_line).to eq(9)
30
+ end
31
+
32
+ it "sets the methods correctly even if they have indentation errors" do
33
+ stat = CodePoetry::Stat.new(test_file(2))
34
+
35
+ expect(stat.methods.count).to eq(2)
36
+
37
+ method = stat.get_method("bar?")
38
+ expect(method.node).to eq(:defs)
39
+ expect(method.first_line).to eq(3)
40
+ expect(method.last_line).to eq(5)
41
+
42
+ method = stat.get_method("fooz?")
43
+ expect(method.node).to eq(:def)
44
+ expect(method.first_line).to eq(7)
45
+ expect(method.last_line).to eq(9)
46
+ end
47
+ end
48
+
49
+ describe ".set_churns" do
50
+ it "sets the churns" do
51
+ stat.set_churns(10)
52
+ expect(stat.churns).to eq(10)
53
+ end
54
+
55
+ it "leaves the churns alone, if the param is nil" do
56
+ stat.churns = 10
57
+ stat.set_churns(nil)
58
+ expect(stat.churns).to eq(10)
59
+ end
60
+ end
61
+
62
+ describe ".get_method" do
63
+ it "returns the method with the specified name" do
64
+ expect(stat.get_method("bar?").first_line).to eq(3)
65
+ expect(stat.get_method("fooz?").first_line).to eq(7)
66
+ end
67
+
68
+ it "returns nil if there is no mehtod with the specified name" do
69
+ expect(stat.get_method("bar")).to eq(nil)
70
+ end
71
+ end
72
+
73
+ describe ".set_method_complexity" do
74
+ it "sets the complexity of the method with the specified name" do
75
+ stat.set_method_complexity("bar?", 200)
76
+ expect(stat.get_method("bar?").complexity).to eq(200)
77
+ end
78
+
79
+ it "adds the complexity to the definition_complexity if there is no method with the specified name" do
80
+ stat.definition_complexity = 25
81
+ stat.set_method_complexity("baz", 120)
82
+ expect(stat.definition_complexity).to eq(145)
83
+ end
84
+ end
85
+
86
+ describe ".get_method_at_line" do
87
+ it "return the method at the specified line" do
88
+ expect(stat.get_method_at_line(3).name).to eq("bar?")
89
+ expect(stat.get_method_at_line(7).name).to eq("fooz?")
90
+ end
91
+
92
+ it "returns nil if there is no mehtod at the specified line" do
93
+ expect(stat.get_method_at_line(20)).to eq(nil)
94
+ end
95
+ end
96
+
97
+ describe ".set_smells" do
98
+ it "creates a 'ComplexClass' smell if the overall complexity is greater 150" do
99
+ stat.complexity = 151
100
+ stat.set_smells
101
+ expect(stat.smells.find{|smell| smell.type == "ComplexClass"}).to_not be_nil
102
+ end
103
+
104
+ it "creates no 'ComplexClass' smell if the overall complexity is less 151" do
105
+ stat.complexity = 150
106
+ stat.set_smells
107
+ expect(stat.smells.find{|smell| smell.type == "ComplexClass"}).to be_nil
108
+ end
109
+
110
+ it "creates a 'ComplexClassDefinition' smell if the definition complexity is greater 40" do
111
+ stat.definition_complexity = 41
112
+ stat.set_smells
113
+ expect(stat.smells.find{|smell| smell.type == "ComplexClassDefinition"}).to_not be_nil
114
+ end
115
+
116
+ it "creates no 'ComplexClassDefinition' smell if the definition complexity is less 41" do
117
+ stat.definition_complexity = 40
118
+ stat.set_smells
119
+ expect(stat.smells.find{|smell| smell.type == "ComplexClassDefinition"}).to be_nil
120
+ end
121
+
122
+ it "creates a 'ComplexMethod' smell if a methods complexity is greater 25" do
123
+ stat.set_method_complexity("bar?", 26)
124
+ stat.set_smells
125
+ expect(stat.smells.find{|smell| smell.type == "ComplexMethod"}).to_not be_nil
126
+ end
127
+
128
+ it "creates no 'ComplexMethod' smell if no methods complexity is greater 25" do
129
+ stat.set_smells
130
+ expect(stat.smells.find{|smell| smell.type == "ComplexMethod"}).to be_nil
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require_relative '../lib/code_poetry/warning_scanner'
3
+
4
+ describe CodePoetry::WarningScanner do
5
+ let(:scanner) { CodePoetry::WarningScanner.new }
6
+
7
+ describe ".scan" do
8
+ it "returns an array with warnings for every indendation in the source" do
9
+ source = File.open(test_file(1), "r").read
10
+ expect(scanner.scan(source).size).to eq(0)
11
+
12
+ source = File.open(test_file(2), "r").read
13
+ expect(scanner.scan(source)["def"].size).to eq(2)
14
+ expect(scanner.scan(source)["def"][0]).to eq([3, 5])
15
+ expect(scanner.scan(source)["def"][1]).to eq([7, 9])
16
+ end
17
+ end
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_poetry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bastian Bartmann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-27 00:00:00.000000000 Z
11
+ date: 2013-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -40,20 +40,6 @@ dependencies:
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: code_poetry-html
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: '0.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '0.0'
55
- - !ruby/object:Gem::Dependency
56
- name: code_metrics
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ~>
@@ -103,6 +89,8 @@ extensions: []
103
89
  extra_rdoc_files: []
104
90
  files:
105
91
  - .gitignore
92
+ - .rspec
93
+ - .travis.yml
106
94
  - Gemfile
107
95
  - LICENSE
108
96
  - README.md
@@ -112,11 +100,20 @@ files:
112
100
  - lib/code_poetry/calculator.rb
113
101
  - lib/code_poetry/cli.rb
114
102
  - lib/code_poetry/formatter.rb
103
+ - lib/code_poetry/method.rb
115
104
  - lib/code_poetry/railtie.rb
105
+ - lib/code_poetry/smell.rb
116
106
  - lib/code_poetry/stat.rb
117
107
  - lib/code_poetry/version.rb
118
108
  - lib/code_poetry/warning_scanner.rb
119
109
  - lib/tasks/code_poetry.rake
110
+ - spec/dummy_files/1.rb
111
+ - spec/dummy_files/2.rb
112
+ - spec/method_spec.rb
113
+ - spec/smell_spec.rb
114
+ - spec/spec_helper.rb
115
+ - spec/stat_spec.rb
116
+ - spec/warning_scanner_spec.rb
120
117
  homepage: https://github.com/coding-chimp/code_poetry
121
118
  licenses:
122
119
  - MIT
@@ -141,5 +138,12 @@ rubygems_version: 2.0.3
141
138
  signing_key:
142
139
  specification_version: 4
143
140
  summary: The poor men's Code Climate
144
- test_files: []
141
+ test_files:
142
+ - spec/dummy_files/1.rb
143
+ - spec/dummy_files/2.rb
144
+ - spec/method_spec.rb
145
+ - spec/smell_spec.rb
146
+ - spec/spec_helper.rb
147
+ - spec/stat_spec.rb
148
+ - spec/warning_scanner_spec.rb
145
149
  has_rdoc: