Sha256: 6c0aa57c147c5932e64f0d688f98e785e4eb6d71846a3ba781fcecb14692d278

Contents?: true

Size: 1.45 KB

Versions: 13

Compression:

Stored size: 1.45 KB

Contents

# Reek Driven Development

## rake

One way to drive quality into your code from the very beginning of a project is to run `reek` as a part of your testing process. For example, you could do that by adding a [Rake Task](Rake-Task.md) to your rakefile, which will make it easy to run `reek` on all your source files whenever you need to.

```Ruby
require 'reek/rake/task'

Reek::Rake::Task.new do |t|
  t.fail_on_error = true
  t.verbose = false
  t.source_files = 'lib/**/*.rb'
end
```

Now the command `reek` will run `reek` on your source code (and in this case, it fails if it finds any smells). For more detailed information about `reek`'s integration with Rake, see [Rake Task](Rake-Task.md) in this wiki.

## reek/spec

But there's another way; a much more effective "Reek-driven" approach: add `reek` expectations directly into your Rspec specs. Here's an example taken directly from `reek`'s own source code:

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

By requiring "reek/spec":http://reek.rubyforge.org/rdoc/classes/Reek/Spec.html you gain access to the `reek` matcher, which returns true if and only if `reek` finds smells in your code. And if the test fails, the matcher produces an error message that includes details of all the smells it found.

## assert

If you're not yet into BDD with Rspec, you can still gain the benefits of Reek-driven development using assertions:

```Ruby
assert !Dir['lib/**/*.rb'].to_source.smelly?
```

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
reek-3.5.0 docs/Reek-Driven-Development.md
reek-3.4.1 docs/Reek-Driven-Development.md
reek-3.4.0 docs/Reek-Driven-Development.md
reek-3.3.1 docs/Reek-Driven-Development.md
reek-3.3.0 docs/Reek-Driven-Development.md
reek-3.2.1 docs/Reek-Driven-Development.md
reek-3.2 docs/Reek-Driven-Development.md
reek-3.1 docs/Reek-Driven-Development.md
reek-3.0.4 docs/Reek-Driven-Development.md
reek-3.0.3 docs/Reek-Driven-Development.md
reek-3.0.2 docs/Reek-Driven-Development.md
reek-3.0.1 docs/Reek-Driven-Development.md
reek-3.0.0 docs/Reek-Driven-Development.md