Sha256: 2d73a88f3673c272ed1112c74b74de850c357795ffcb314787f1d673ed006620

Contents?: true

Size: 1.66 KB

Versions: 3

Compression:

Stored size: 1.66 KB

Contents

![duckface](https://user-images.githubusercontent.com/2643026/40590182-811ac3bc-61f2-11e8-814a-b235c51fd52c.jpg)

# Duckface [![CircleCI](https://circleci.com/gh/samuelgiles/duckface.svg?style=svg)](https://circleci.com/gh/samuelgiles/duckface)

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`

```ruby
require 'duckface/rspec'
```

## Usage

### Define an interface

```ruby
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

```ruby
require 'duckface'

class MyImplementation
  implements_interface MyInterface

  def say_my_name(name)
    puts name
  end
end
```

### Test that an implementation correctly implements an interface

```ruby
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:
```ruby
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
```

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
duckface-interfaces-0.0.5 README.md
duckface-interfaces-0.0.4 README.md
duckface-interfaces-0.0.3 README.md