Semantic Versioning
===================

Overview
--------

Allows an object to take on versioning attributes in accordance with [the
Semantic Versioning specification (2.0.0)](http://semver.org/).  The module
provides a class and a role.

Role:  does Semantic::Versioning
-------------------------
The `Semantic::Versioning` role enables any object to be versioned.  Four
properties are added: `.version`, `.major-version`, `.minor-version`, and
`.patch-version`.  

### Example use
```perl6

class Document does Semantic::Versioning { }

my $doc = Document.new;
$doc.version = '1.6.23';
say $doc.major-version; #  1
say $doc.minor-version; #  6
say $doc.patch-version; # 23

$doc.minor-version = 7;
say $doc.version; # '1.7.23';
```

Class:  has Semantic::Version
---------------------
The class version allows for multiple versioning attributes in an object.

### Example use

```perl6
class Document {
  has Semantic::Version $.described-in;
  has Semantic::Version $.planned-for;
  has Semantic::Version $.implemented-in;
}

my $doc = Document.new;
$doc.described-in.version = '1.6.23';
say $doc.described-in.major-version; #  1
say $doc.described-in.minor-version; #  6
say $doc.described-in.patch-version; # 23

$doc.planned-for.version = '2.0.0';
$doc.implemented-in.version = '2.0.0';

# Woops, made a mistake-- got implemented in the next minor version;
$doc.implemented-in.minor-version++;
say $doc.implemented-in; # '2.1.0';
```