duckface

Duckface CircleCI

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: '[email protected]: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