Attribute-Contract

 view release on metacpan or  search on metacpan

META.json  view on Meta::CPAN

         "requires" : {
            "Carp" : "0",
            "Exporter" : "0",
            "Scalar::Util" : "0",
            "Type::Tiny" : "0.006",
            "perl" : "5.012"
         }
      },
      "test" : {
         "requires" : {
            "Test::Fatal" : "0",
            "Test::More" : "0"
         }
      }
   },
   "provides" : {
      "Attribute::Contract" : {
         "file" : "lib/Attribute/Contract.pm",
         "version" : "0.05"
      },
      "Attribute::Contract::Modifier::Ensures" : {

META.yml  view on Meta::CPAN

---
abstract: 'Design by contract via Perl attributes'
author:
  - 'Viacheslav Tykhanovskyi, C<vti@cpan.org>.'
build_requires:
  Test::Fatal: 0
  Test::More: 0
configure_requires:
  CPAN::Meta: 0
  CPAN::Meta::Prereqs: 0
  Module::Build: 0.38
dynamic_config: 0
generated_by: 'Minilla/v0.7.5, CPAN::Meta::Converter version 2.130880'
license: unknown
meta-spec:
  url: http://module-build.sourceforge.net/META-spec-v1.4.html

cpanfile  view on Meta::CPAN

requires 'Carp'         => '0';
requires 'Scalar::Util' => '0';
requires 'Exporter'     => '0';

requires 'Type::Tiny' => '0.006';

on 'test' => sub {
    requires 'Test::More'  => '0';
    requires 'Test::Fatal' => '0';
};

t/aliases.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use Test::Fatal;

package MyClass;

use Attribute::Contract
  -types => [qw/ClassName Str/],
  -names => {requires => 'In', ensures => 'Out'};

sub method : In(ClassName, Str) Out(Str) {
    {}
}

t/ensures.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use Test::Fatal;

package MyClass;

use Attribute::Contract -types => [qw/Str/];

sub method : ContractEnsures(Str) {
    'ok';
}

package MyClassInvalid;

t/inheritance.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use Test::Fatal;

package MyClass;

use Attribute::Contract -types => [qw/ClassName Str/];

sub method : ContractRequires(ClassName, Str) {
}

package MyChildClass;
use base 'MyClass';

t/requires.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use Test::Fatal;

package MyClass;

use Attribute::Contract -types => [qw/ClassName Int Str slurpy HashRef Dict/];

sub new : ContractRequires(ClassName, slurpy Dict[foo => Int]) {
}

sub method : ContractRequires(ClassName, Str) {
}



( run in 1.647 second using v1.01-cache-2.11-cpan-54e63673c56 )