forked from rspec/rspec.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
57 lines (55 loc) · 30.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"><![endif]-->
<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"><![endif]-->
<!--[if IE 8]><html class="no-js lt-ie9" lang="en"><![endif]-->
<!--[if gt IE 8]<!--><html class="no-js" lang="en"><!--<![endif]--><head><meta charset="UTF-8" /><meta content="width=device-width, initial-scale=1" name="viewport" /><meta content="RSpec: Behaviour Driven Development for Ruby" property="og:title" /><meta content="https://rspec.info/" property="og:url" /><meta content="https://rspec.info/images/logo_ogp.png" property="og:image" /><meta content="summary" name="twitter:card" /><meta content="@rspec" name="twitter:site" /><title>RSpec: Behaviour Driven Development for Ruby</title><link href="/stylesheets/pages/index.css" rel="stylesheet" type="text/css" /><link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" /><link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet" type="text/css" /><link href="https://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet" type="text/css" /><link href="/blog/feed.xml" rel="alternate" type="application/atom+xml" /></head><body class="index"><header><nav><h1><img alt="Logo" src="/images/logo.png" /><a href="/">RSpec</a></h1><input class="hamburger-toggle" type="checkbox" /><div class="hamburger-icon"><div class="bar"></div><div class="bar"></div><div class="bar"></div></div><ul class="menu"><li><a href="/about">About</a></li><li><a href="/documentation">Documentation</a></li><li><a href="/blog">Blog</a></li><li><a href="/upgrading-from-rspec-2">Upgrade</a></li><li><a href="/help">Get Help</a></li><li><a href="/contributing">Contributing</a></li></ul></nav></header><section class="hero"><article class="hero-text"><img alt="RSpec Logo" src="/images/logo.png" /><div>Behaviour Driven<br />Development for Ruby.</div><div>Making TDD Productive and Fun.</div></article></section><section class="get-started"><article class="steps"><h2>Let's get started!</h2><p>To kick things off, install RSpec and run <code>rspec --init</code> to
set up your project to use RSpec.</p><div class="asciinema-video">
<asciinema-player src="/casts/14095.cast" speed="3" data-size="small" id="asciicast-14095" poster="data:application/json;base64,W1tbIkZldGNoaW5nIGdlbSBtZXRhZGF0YSBmcm9tIGh0dHBzOi8vcnVieWdlbXMub3JnLy4uLi4uLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJJbnN0YWxsaW5nIGRpZmYtbGNzIDEuMi41Iix7ImZnIjoyfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJJbnN0YWxsaW5nIHJzcGVjLXN1cHBvcnQgMy4xLjIiLHsiZmciOjJ9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJJbnN0YWxsaW5nIHJzcGVjLWNvcmUgMy4xLjciLHsiZmciOjJ9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJJbnN0YWxsaW5nIHJzcGVjLWV4cGVjdGF0aW9ucyAzLjEuMiIseyJmZyI6Mn1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJJbnN0YWxsaW5nIHJzcGVjLW1vY2tzIDMuMS4zIix7ImZnIjoyfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJJbnN0YWxsaW5nIHJzcGVjIDMuMS4wIix7ImZnIjoyfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJVc2luZyBidW5kbGVyIDEuNy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siWW91ciBidW5kbGUgaXMgY29tcGxldGUhIix7ImZnIjoyfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siVXNlIGBidW5kbGUgc2hvdyBbZ2VtbmFtZV1gIHRvIHNlZSB3aGVyZSBhIGJ1bmRsZWQgZ2VtIGlzIGluc3RhbGxlZC4iLHsiZmciOjJ9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siXHUyNzlDICIseyJib2xkIjp0cnVlLCJmZyI6MX1dLFsiICIseyJib2xkIjp0cnVlLCJmZyI6Mn1dLFsiYm93bGluZyAiLHsiYm9sZCI6dHJ1ZSwiZmciOjZ9XSxbImdpdDooIix7ImJvbGQiOnRydWUsImZnIjo0fV0sWyJtYXN0ZXIiLHsiYm9sZCI6dHJ1ZSwiZmciOjF9XSxbIikgIix7ImJvbGQiOnRydWUsImZnIjo0fV0sWyJcdTI3MTciLHsiYm9sZCI6dHJ1ZSwiZmciOjN9XSxbIiAiLHsiYm9sZCI6dHJ1ZSwiZmciOjR9XSxbImJpbi9yc3BlYyAtLWluaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICBjcmVhdGUgICAucnNwZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgY3JlYXRlICAgc3BlYy9zcGVjX2hlbHBlci5yYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJcdTI3OUMgIix7ImJvbGQiOnRydWUsImZnIjoxfV0sWyIgIix7ImJvbGQiOnRydWUsImZnIjoyfV0sWyJib3dsaW5nICIseyJib2xkIjp0cnVlLCJmZyI6Nn1dLFsiZ2l0OigiLHsiYm9sZCI6dHJ1ZSwiZmciOjR9XSxbIm1hc3RlciIseyJib2xkIjp0cnVlLCJmZyI6MX1dLFsiKSAiLHsiYm9sZCI6dHJ1ZSwiZmciOjR9XSxbIlx1MjcxNyIseyJib2xkIjp0cnVlLCJmZyI6M31dLFsiICIseyJib2xkIjp0cnVlLCJmZyI6NH1dLFsiY2F0IC5yc3BlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyItLWNvbG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siLS1yZXF1aXJlIHNwZWNfaGVscGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIlx1Mjc5QyAiLHsiYm9sZCI6dHJ1ZSwiZmciOjF9XSxbIiAiLHsiYm9sZCI6dHJ1ZSwiZmciOjJ9XSxbImJvd2xpbmcgIix7ImJvbGQiOnRydWUsImZnIjo2fV0sWyJnaXQ6KCIseyJib2xkIjp0cnVlLCJmZyI6NH1dLFsibWFzdGVyIix7ImJvbGQiOnRydWUsImZnIjoxfV0sWyIpICIseyJib2xkIjp0cnVlLCJmZyI6NH1dLFsiXHUyNzE3Iix7ImJvbGQiOnRydWUsImZnIjozfV0sWyIgIix7ImJvbGQiOnRydWUsImZnIjo0fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dXQ==
"/>
</div>
<p>Start with a very simple example that expresses some basic desired
behaviour.</p><div class="asciinema-video">
<asciinema-player src="/casts/14100.cast" speed="4" data-size="small" id="asciicast-14100" poster="data:application/json;base64,W1tbIiAgMSAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyJyZXF1aXJlIix7ImZnIjoyMjh9XSxbIiAiLHsiZmciOjI1M31dLFsiJ2Jvd2xpbmcnIix7ImZnIjo4Mn1dLFsiXHUwMEFDIix7ImZnIjo4fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjI1M31dXSxbWyIgIDIgIix7ImJnIjoyMzIsImZnIjoxNX1dLFsiXHUwMEFDIix7ImZnIjo4fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgMyAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyJSU3BlYyIseyJmZyI6MTg2fV0sWyIuIix7ImZnIjoyNTN9XSxbImRlc2NyaWJlIix7ImZnIjoyMDh9XSxbIiAiLHsiZmciOjI1M31dLFsiQm93bGluZyIseyJmZyI6MTg2fV0sWyIsICIseyJmZyI6MjUzfV0sWyJcIiNzY29yZVwiIix7ImZnIjo4Mn1dLFsiICIseyJmZyI6MjUzfV0sWyJkbyIseyJmZyI6MjA4fV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgNCAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyIgICIseyJmZyI6MjUzfV0sWyJjb250ZXh0Iix7ImZnIjoyMDh9XSxbIiAiLHsiZmciOjI1M31dLFsiXCJ3aXRoIG5vIHN0cmlrZXMgb3Igc3BhcmVzXCIiLHsiZmciOjgyfV0sWyIgIix7ImZnIjoyNTN9XSxbImRvIix7ImZnIjoyMDh9XSxbIlx1MDBBQyIseyJmZyI6OH1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgNSAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyIgICAgIix7ImZnIjoyNTN9XSxbIml0Iix7ImZnIjoyMDh9XSxbIiAiLHsiZmciOjI1M31dLFsiXCJzdW1zIHRoZSBwaW4gY291bnQgZm9yIGVhY2ggcm9sbFwiIix7ImZnIjo4Mn1dLFsiICIseyJmZyI6MjUzfV0sWyJkbyIseyJmZyI6MjA4fV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgNiAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyIgICAgICBib3dsaW5nID0gIix7ImZnIjoyNTN9XSxbIkJvd2xpbmciLHsiZmciOjE4Nn1dLFsiLm5ldyIseyJmZyI6MjUzfV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV0sW1siICA3ICIseyJiZyI6MjMyLCJmZyI6MTV9XSxbIiAgICAgICIseyJmZyI6MjUzfV0sWyIyMCIseyJmZyI6MzB9XSxbIi50aW1lcyB7IGJvd2xpbmcuaGl0KCIseyJmZyI6MjUzfV0sWyI0Iix7ImZnIjozMH1dLFsiKSB9Iix7ImZnIjoyNTN9XSxbIlx1MDBBQyIseyJmZyI6OH1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjI1M31dXSxbWyIgIDggIix7ImJnIjoyMzIsImZnIjoxNX1dLFsiICAgICAgIix7ImZnIjoyNTN9XSxbImV4cGVjdCIseyJmZyI6MjA4fV0sWyIoYm93bGluZy5zY29yZSkudG8gZXEgIix7ImZnIjoyNTN9XSxbIjgwIix7ImZnIjozMH1dLFsiXHUwMEFDIix7ImZnIjo4fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgOSAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyIgICAgIix7ImZnIjoyNTN9XSxbImVuZCIseyJmZyI6MjA4fV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjI1M31dXSxbWyIgMTAgIix7ImJnIjoyMzIsImZnIjoxNX1dLFsiICAiLHsiZmciOjI1M31dLFsiZW5kIix7ImZnIjoyMDh9XSxbIlx1MDBBQyIseyJmZyI6OH1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV0sW1siIDExICIseyJiZyI6MjMyLCJmZyI6MTV9XSxbImVuZCIseyJmZyI6MjA4fV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjo4fV1dLFtbIn4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjh9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjo4fV1dLFtbIn4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjh9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjo4fV1dLFtbIn4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjh9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjo4fV1dLFtbInNwZWMvYm93bGluZ19zcGVjLnJiIFsrXSBMaW5lOjgvMTFbNzIlXUNvbDozNkJ1ZjojMls0OF1bMHgzMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiYmciOjE1LCJib2xkIjp0cnVlLCJmZyI6MH1dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV1d
"/>
</div>
<p>Run the example and watch it fail.</p><div class="asciinema-video">
<asciinema-player src="/casts/14101.cast" speed="2" data-size="small" id="asciicast-14101" poster="data:application/json;base64,W1tbIlx1Mjc5QyAiLHsiYm9sZCI6dHJ1ZSwiZmciOjF9XSxbIiAiLHsiYm9sZCI6dHJ1ZSwiZmciOjJ9XSxbImJvd2xpbmcgIix7ImJvbGQiOnRydWUsImZnIjo2fV0sWyJnaXQ6KCIseyJib2xkIjp0cnVlLCJmZyI6NH1dLFsibWFzdGVyIix7ImJvbGQiOnRydWUsImZnIjoxfV0sWyIpICIseyJib2xkIjp0cnVlLCJmZyI6NH1dLFsiYmluL3JzcGVjIC0tZm9ybWF0IGRvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIkJvd2xpbmcjc2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICB3aXRoIG5vIHN0cmlrZXMgb3Igc3BhcmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgc3VtcyB0aGUgcGluIGNvdW50IGZvciBlYWNoIHJvbGwgKEZBSUxFRCAtIDEpIix7ImZnIjoxfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJGYWlsdXJlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAxKSBCb3dsaW5nI3Njb3JlIHdpdGggbm8gc3RyaWtlcyBvciBzcGFyZXMgc3VtcyB0aGUgcGluIGNvdW50IGZvciBlYWNoIHJvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICIse31dLFsiRmFpbHVyZS9FcnJvcjogZXhwZWN0KGJvd2xpbmcuc2NvcmUpLnRvIGVxIDgwIix7ImZnIjoxfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICIse31dLFsiICAiLHsiZmciOjF9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICIse31dLFsiICBleHBlY3RlZDogODAiLHsiZmciOjF9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICIse31dLFsiICAgICAgIGdvdDogbmlsIix7ImZnIjoxfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICIse31dLFsiICAiLHsiZmciOjF9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICIse31dLFsiICAoY29tcGFyZWQgdXNpbmcgPT0pIix7ImZnIjoxfV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICIse31dLFsiIyAuL3NwZWMvYm93bGluZ19zcGVjLnJiOjg6aW4gYGJsb2NrICgzIGxldmVscykgaW4gPHRvcCAocmVxdWlyZWQpPiciLHsiZmciOjZ9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIkZpbmlzaGVkIGluIDAuMDAxNDIgc2Vjb25kcyAoZmlsZXMgdG9vayAwLjEzNzkzIHNlY29uZHMgdG8gbG9hZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siMSBleGFtcGxlLCAxIGZhaWx1cmUiLHsiZmciOjF9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siRmFpbGVkIGV4YW1wbGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbInJzcGVjIC4vc3BlYy9ib3dsaW5nX3NwZWMucmI6NSIseyJmZyI6MX1dLFsiICIse31dLFsiIyBCb3dsaW5nI3Njb3JlIHdpdGggbm8gc3RyaWtlcyBvciBzcGFyZXMgc3VtcyB0aGUgcGluIGNvdW50IGZvciBlYWNoIHJvbGwiLHsiZmciOjZ9XSxbIiAgICAgICAgICAgICAgICAiLHt9XV0sW1siXHUyNzlDICIseyJib2xkIjp0cnVlLCJmZyI6MX1dLFsiICIseyJib2xkIjp0cnVlLCJmZyI6Mn1dLFsiYm93bGluZyAiLHsiYm9sZCI6dHJ1ZSwiZmciOjZ9XSxbImdpdDooIix7ImJvbGQiOnRydWUsImZnIjo0fV0sWyJtYXN0ZXIiLHsiYm9sZCI6dHJ1ZSwiZmciOjF9XSxbIikgIix7ImJvbGQiOnRydWUsImZnIjo0fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dXQ==
"/>
</div>
<p>Implement that basic behaviour...</p><div class="asciinema-video">
<asciinema-player src="/casts/14102.cast" speed="2" data-size="small" id="asciicast-14102" poster="data:application/json;base64,W1tbIiAgMSAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyJjbGFzcyIseyJmZyI6MjA4fV0sWyIgIix7ImZnIjoyNTN9XSxbIkJvd2xpbmciLHsiZmciOjE4Nn1dLFsiXHUwMEFDIix7ImZnIjo4fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV0sW1siICAyICIseyJiZyI6MjMyLCJmZyI6MTV9XSxbIiAgIix7ImZnIjoyNTN9XSxbImF0dHJfcmVhZGVyIix7ImZnIjoyMjh9XSxbIiAiLHsiZmciOjI1M31dLFsiOnNjb3JlIix7ImZnIjozMH1dLFsiXHUwMEFDIix7ImZnIjo4fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjI1M31dXSxbWyIgIDMgIix7ImJnIjoyMzIsImZnIjoxNX1dLFsiXHUwMEFDIix7ImZnIjo4fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgNCAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyIgICIseyJmZyI6MjUzfV0sWyJkZWYiLHsiZmciOjIwOH1dLFsiICIseyJmZyI6MjUzfV0sWyJpbml0aWFsaXplIix7ImZnIjoyMjB9XSxbIlx1MDBBQyIseyJmZyI6OH1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgNSAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyIgICAgIix7ImZnIjoyNTN9XSxbIkBzY29yZSIseyJmZyI6MjIwfV0sWyIgPSAiLHsiZmciOjI1M31dLFsiMCIseyJmZyI6MzB9XSxbIlx1MDBBQyIseyJmZyI6OH1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV0sW1siICA2ICIseyJiZyI6MjMyLCJmZyI6MTV9XSxbIiAgIix7ImZnIjoyNTN9XSxbImVuZCIseyJmZyI6MjA4fV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgNyAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV0sW1siICA4ICIseyJiZyI6MjMyLCJmZyI6MTV9XSxbIiAgIix7ImZnIjoyNTN9XSxbImRlZiIseyJmZyI6MjA4fV0sWyIgIix7ImZnIjoyNTN9XSxbImhpdCIseyJmZyI6MjIwfV0sWyIocGluX2NvdW50KSIseyJmZyI6MjUzfV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAgOSAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyIgICAgIix7ImZnIjoyNTN9XSxbIkBzY29yZSIseyJmZyI6MjIwfV0sWyIgKz0gcGluX2NvdW50Iix7ImZnIjoyNTN9XSxbIlx1MDBBQyIseyJmZyI6OH1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV0sW1siIDEwICIseyJiZyI6MjMyLCJmZyI6MTV9XSxbIiAgIix7ImZnIjoyNTN9XSxbImVuZCIseyJmZyI6MjA4fV0sWyJcdTAwQUMiLHsiZmciOjh9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIiAxMSAiLHsiYmciOjIzMiwiZmciOjE1fV0sWyJlbmQiLHsiZmciOjIwOH1dLFsiXHUwMEFDIix7ImZnIjo4fV0sWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6MjUzfV1dLFtbIn4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjh9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjo4fV1dLFtbIn4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjh9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjo4fV1dLFtbIn4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjh9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjo4fV1dLFtbIn4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHsiZmciOjh9XV0sW1sifiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIseyJmZyI6OH1dXSxbWyJsaWIvYm93bGluZy5yYiAgTGluZToxMC8xMVs5MCVdQ29sOjNCdWY6IzFbMTAxXVsweDY1XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImJnIjoxNSwiYm9sZCI6dHJ1ZSwiZmciOjB9XV0sW1siXCJsaWIvYm93bGluZy5yYlwiIDExTCwgMTMwQyB3cml0dGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7ImZnIjoyNTN9XV1d
"/>
</div>
<p>Run the example and bask in the joy that is green.</p><div class="asciinema-video">
<asciinema-player src="/casts/14103.cast" speed="2" data-size="small" id="asciicast-14103" poster="data:application/json;base64,W1tbIlx1Mjc5QyAiLHsiYm9sZCI6dHJ1ZSwiZmciOjF9XSxbIiAiLHsiYm9sZCI6dHJ1ZSwiZmciOjJ9XSxbImJvd2xpbmcgIix7ImJvbGQiOnRydWUsImZnIjo2fV0sWyJnaXQ6KCIseyJib2xkIjp0cnVlLCJmZyI6NH1dLFsibWFzdGVyIix7ImJvbGQiOnRydWUsImZnIjoxfV0sWyIpICIseyJib2xkIjp0cnVlLCJmZyI6NH1dLFsiYmluL3JzcGVjIC0tZm9ybWF0IGRvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIkJvd2xpbmcjc2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICB3aXRoIG5vIHN0cmlrZXMgb3Igc3BhcmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgc3VtcyB0aGUgcGluIGNvdW50IGZvciBlYWNoIHJvbGwiLHsiZmciOjJ9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJGaW5pc2hlZCBpbiAwLjAwMTM3IHNlY29uZHMgKGZpbGVzIHRvb2sgMC4xMzQyMSBzZWNvbmRzIHRvIGxvYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIjEgZXhhbXBsZSwgMCBmYWlsdXJlcyIseyJmZyI6Mn1dLFsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyJcdTI3OUMgIix7ImJvbGQiOnRydWUsImZnIjoxfV0sWyIgIix7ImJvbGQiOnRydWUsImZnIjoyfV0sWyJib3dsaW5nICIseyJib2xkIjp0cnVlLCJmZyI6Nn1dLFsiZ2l0OigiLHsiYm9sZCI6dHJ1ZSwiZmciOjR9XSxbIm1hc3RlciIseyJib2xkIjp0cnVlLCJmZyI6MX1dLFsiKSAiLHsiYm9sZCI6dHJ1ZSwiZmciOjR9XSxbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV0sW1siICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIse31dXSxbWyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix7fV1dLFtbIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHt9XV1d
"/>
</div>
<h3>Take very small steps</h3><p>Don’t rush ahead with more code. Instead, add another example and let
it guide you to what you have to do next. And don’t forget to take time
to refactor your code before it gets messy. You should keep your code
clean at every step of the way.</p></article><article class="docs"><a class="btn" href="/documentation">View Documentation</a></article><article class="book"><img alt="Effective Testing with RSpec 3" class="needs-border" src="/images/rspec3_book.jpg" /><div><h2>The Book</h2><h3>Effective Testing with RSpec 3: Build Ruby Apps with Confidence</h3><p>This definitive guide from RSpec’s lead developer shows you how to use RSpec to drive more maintainable designs, specify and document expected behavior, and prevent regressions during refactoring. Build a project using RSpec to design, describe, and test the behavior of your code-whether you’re new to testing tools or an experienced developer.</p><a target="_blank" href="https://pragprog.com/book/rspec3/effective-testing-with-rspec-3">New book now available!</a></div></article><p></p><article class="screencast"><img alt="Testing Ruby Application with RSpec Screencast" src="/images/rspec_screencast.png" /><div><h2>The Screencast</h2><p>The Testing Ruby Applications with RSpec screencast introduces the core RSpec libraries through the development of a small CLI card game. In addition to covering the technical aspects of using RSpec, it also covers best practices for using them so you get the most out of your test suite: different types of tests, what kinds of things to test, when different styles are appropriate.</p><a target="_blank" href="https://www.pluralsight.com/courses/rspec-ruby-application-testing">Check out the screencast</a></div></article></section><footer><div>Created with the assistance of Ninefold<img alt="Brutus" src="/images/brutus-half.png" /></div><br /><a href="https://dnsimple.link/resolving-rspec" target="_blank">Resolving with<br /><img alt="DNSimple" style="width:100px;" src="https://cdn.dnsimple.com/assets/resolving-with-us/logo-dark.png" /></a></footer><script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-59095215-1', 'auto');
ga('send', 'pageview');
</script>
<script>
var SeedAndDewConfig = {};
(function() {
SeedAndDewConfig['adClass'] = "snd-ad";
/* * * DON'T EDIT BELOW THIS LINE * * */
SeedAndDewConfig['projectId'] = 'ef35b4ec-231e-4950-bd93-4c06fe3b2543';
SeedAndDewConfig['loadStartTime'] = performance.now();
SeedAndDewConfig['apiVersion'] = '2018-05-28'
SeedAndDewConfig['sessionId'] = Math.random().toString(36).substring(2, 15);
var snd = document.createElement('script');
snd.type = 'text/javascript';
snd.async = true;
snd.src = 'https://www.seedanddew.com/static/embed.min.js';
(document.getElementsByTagName('head')[0] ||
document.getElementsByTagName('body')[0]).appendChild(snd);
})();
</script>
</body><script src="/javascripts/asciinema-player.js"></script></html>