kevinrutherford-reek 1.1.3.7 → 1.1.3.8

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/History.txt CHANGED
@@ -7,6 +7,8 @@
7
7
  ** Output now reports on all files examined, even if they have no smells
8
8
  ** Smell warnings are indented in the report; file summary headers are not
9
9
  ** Reports for multiple sources are run together; no more blank lines
10
+ * The smells masked by *.reek config files can now be seen:
11
+ ** The header for each source file now counts masked smells
10
12
 
11
13
  === Minor Changes
12
14
  * Several changes to the LongMethod counting algorithm:
@@ -22,7 +22,7 @@ Feature: Masking smells using config files
22
22
  Scenario: corrupt config file prevents normal output
23
23
  When I run reek spec/samples/corrupt_config_file/dirty.rb
24
24
  Then it fails with exit status 1
25
- And it reports the error 'Error: invalid configuration file "corrupt.reek"'
25
+ And it reports the error 'Error: Invalid configuration file "corrupt.reek" -- not a Hash'
26
26
 
27
27
  Scenario: missing source file is an error
28
28
  When I run reek no_such_file.rb
@@ -34,7 +34,7 @@ Feature: Masking smells using config files
34
34
  Then it fails with exit status 2
35
35
  And it reports:
36
36
  """
37
- spec/samples/masked/dirty.rb -- 3 warnings:
37
+ spec/samples/masked/dirty.rb -- 3 warnings (+3 masked):
38
38
  Dirty#a calls @s.title multiple times (Duplication)
39
39
  Dirty#a calls puts(@s.title) multiple times (Duplication)
40
40
  Dirty#a/block/block is nested (Nested Iterators)
@@ -0,0 +1,31 @@
1
+ require 'yaml'
2
+
3
+ module Reek
4
+ class ConfigFile
5
+
6
+ def initialize(file_path)
7
+ @file_path = file_path
8
+ @hash = YAML.load_file(@file_path) || {}
9
+ problem('not a Hash') unless Hash === @hash
10
+ end
11
+
12
+ #
13
+ # Configure the given sniffer using the contents of the config file.
14
+ #
15
+ def configure(sniffer)
16
+ @hash.each { |klass_name, config|
17
+ sniffer.configure(find_class(klass_name), config)
18
+ }
19
+ end
20
+
21
+ def find_class(name)
22
+ klass = Reek::Smells.const_get(name)
23
+ problem("#{name} is not a code smell") unless klass
24
+ klass
25
+ end
26
+
27
+ def problem(reason)
28
+ raise "Invalid configuration file \"#{File.basename(@file_path)}\" -- #{reason}"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+
2
+ module Reek
3
+ class DetectorStack
4
+
5
+ def initialize(default_detector)
6
+ @detectors = [default_detector]
7
+ end
8
+
9
+ def push(config)
10
+ det = @detectors[0].copy
11
+ det.configure_with(config)
12
+ @detectors.each {|smell| smell.be_masked}
13
+ @detectors << det
14
+ end
15
+
16
+ def listen_to(hooks)
17
+ @detectors.each { |smell| smell.listen_to(hooks) }
18
+ end
19
+
20
+ def report_on(report)
21
+ @detectors.each { |smell| smell.report_on(report) }
22
+ end
23
+ end
24
+ end
@@ -22,7 +22,7 @@ module Reek
22
22
 
23
23
  def initialize(code, desc) # :nodoc:
24
24
  super
25
- @sniffer.disable('LargeClass')
25
+ @sniffer.disable(LargeClass)
26
26
  end
27
27
 
28
28
  def can_parse_objects?
@@ -29,8 +29,7 @@ module Reek
29
29
  end
30
30
 
31
31
  def initialize(config = Duplication.default_config)
32
- super
33
- @max_calls = config[MAX_ALLOWED_CALLS_KEY]
32
+ super(config)
34
33
  end
35
34
 
36
35
  def examine_context(method)
@@ -41,7 +40,7 @@ module Reek
41
40
 
42
41
  def smelly_calls(method) # :nodoc:
43
42
  method.calls.select do |key,val|
44
- val > @max_calls and key[2] != :new
43
+ val > @config[MAX_ALLOWED_CALLS_KEY] and key[2] != :new
45
44
  end.map { |call_exp| call_exp[0] }
46
45
  end
47
46
  end
@@ -37,20 +37,18 @@ module Reek
37
37
  end
38
38
 
39
39
  def initialize(config = LargeClass.default_config)
40
- super
41
- @max_methods = config[MAX_ALLOWED_METHODS_KEY]
42
- @max_instance_variables = config[MAX_ALLOWED_IVARS_KEY]
40
+ super(config)
43
41
  end
44
42
 
45
43
  def check_num_methods(klass) # :nodoc:
46
44
  count = klass.num_methods
47
- return if count <= @max_methods
45
+ return if count <= @config[MAX_ALLOWED_METHODS_KEY]
48
46
  found(klass, "has at least #{count} methods")
49
47
  end
50
48
 
51
49
  def check_num_ivars(klass) # :nodoc:
52
50
  count = klass.variable_names.length
53
- return if count <= @max_instance_variables
51
+ return if count <= @config[MAX_ALLOWED_IVARS_KEY]
54
52
  found(klass, "has at least #{count} instance variables")
55
53
  end
56
54
 
@@ -23,9 +23,14 @@ module Reek
23
23
  )
24
24
  end
25
25
 
26
+ attr_reader :max_statements
27
+
26
28
  def initialize(config = LongMethod.default_config)
27
- super
28
- @max_statements = config[MAX_ALLOWED_STATEMENTS_KEY]
29
+ super(config)
30
+ end
31
+
32
+ def max_statements
33
+ @config['max_statements']
29
34
  end
30
35
 
31
36
  #
@@ -34,7 +39,7 @@ module Reek
34
39
  #
35
40
  def examine_context(method)
36
41
  num = method.num_statements
37
- return false if num <= @max_statements
42
+ return false if num <= max_statements
38
43
  found(method, "has approx #{num} statements")
39
44
  end
40
45
  end
@@ -22,9 +22,8 @@ module Reek
22
22
  super.adopt(MAX_ALLOWED_PARAMS_KEY => 3)
23
23
  end
24
24
 
25
- def initialize(config)
26
- super
27
- @max_params = config['max_params']
25
+ def initialize(config = LongParameterList.default_config)
26
+ super(config)
28
27
  @action = 'has'
29
28
  end
30
29
 
@@ -34,7 +33,7 @@ module Reek
34
33
  #
35
34
  def examine_context(ctx)
36
35
  num_params = ctx.parameters.length
37
- return false if num_params <= @max_params
36
+ return false if num_params <= @config['max_params']
38
37
  found(ctx, "#{@action} #{num_params} parameters")
39
38
  end
40
39
  end
@@ -9,7 +9,7 @@ module Reek
9
9
  [:yield]
10
10
  end
11
11
 
12
- def initialize(config)
12
+ def initialize(config = LongYieldList.default_config)
13
13
  super
14
14
  @action = 'yields'
15
15
  end
@@ -40,23 +40,26 @@ module Reek
40
40
 
41
41
  def self.listen(hooks, config)
42
42
  detector = create(config)
43
- contexts.each { |ctx| hooks[ctx] << detector }
43
+ detector.listen_to(hooks)
44
44
  detector
45
45
  end
46
46
 
47
- def initialize(config)
48
- @enabled = config[ENABLED_KEY]
49
- @exceptions = config[EXCLUDE_KEY]
47
+ def initialize(config = SmellDetector.default_config)
48
+ @config = config
50
49
  @smells_found = []
51
50
  @masked = false
52
51
  end
53
52
 
53
+ def listen_to(hooks)
54
+ self.class.contexts.each { |ctx| hooks[ctx] << self }
55
+ end
56
+
54
57
  def be_masked
55
58
  @masked = true
56
59
  end
57
60
 
58
61
  def enabled?
59
- @enabled
62
+ @config[ENABLED_KEY]
60
63
  end
61
64
 
62
65
  def configure(config)
@@ -66,12 +69,16 @@ module Reek
66
69
  end
67
70
 
68
71
  def configure_with(config)
69
- @enabled = config[ENABLED_KEY] # if config.has_key?(ENABLED_KEY)
72
+ @config.adopt!(config)
73
+ end
74
+
75
+ def copy
76
+ self.class.new(@config.deep_copy)
70
77
  end
71
78
 
72
79
  def examine(context)
73
80
  before = @smells_found.size
74
- examine_context(context) if @enabled and !exception?(context)
81
+ examine_context(context) if enabled? and !exception?(context)
75
82
  @smells_found.length > before
76
83
  end
77
84
 
@@ -79,8 +86,7 @@ module Reek
79
86
  end
80
87
 
81
88
  def exception?(context)
82
- return false if @exceptions.nil? or @exceptions.length == 0
83
- context.matches?(@exceptions)
89
+ context.matches?(@config[EXCLUDE_KEY])
84
90
  end
85
91
 
86
92
  def found(scope, warning)
@@ -40,9 +40,7 @@ module Reek
40
40
  end
41
41
 
42
42
  def initialize(config = UncommunicativeName.default_config)
43
- super
44
- @reject = config[REJECT_KEY]
45
- @accept = config[ACCEPT_KEY]
43
+ super(config)
46
44
  end
47
45
 
48
46
  #
@@ -63,15 +61,15 @@ module Reek
63
61
 
64
62
  def consider_name(context) # :nodoc:
65
63
  name = context.name
66
- return false if @accept.include?(context.to_s) # TODO: fq_name() ?
64
+ return false if @config[ACCEPT_KEY].include?(context.to_s) # TODO: fq_name() ?
67
65
  return false unless is_bad_name?(name)
68
66
  found(context, "has the name '#{name}'")
69
67
  end
70
68
 
71
69
  def is_bad_name?(name) # :nodoc:
72
70
  var = name.effective_name
73
- return false if var == '*' or @accept.include?(var)
74
- @reject.detect {|patt| patt === var}
71
+ return false if var == '*' or @config[ACCEPT_KEY].include?(var)
72
+ @config[REJECT_KEY].detect {|patt| patt === var}
75
73
  end
76
74
  end
77
75
  end
data/lib/reek/sniffer.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'reek/detector_stack'
1
2
  require 'reek/smells/control_couple'
2
3
  require 'reek/smells/duplication'
3
4
  require 'reek/smells/feature_envy'
@@ -8,6 +9,7 @@ require 'reek/smells/long_yield_list'
8
9
  require 'reek/smells/nested_iterators'
9
10
  require 'reek/smells/uncommunicative_name'
10
11
  require 'reek/smells/utility_function'
12
+ require 'reek/config_file'
11
13
  require 'yaml'
12
14
 
13
15
  class Hash
@@ -55,7 +57,9 @@ module Reek
55
57
  def initialize
56
58
  defaults_file = File.join(File.dirname(__FILE__), '..', '..', 'config', 'defaults.reek')
57
59
  @config = YAML.load_file(defaults_file)
58
- @detectors = nil
60
+ @typed_detectors = nil
61
+ @detectors = Hash.new
62
+ SMELL_CLASSES.each { |klass| @detectors[klass] = DetectorStack.new(klass.new) }
59
63
  @listeners = []
60
64
  end
61
65
 
@@ -67,27 +71,21 @@ module Reek
67
71
  #
68
72
  def configure_along_path(filename)
69
73
  path = File.expand_path(File.dirname(filename))
70
- all_reekfiles(path).each { |rfile| configure_with(rfile) }
74
+ all_reekfiles(path).each { |config_file| ConfigFile.new(config_file).configure(self) }
71
75
  self
72
76
  end
73
77
 
74
- #
75
- # Overrides this sniffer's current settings with those in the named
76
- # +config_file+.
77
- #
78
- def configure_with(config_file)
79
- hash = YAML.load_file(config_file)
80
- return unless hash
81
- raise "invalid configuration file \"#{File.basename(config_file)}\"" unless Hash === hash
82
- hash.push_keys(@config)
78
+ def configure(klass, config)
79
+ @detectors[klass].push(config)
83
80
  end
84
81
 
85
- def disable(smell)
86
- @config[smell].adopt!({Reek::Smells::SmellDetector::ENABLED_KEY => false})
82
+ def disable(klass)
83
+ disabled_config = {Reek::Smells::SmellDetector::ENABLED_KEY => false}
84
+ @detectors[klass].push(disabled_config)
87
85
  end
88
86
 
89
87
  def report_on(report)
90
- @listeners.each {|smell| smell.report_on(report)}
88
+ @detectors.each_value { |stack| stack.report_on(report) }
91
89
  end
92
90
 
93
91
  def examine(scope, type)
@@ -98,11 +96,11 @@ module Reek
98
96
  private
99
97
 
100
98
  def smell_listeners()
101
- unless @detectors
102
- @detectors = Hash.new {|hash,key| hash[key] = [] }
103
- SMELL_CLASSES.each { |smell| @listeners << smell.listen(@detectors, @config) }
99
+ unless @typed_detectors
100
+ @typed_detectors = Hash.new {|hash,key| hash[key] = [] }
101
+ @detectors.each_value { |stack| stack.listen_to(@typed_detectors) }
104
102
  end
105
- @detectors
103
+ @typed_detectors
106
104
  end
107
105
 
108
106
  def all_reekfiles(path)
data/lib/reek.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
3
  module Reek # :doc:
4
- VERSION = '1.1.3.7'
4
+ VERSION = '1.1.3.8'
5
5
  end
data/reek.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{reek}
5
- s.version = "1.1.3.7"
5
+ s.version = "1.1.3.8"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Kevin Rutherford"]
9
- s.date = %q{2009-07-02}
9
+ s.date = %q{2009-07-06}
10
10
  s.default_executable = %q{reek}
11
11
  s.description = %q{Code smell detector for Ruby}
12
12
  s.email = ["kevin@rutherford-software.com"]
13
13
  s.executables = ["reek"]
14
14
  s.extra_rdoc_files = ["History.txt", "README.txt"]
15
- s.files = ["History.txt", "README.txt", "Rakefile", "bin/reek", "config/defaults.reek", "features/masking_smells.feature", "features/options.feature", "features/rake_task.feature", "features/reports.feature", "features/samples.feature", "features/stdin.feature", "features/step_definitions/reek_steps.rb", "features/support/env.rb", "lib/reek.rb", "lib/reek/block_context.rb", "lib/reek/class_context.rb", "lib/reek/code_context.rb", "lib/reek/code_parser.rb", "lib/reek/exceptions.reek", "lib/reek/if_context.rb", "lib/reek/method_context.rb", "lib/reek/module_context.rb", "lib/reek/name.rb", "lib/reek/object_refs.rb", "lib/reek/object_source.rb", "lib/reek/options.rb", "lib/reek/rake_task.rb", "lib/reek/report.rb", "lib/reek/sexp_formatter.rb", "lib/reek/singleton_method_context.rb", "lib/reek/smell_warning.rb", "lib/reek/smells/control_couple.rb", "lib/reek/smells/duplication.rb", "lib/reek/smells/feature_envy.rb", "lib/reek/smells/large_class.rb", "lib/reek/smells/long_method.rb", "lib/reek/smells/long_parameter_list.rb", "lib/reek/smells/long_yield_list.rb", "lib/reek/smells/nested_iterators.rb", "lib/reek/smells/smell_detector.rb", "lib/reek/smells/uncommunicative_name.rb", "lib/reek/smells/utility_function.rb", "lib/reek/sniffer.rb", "lib/reek/source.rb", "lib/reek/spec.rb", "lib/reek/stop_context.rb", "lib/reek/yield_call_context.rb", "reek.gemspec", "spec/reek/block_context_spec.rb", "spec/reek/class_context_spec.rb", "spec/reek/code_context_spec.rb", "spec/reek/code_parser_spec.rb", "spec/reek/config_spec.rb", "spec/reek/if_context_spec.rb", "spec/reek/method_context_spec.rb", "spec/reek/module_context_spec.rb", "spec/reek/name_spec.rb", "spec/reek/object_refs_spec.rb", "spec/reek/object_source_spec.rb", "spec/reek/options_spec.rb", "spec/reek/report_spec.rb", "spec/reek/singleton_method_context_spec.rb", "spec/reek/smell_warning_spec.rb", "spec/reek/smells/control_couple_spec.rb", "spec/reek/smells/duplication_spec.rb", "spec/reek/smells/feature_envy_spec.rb", "spec/reek/smells/large_class_spec.rb", "spec/reek/smells/long_method_spec.rb", "spec/reek/smells/long_parameter_list_spec.rb", "spec/reek/smells/nested_iterators_spec.rb", "spec/reek/smells/smell_detector_spec.rb", "spec/reek/smells/uncommunicative_name_spec.rb", "spec/reek/smells/utility_function_spec.rb", "spec/reek/spec_spec.rb", "spec/samples/corrupt_config_file/corrupt.reek", "spec/samples/corrupt_config_file/dirty.rb", "spec/samples/empty_config_file/dirty.rb", "spec/samples/empty_config_file/empty.reek", "spec/samples/inline.rb", "spec/samples/masked/dirty.rb", "spec/samples/masked/masked.reek", "spec/samples/optparse.rb", "spec/samples/redcloth.rb", "spec/samples/three_clean_files/clean_one.rb", "spec/samples/three_clean_files/clean_three.rb", "spec/samples/three_clean_files/clean_two.rb", "spec/samples/two_smelly_files/dirty_one.rb", "spec/samples/two_smelly_files/dirty_two.rb", "spec/slow/inline_spec.rb", "spec/slow/optparse_spec.rb", "spec/slow/redcloth_spec.rb", "spec/slow/reek_source_spec.rb", "spec/slow/source_list_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/reek.rake", "tasks/test.rake"]
15
+ s.files = ["History.txt", "README.txt", "Rakefile", "bin/reek", "config/defaults.reek", "features/masking_smells.feature", "features/options.feature", "features/rake_task.feature", "features/reports.feature", "features/samples.feature", "features/stdin.feature", "features/step_definitions/reek_steps.rb", "features/support/env.rb", "lib/reek.rb", "lib/reek/block_context.rb", "lib/reek/class_context.rb", "lib/reek/code_context.rb", "lib/reek/code_parser.rb", "lib/reek/config_file.rb", "lib/reek/detector_stack.rb", "lib/reek/exceptions.reek", "lib/reek/if_context.rb", "lib/reek/method_context.rb", "lib/reek/module_context.rb", "lib/reek/name.rb", "lib/reek/object_refs.rb", "lib/reek/object_source.rb", "lib/reek/options.rb", "lib/reek/rake_task.rb", "lib/reek/report.rb", "lib/reek/sexp_formatter.rb", "lib/reek/singleton_method_context.rb", "lib/reek/smell_warning.rb", "lib/reek/smells/control_couple.rb", "lib/reek/smells/duplication.rb", "lib/reek/smells/feature_envy.rb", "lib/reek/smells/large_class.rb", "lib/reek/smells/long_method.rb", "lib/reek/smells/long_parameter_list.rb", "lib/reek/smells/long_yield_list.rb", "lib/reek/smells/nested_iterators.rb", "lib/reek/smells/smell_detector.rb", "lib/reek/smells/uncommunicative_name.rb", "lib/reek/smells/utility_function.rb", "lib/reek/sniffer.rb", "lib/reek/source.rb", "lib/reek/spec.rb", "lib/reek/stop_context.rb", "lib/reek/yield_call_context.rb", "reek.gemspec", "spec/reek/block_context_spec.rb", "spec/reek/class_context_spec.rb", "spec/reek/code_context_spec.rb", "spec/reek/code_parser_spec.rb", "spec/reek/config_spec.rb", "spec/reek/if_context_spec.rb", "spec/reek/method_context_spec.rb", "spec/reek/module_context_spec.rb", "spec/reek/name_spec.rb", "spec/reek/object_refs_spec.rb", "spec/reek/object_source_spec.rb", "spec/reek/options_spec.rb", "spec/reek/report_spec.rb", "spec/reek/singleton_method_context_spec.rb", "spec/reek/smell_warning_spec.rb", "spec/reek/smells/control_couple_spec.rb", "spec/reek/smells/duplication_spec.rb", "spec/reek/smells/feature_envy_spec.rb", "spec/reek/smells/large_class_spec.rb", "spec/reek/smells/long_method_spec.rb", "spec/reek/smells/long_parameter_list_spec.rb", "spec/reek/smells/nested_iterators_spec.rb", "spec/reek/smells/smell_detector_spec.rb", "spec/reek/smells/uncommunicative_name_spec.rb", "spec/reek/smells/utility_function_spec.rb", "spec/reek/spec_spec.rb", "spec/samples/corrupt_config_file/corrupt.reek", "spec/samples/corrupt_config_file/dirty.rb", "spec/samples/empty_config_file/dirty.rb", "spec/samples/empty_config_file/empty.reek", "spec/samples/inline.rb", "spec/samples/masked/dirty.rb", "spec/samples/masked/masked.reek", "spec/samples/optparse.rb", "spec/samples/redcloth.rb", "spec/samples/three_clean_files/clean_one.rb", "spec/samples/three_clean_files/clean_three.rb", "spec/samples/three_clean_files/clean_two.rb", "spec/samples/two_smelly_files/dirty_one.rb", "spec/samples/two_smelly_files/dirty_two.rb", "spec/slow/inline_spec.rb", "spec/slow/optparse_spec.rb", "spec/slow/redcloth_spec.rb", "spec/slow/reek_source_spec.rb", "spec/slow/source_list_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/reek.rake", "tasks/test.rake"]
16
16
  s.homepage = %q{http://wiki.github.com/kevinrutherford/reek}
17
17
  s.post_install_message = %q{
18
18
  For more information on reek, see http://wiki.github.com/kevinrutherford/reek
@@ -41,26 +41,23 @@ describe Duplication, "non-repeated method calls" do
41
41
  end
42
42
  end
43
43
 
44
- require 'ostruct'
45
-
46
44
  describe Duplication, '#examine' do
47
45
  before :each do
48
- @mc = OpenStruct.new
46
+ @mc = MethodContext.new(StopContext.new, s(:defn, :fred))
49
47
  @dup = Duplication.new
50
48
  end
51
49
 
52
50
  it 'should return true when reporting a smell' do
53
- @mc.calls = {s(:call, nil, :other, s(:arglist)) => 47}
51
+ 3.times { @mc.record_call_to(s(:call, nil, :other, s(:arglist)))}
54
52
  @dup.examine(@mc).should == true
55
53
  end
56
-
54
+
57
55
  it 'should return false when not reporting a smell' do
58
- @mc.calls = []
59
56
  @dup.examine(@mc).should == false
60
57
  end
61
-
58
+
62
59
  it 'should return false when not reporting calls to new' do
63
- @mc.calls = {[:call, :Set, :new] => 4}
60
+ 4.times { @mc.record_call_to(s(:call, s(:Set), :new, s(:arglist)))}
64
61
  @dup.examine(@mc).should == false
65
62
  end
66
63
  end
@@ -7,6 +7,34 @@ require 'reek/smells/large_class'
7
7
  include Reek
8
8
  include Reek::Smells
9
9
 
10
+ describe SmellDetector, 'configuration' do
11
+ before:each do
12
+ @detector = LongMethod.new
13
+ end
14
+
15
+ it 'adopts new max_statements value' do
16
+ @detector.configure_with('max_statements' => 25)
17
+ @detector.max_statements.should == 25
18
+ end
19
+ end
20
+
21
+ describe SmellDetector, 'when copied' do
22
+ before :each do
23
+ @detector = LongMethod.new
24
+ @copy = @detector.copy
25
+ end
26
+
27
+ it 'should have the same state' do
28
+ @copy.max_statements.should == @detector.max_statements
29
+ end
30
+
31
+ it 'should change independently of its parent' do
32
+ default_max = @detector.max_statements
33
+ @copy.configure_with('max_statements' => 25)
34
+ @detector.max_statements.should == default_max
35
+ end
36
+ end
37
+
10
38
  describe SmellDetector, 'when masked' do
11
39
  before(:each) do
12
40
  @detector = Duplication.new
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kevinrutherford-reek
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3.7
4
+ version: 1.1.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-02 00:00:00 -07:00
12
+ date: 2009-07-06 00:00:00 -07:00
13
13
  default_executable: reek
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -71,6 +71,8 @@ files:
71
71
  - lib/reek/class_context.rb
72
72
  - lib/reek/code_context.rb
73
73
  - lib/reek/code_parser.rb
74
+ - lib/reek/config_file.rb
75
+ - lib/reek/detector_stack.rb
74
76
  - lib/reek/exceptions.reek
75
77
  - lib/reek/if_context.rb
76
78
  - lib/reek/method_context.rb