Filtration is a clean, lightweight way to filter arguments going into and coming out of methods (similar to decorators in Python).
Example:
class Bar def foo(x) x + 2 end def foo_too(x) x + 2 end def foo_as_well(x) "#{x.to_s} to the max!" end def foo_forever(x) "#{x.to_s} to the max!" end end class Foo < Bar prefilter(:foo){|x| x * 2} postfilter(:foo_too){|x| x * 2} end randy = Foo.new randy.foo(2) #=> (x * 2) + 2 = 6 (for x = 2) randy.foo_too(2) #=> (x + 2) * 2 = 8 (for x = 2) class AnotherFoo < Bar prefilter :foo, :double postfilter :foo_too, :double def double(x) x * 2 end end savage = AnotherFoo.new savage.foo(2) #=> (x * 2) + 2 = 6 savage.foo_too(2) #=> (x + 2) * 2 => 8 class YetAnotherFoo < Bar prefilter :foo_as_well, &:upcase postfilter :foo_forever, &:upcase end machoman = YetAnotherFoo.new machoman.foo_as_well('filtration') #=> "#{x.upcase} to the max!" = 'FILTRATION to the max!' machoman.foo_forever('filtration') #=> "#{x} to the max!".upcase = 'FILTRATION TO THE MAX!'
Filtration stands on its own!
RSpec is used for testing, with SimpleCov for code coverage.