require "rspec/autorun"

## A puddle of ducks

class AuthenticDuck
  def squeeze
    "quack"
  end
end

class GeezerDuck
  def squeeze
    "OI! I'M QUACKING HERE"
  end
end

class BrokenDuck
  # Oops no squeeze
end

### Shared examples can describe & enforce a consistent interface

RSpec.shared_examples "quacks like a duck" do
  it "can be squeezed" do
    expect(subject).to respond_to :squeeze
    expect(subject.squeeze).to match(/quack/i)
  end
end

RSpec.describe AuthenticDuck do
  include_examples "quacks like a duck"
end

RSpec.describe GeezerDuck do
  include_examples "quacks like a duck"
end

RSpec.describe BrokenDuck do
  include_examples "quacks like a duck"
end