Module Reek::Spec
In: lib/reek/spec.rb

Provides matchers for Rspec, making it easy to check code quality.

If you require this module somewhere within your spec (or in your spec_helper), Reek will arrange to update Spec::Runner‘s config so that it knows about the matchers defined here.

Examples

Here‘s a spec that ensures there are no smell warnings in the current project:

 describe 'source code quality' do
   Dir['lib/**/*.rb'].each do |path|
     it "reports no smells in #{path}" do
       File.new(path).should_not reek
     end
   end
 end

And here‘s an even simpler way to do the same:

 it 'has no code smells' do
   Dir['lib/**/*.rb'].should_not reek
 end

Here‘s a simple check of a code fragment:

 'def equals(other) other.thing == self.thing end'.should_not reek

And a more complex example, making use of one of the factory methods for Source so that the code is parsed and analysed only once:

  ruby = 'def double_thing() @other.thing.foo + @other.thing.foo end'.to_source
  ruby.should reek_of(:Duplication, /@other.thing[^\.]/)
  ruby.should reek_of(:Duplication, /@other.thing.foo/)
  ruby.should_not reek_of(:FeatureEnvy)

Methods

reek   reek_of   reek_only_of  

Public Instance methods

Returns true if and only if the target source code contains smells.

[Source]

# File lib/reek/spec.rb, line 59
    def reek
      ShouldReek.new
    end

Checks the target source code for instances of smell_class, and returns true only if one of them has a report string matching all of the patterns.

[Source]

# File lib/reek/spec.rb, line 85
    def reek_of(smell_class, *patterns)
      ShouldReekOf.new(smell_class, patterns)
    end

As for reek_of, but the matched smell warning must be the only warning of any kind in the target source code‘s Reek report.

[Source]

# File lib/reek/spec.rb, line 110
    def reek_only_of(smell_class, *patterns)
      ShouldReekOnlyOf.new(smell_class, patterns)
    end

[Validate]