Module: Reek::Spec
- Defined in:
- lib/reek/spec.rb
Overview
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)
Defined Under Namespace
Classes: ShouldReek, ShouldReekOf, ShouldReekOnlyOf
Instance Method Summary collapse
-
#reek ⇒ Object
Returns
true
if and only if the target source code contains smells. -
#reek_of(smell_class, *patterns) ⇒ Object
Checks the target source code for instances of
smell_class
, and returnstrue
only if one of them has a report string matching all of thepatterns
. -
#reek_only_of(smell_class, *patterns) ⇒ Object
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.
Instance Method Details
#reek ⇒ Object
Returns true
if and only if the target source code contains smells.
59 60 61 |
# File 'lib/reek/spec.rb', line 59 def reek ShouldReek.new end |
#reek_of(smell_class, *patterns) ⇒ Object
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
.
85 86 87 |
# File 'lib/reek/spec.rb', line 85 def reek_of(smell_class, *patterns) ShouldReekOf.new(smell_class, patterns) end |
#reek_only_of(smell_class, *patterns) ⇒ Object
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.
110 111 112 |
# File 'lib/reek/spec.rb', line 110 def reek_only_of(smell_class, *patterns) ShouldReekOnlyOf.new(smell_class, patterns) end |