ruby-watchr 0.1.7.1 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -31,10 +31,9 @@ module Watchr
31
31
 
32
32
  # Create report for each file.
33
33
  @files = files.map do |file|
34
- file_report = Watchr::FileAnalyse.new(file)
35
- file_report.flay(flay.duplications_by_file(file))
36
-
37
- file_report
34
+ Watchr::FileAnalyse.new(file).tap { |file|
35
+ file.flay(flay.duplications_by_file(file))
36
+ }
38
37
  end
39
38
  end
40
39
  end
@@ -11,7 +11,7 @@ module Watchr
11
11
 
12
12
  VERY_COMPLEX_METHOD_THRESHOLD = 40
13
13
 
14
- COMPLEX_METHOD_THRESHOLD = 20
14
+ COMPLEX_METHOD_THRESHOLD = 25
15
15
 
16
16
  def analyse_flog(report)
17
17
  report.classes.each do |klass|
@@ -34,27 +34,33 @@ module Watchr
34
34
  end
35
35
 
36
36
  def analyse_complexity(target, type)
37
+ score = target.total_score
38
+
37
39
  add_smell(
38
40
  Watchr::Smell.new(
39
- get_smell_level?(target, type),
40
- target.name, "complexity = #{target.total_score}", target.location
41
+ smell_type(score, type), target.name,
42
+ "complexity = #{score}", target.location,
43
+ { :complexity => score }
41
44
  )
42
- ) if target.total_score >= get_threshold(:complex, type.upcase)
45
+ ) if is_complex?(score, type)
43
46
  end
44
47
 
45
- def get_smell_level?(target, type)
46
- threshold = get_threshold(:very_complex, type)
47
- complexity = target.total_score >= threshold ? :very_complex : :complex
48
+ def smell_type(score, type)
49
+ complexity = is_very_complex?(score, type) ? :very_complex : :complex
48
50
 
49
- get_smell_type(complexity, type)
51
+ "#{complexity}_#{type}".to_sym
50
52
  end
51
53
 
52
- def get_threshold(complexity, type)
53
- Watchr::Analysers::Flog.const_get("#{complexity.upcase}_#{type.upcase}_THRESHOLD")
54
+ def is_complex?(score, type)
55
+ is_complex_by_level?(score, type, :complex)
54
56
  end
55
57
 
56
- def get_smell_type(complexity, type)
57
- "#{complexity}_#{type}".to_sym
58
+ def is_very_complex?(score, type)
59
+ is_complex_by_level?(score, type, :very_complex)
60
+ end
61
+
62
+ def is_complex_by_level?(score, type, level)
63
+ score >= Flog.const_get("#{level.upcase}_#{type.upcase}_THRESHOLD")
58
64
  end
59
65
  end
60
66
  end
@@ -13,7 +13,10 @@ module Watchr
13
13
  )
14
14
 
15
15
  add_smell(Watchr::Smell.new(
16
- underscore(smell.smell['subclass']).to_sym, smell.location['context'], smell.smell['message'], location, {}
16
+ underscore(smell.smell['subclass']).to_sym,
17
+ smell.location['context'],
18
+ smell.smell['message'],
19
+ location
17
20
  ))
18
21
  end
19
22
  end
@@ -1,6 +1,5 @@
1
1
  require 'watchr/metrics/flog/report'
2
2
  require 'watchr/metrics/reek/report'
3
- require 'watchr/smell'
4
3
  require 'watchr/smells_collector'
5
4
  require 'watchr/analysers/flog'
6
5
  require 'watchr/analysers/reek'
@@ -1,15 +1,11 @@
1
1
  module Watchr
2
2
  module FlayMetric
3
3
  class Diff
4
- IDENTICAL = :identical
5
-
6
- SIMILAR = :similar
7
-
8
4
  attr_reader :locations, :match, :nodes, :bonus, :mass, :code
9
5
 
10
6
  def initialize(same, nodes, bonus, mass)
11
7
  @locations = []
12
- @match = same ? IDENTICAL : SIMILAR
8
+ @match = same ? :identical : :similar
13
9
  @nodes = nodes
14
10
  @bonus = bonus
15
11
  @mass = mass
@@ -0,0 +1,18 @@
1
+ module Watchr
2
+ module FlayMetric
3
+ class DiffFactory
4
+ def self.build(same, nodes, bonus, mass)
5
+ diff = Diff.new(same, nodes, bonus, mass)
6
+
7
+ nodes.each do |x|
8
+ diff.add_location(Location.new(x.file, x.line))
9
+ end
10
+
11
+ #r2r = Ruby2Ruby.new
12
+ #diff.code = n_way_diff(*nodes.map { |s| r2r.process(s.deep_clone) })
13
+
14
+ diff
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,6 @@
1
1
  require 'flay'
2
2
  require 'watchr/metrics/flay/diff'
3
+ require 'watchr/metrics/flay/diff_factory'
3
4
  require 'watchr/location'
4
5
 
5
6
  module Watchr
@@ -37,16 +38,7 @@ module Watchr
37
38
  node = nodes.first
38
39
  bonus = same ? nodes.size : 0
39
40
 
40
- diff = Diff.new(same, nodes, bonus, mass)
41
-
42
- nodes.each do |x|
43
- diff.add_location(Location.new(x.file, x.line))
44
- end
45
-
46
- r2r = Ruby2Ruby.new
47
- diff.code = n_way_diff(*nodes.map { |s| r2r.process(s.deep_clone) })
48
-
49
- @duplications << diff
41
+ @duplications << DiffFactory.build(same, nodes, bonus, mass)
50
42
  end
51
43
  end
52
44
  end
@@ -0,0 +1,26 @@
1
+ require 'watchr/metrics/flog/class'
2
+ require 'watchr/metrics/flog/method'
3
+ require 'watchr/location'
4
+
5
+ module Watchr
6
+ module FlogMetric
7
+ class ClassReportFactory
8
+ def self.build(klass, total, methods, method_locations)
9
+ clazz = FlogReportClass.new(klass, total)
10
+
11
+ methods.each do |name, score|
12
+ next if name =~ /#none/
13
+
14
+ clazz.add_method(
15
+ FlogReportMethod.new(
16
+ clazz, name, score,
17
+ Location.from_path(method_locations[name])
18
+ )
19
+ )
20
+ end
21
+
22
+ clazz
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,7 +1,5 @@
1
1
  require 'flog'
2
- require 'watchr/metrics/flog/class'
3
- require 'watchr/metrics/flog/method'
4
- require 'watchr/location'
2
+ require 'watchr/metrics/flog/class_report_factory'
5
3
 
6
4
  module Watchr
7
5
  module FlogMetric
@@ -47,11 +45,9 @@ module Watchr
47
45
 
48
46
  private
49
47
 
50
- def process_result
51
- @classes = []
52
-
48
+ def process_scores
53
49
  scores = Hash.new 0
54
- methods = Hash.new { |h,k| h[k] = [] }
50
+ methods = Hash.new { |hash,key| hash[key] = [] }
55
51
 
56
52
  each_by_score(nil) do |class_method, score, call_list|
57
53
  klass = class_method.split(/#|::/)[0..-2].join('::')
@@ -60,23 +56,14 @@ module Watchr
60
56
  scores[klass] += score
61
57
  end
62
58
 
63
- scores.each do |klass, total|
64
- clazz = FlogReportClass.new(klass, total)
65
-
66
- methods[klass].each do |name, score|
67
- next if name =~ /#none/
59
+ return methods, scores
60
+ end
68
61
 
69
- clazz.add_method(
70
- FlogReportMethod.new(
71
- clazz,
72
- name,
73
- score,
74
- Location.from_path(method_locations[name])
75
- )
76
- )
77
- end
62
+ def process_result
63
+ methods, scores = process_scores
78
64
 
79
- @classes << clazz
65
+ @classes = scores.map do |klass, total|
66
+ ClassReportFactory.build(klass, total, methods[klass], method_locations)
80
67
  end
81
68
  end
82
69
  end
data/lib/watchr/rating.rb CHANGED
@@ -18,15 +18,15 @@ module Watchr
18
18
  case smell.type
19
19
  when :complex_method,
20
20
  :very_complex_method
21
- 0.45 * smell.options[:score]
21
+ 0.45 * smell.details[:complexity]
22
22
 
23
23
  when :complex_object,
24
24
  :very_complex_object
25
- 0.65 * smell.options[:score]
25
+ 0.65 * smell.details[:complexity]
26
26
 
27
27
  when :identical_code,
28
28
  :similar_code
29
- smell.options[:mass]
29
+ smell.details[:mass]
30
30
  else
31
31
  0
32
32
  end
data/lib/watchr/smell.rb CHANGED
@@ -4,12 +4,12 @@ module Watchr
4
4
  class Smell
5
5
  include SmellTypes
6
6
 
7
- def initialize(type, context, description, locations, options = {})
7
+ def initialize(type, context, description, locations, details = {})
8
8
  @type = type
9
9
  @context = context
10
10
  @description = description
11
11
  @locations = []
12
- @options = options
12
+ @details = details
13
13
 
14
14
  Array(locations).each {|l| add_location(l)}
15
15
  end
@@ -30,8 +30,8 @@ module Watchr
30
30
  @context
31
31
  end
32
32
 
33
- def options
34
- @options
33
+ def details
34
+ @details
35
35
  end
36
36
 
37
37
  def add_location(location)
@@ -1,3 +1,3 @@
1
1
  module Watchr
2
- VERSION = "0.1.7.1"
2
+ VERSION = "0.1.8"
3
3
  end
@@ -50,7 +50,8 @@ describe Watchr::Analysers::Flog do
50
50
  :complex_method,
51
51
  complex_method.name,
52
52
  "complexity = #{complex_method.total_score}",
53
- complex_method.location
53
+ complex_method.location,
54
+ { :complexity => complex_method.total_score }
54
55
  )
55
56
 
56
57
  analyse.expects(:add_smell).returns(smell)
@@ -63,7 +64,8 @@ describe Watchr::Analysers::Flog do
63
64
  :very_complex_method,
64
65
  very_complex_method.name,
65
66
  "complexity = #{very_complex_method.total_score}",
66
- very_complex_method.location
67
+ very_complex_method.location,
68
+ { :complexity => very_complex_method.total_score }
67
69
  )
68
70
 
69
71
  analyse.expects(:add_smell).returns(smell)
@@ -76,7 +78,8 @@ describe Watchr::Analysers::Flog do
76
78
  :very_complex_object,
77
79
  clazz.name,
78
80
  "complexity = #{clazz.total_score}",
79
- clazz.location
81
+ clazz.location,
82
+ { :complexity => clazz.total_score }
80
83
  )
81
84
 
82
85
  analyse.expects(:add_smell).returns(smell)
File without changes
@@ -6,7 +6,7 @@ describe Watchr::Rating do
6
6
  let(:complexity_smell) {
7
7
  stub('smell',
8
8
  :type => :complex_method,
9
- :options => {:score => 29.3}
9
+ :details => {:complexity => 29.3}
10
10
  )
11
11
  }
12
12
 
@@ -19,7 +19,7 @@ describe Watchr::Rating do
19
19
  let(:duplication_smell) {
20
20
  stub('smell',
21
21
  :type => :identical_code,
22
- :options => {:mass => 72})
22
+ :details => {:mass => 72})
23
23
  }
24
24
 
25
25
  let(:smells) { [complexity_smell, other_smell, duplication_smell] }
@@ -13,9 +13,9 @@ describe Watchr::Smell do
13
13
 
14
14
  let(:context) { 'context' }
15
15
 
16
- let(:options) { stub('options') }
16
+ let(:details) { stub('details') }
17
17
 
18
- let(:smell) { Watchr::Smell.new(type, context, description, locations, options) }
18
+ let(:smell) { Watchr::Smell.new(type, context, description, locations, details) }
19
19
 
20
20
  subject { smell }
21
21
 
@@ -39,7 +39,7 @@ describe Watchr::Smell do
39
39
 
40
40
  its(:description) { should == description }
41
41
 
42
- its(:options) { should == options }
42
+ its(:details) { should == details }
43
43
 
44
44
  its(:context) { should == context }
45
45
  end
metadata CHANGED
@@ -5,9 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 7
9
- - 1
10
- version: 0.1.7.1
8
+ - 8
9
+ version: 0.1.8
11
10
  platform: ruby
12
11
  authors:
13
12
  - Petr Janda
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2012-07-14 00:00:00 +02:00
17
+ date: 2012-07-28 00:00:00 +02:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -92,8 +91,10 @@ files:
92
91
  - lib/watchr/file_analyse.rb
93
92
  - lib/watchr/location.rb
94
93
  - lib/watchr/metrics/flay/diff.rb
94
+ - lib/watchr/metrics/flay/diff_factory.rb
95
95
  - lib/watchr/metrics/flay/report.rb
96
96
  - lib/watchr/metrics/flog/class.rb
97
+ - lib/watchr/metrics/flog/class_report_factory.rb
97
98
  - lib/watchr/metrics/flog/method.rb
98
99
  - lib/watchr/metrics/flog/report.rb
99
100
  - lib/watchr/metrics/reek/report.rb
@@ -109,9 +110,9 @@ files:
109
110
  - spec/watchr/analyse_spec.rb
110
111
  - spec/watchr/analysers/flog_spec.rb
111
112
  - spec/watchr/file_analyse_spec.rb
112
- - spec/watchr/flay/report_spec.rb
113
- - spec/watchr/flog_metric/flog_matric/flog_report_spec.rb
114
113
  - spec/watchr/location_spec.rb
114
+ - spec/watchr/metrics/flay/report_spec.rb
115
+ - spec/watchr/metrics/flog/flog_report_spec.rb
115
116
  - spec/watchr/paths_spec.rb
116
117
  - spec/watchr/rating_spec.rb
117
118
  - spec/watchr/smell_spec.rb
@@ -156,9 +157,9 @@ test_files:
156
157
  - spec/watchr/analyse_spec.rb
157
158
  - spec/watchr/analysers/flog_spec.rb
158
159
  - spec/watchr/file_analyse_spec.rb
159
- - spec/watchr/flay/report_spec.rb
160
- - spec/watchr/flog_metric/flog_matric/flog_report_spec.rb
161
160
  - spec/watchr/location_spec.rb
161
+ - spec/watchr/metrics/flay/report_spec.rb
162
+ - spec/watchr/metrics/flog/flog_report_spec.rb
162
163
  - spec/watchr/paths_spec.rb
163
164
  - spec/watchr/rating_spec.rb
164
165
  - spec/watchr/smell_spec.rb