Description
A Ruby module that can make your classes final. A final class cannot
be subclassed, and its instance methods cannot be redefined.
Installation
gem install final
Synopsis
require 'final'
class Alpha
include Final
def foo
puts "Hello"
end
end
class Beta < Alpha; end
class Alpha
def foo
puts "Hi"
end
end
class Alpha
def bar
puts "World"
end
end
Developer’s Notes
This library is merely a proof of concept that was published as the result
of a tweet made by James Edward Gray II, where he commented that Ruby core
classes should never be subclassed. Knowing that static languages like Java
implement the "final" keyword as a way to prevent subclassing, I wanted to
see if something similar could be done for Ruby. Turns out it can.
I do not, however, necessarily advocate actually using this library in
production code. Freezing a class this way is contrary to the very nature
of Ruby and dynamic languages in general. If you're going to use it, you had
better have a very good reason for doing so!
Caveats
Only instance methods are prevented from redefinition. Singleton methods are
not final. This change may happen in a future release.
License
Artistic 2.0
Copyright
(C) 2003-2015 Daniel J. Berger
All Rights Reserved.
Warranty
This package is provided "as is" and without any express or
implied warranties, including, without limitation, the implied
warranties of merchantability and fitness for a particular purpose.
Author
Daniel J. Berger