A collection of tools to enforce duck typing based interfaces in Ruby.
Install
From gem:
gem 'duckface-interfaces', require: 'duckface'
From source:
gem 'duckface-interfaces', require: 'duckface', git: 'git@github.com:samuelgiles/duckface.git'
Configure
RSpec
spec/spec_helper.rb
require 'duckface/rspec'
Usage
Define an interface
require 'duckface'
module MyInterface
extend Duckface::ActsAsInterface
exclude_methods_from_interface_enforcement :ignoreable_method_a, :ignoreable_method_b
def say_my_name(_name)
raise NotImplementedMethod
end
def ignoreable_method_a
puts 'I can be ignored'
end
def ignoreable_method_b
puts 'And so can I'
end
end
Define an implementation
require 'duckface'
class MyImplementation
implements_interface MyInterface
def say_my_name(name)
puts name
end
end
Test that an implementation correctly implements an interface
require 'spec_helper'
describe MyImplementation
it_behaves_like 'it implements', MyInterface
end
If it fails you'll get messages pointing out where you've gone wrong:
Failures:
1) MyImplementation behaves like it implements MyInterface correctly
Failure/Error: expect(check_session.successful?).to be(true), formatted_message(check_session)
expected to correctly implement MyInterface:
- say_my_name is not present