Description¶ ↑
This module provides Java style interfaces for Ruby, including a fairly
similar syntax. I don't necessarily believe in interfaces, but I wanted to
put it out there as proof that it could be done. Frankly, Java needs mixins
more than Ruby needs interfaces, but here you go.
Installation¶ ↑
gem install interface
Synopsis¶ ↑
require 'interface'
MyInterface = interface{
required_methods :foo, :bar, :baz
}
class MyClass
def foo
puts "foo"
end
def bar
puts "bar"
end
implements MyInterface
end
General Notes¶ ↑
Subinterfaces work as well. See the test_sub.rb file under the 'test'
directory for a sample.
Developer's Notes¶ ↑
A discussion on IRC with Mauricio Fernandez got us talking about traits.
During that discussion I remembered a blog entry by David Naseby. I
revisited his blog entry and took a closer look:
http://ruby-naseby.blogspot.com/2008/11/traits-in-ruby.html
Keep in mind that I also happened to be thinking about Java at the moment
because of a recent job switch that involved coding in Java. I was also
trying to figure out what the purpose of interfaces were.
As I read the first page of David Naseby's article I realized that,
whether intended or not, he had implemented a rudimentary form of interfaces
for Ruby. When I discovered this, I talked about it some more with Mauricio
and he and I (mostly him) fleshed out the rest of the module, including some
syntax improvements. The result is syntax and functionality that is nearly
identical to Java.
I should note that, although I am listed as the author, this was mostly the
combined work of David Naseby and Mauricio Fernandez. I just happened to be
the guy that put it all together.
Acknowledgements¶ ↑
This module was largely inspired and somewhat copied from a post by
David Naseby (see URL above). It was subsequently modified almost entirely
by Mauricio Fernandez through a series of discussions on IRC.
Copyright¶ ↑
(C) 2004-2016 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.
License¶ ↑
Artistic 2.0
Author¶ ↑
Daniel J. Berger