NAME

Ordeal::Model::Deck - Class for representing decks of cards

SYNOPSIS

use Ordeal::Model::Deck;

my $card = Ordeal::Model::Deck->new(
   group => 'whatever',
   id => 'AAA-bb-1235',
   name => 'three of clubs',
   cards => \@cards,
);

DESCRIPTION

This class represents a deck of cards. The representation is considered ordered, see Ordeal::Model::Shuffle for a wrapper object for shuffling the cards.

"id" should be a unique identifier for the deck. "cards" is the low-level accessor to the cards, although you shoud probably stick to the higher level interface provided by "card_at" and "n_cards".

"group" can be used to group decks together, e.g. for assigning them to owners. All in all it is opaque data that you can use.

"name" is a name you can associate to the deck. Again, it's treated as opaque data, so you can abuse it.

METHODS

card_at

my $card = $deck->card_at($i);

get the card in position $i. Positions are assumed to start from 0 and arrive up to "n_cards" minus one. Invalid indexes $i trigger an exception.

cards

my @cards = $deck->cards;
$deck->cards(@cards);

accessor for the list of cards. Note that it accepts and returns a list not an array reference.

group

my $group = $deck->group;
$deck->group($group);

accessor for some c<group> metadata you might want to associate to the deck. Treated as opaque data.

id

my $id = $deck->id;
$deck->id($id);

accessor for a unique identifer associated to the deck.

name

my $name = $deck->name;
$deck->name($name);

accessor for a name associated to the deck.

n_cards

my $n = $deck->n_cards;

returns the number of cards in the deck.

BUGS AND LIMITATIONS

The code leverages some experimental Perl features like signatures and postderef; for this reason, at least perl 5.20 will be needed.

Report bugs through GitHub (patches welcome) at https://github.com/polettix/Ordeal-Model.

AUTHOR

Flavio Poletti <polettix@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2018 by Flavio Poletti <polettix@cpan.org>

This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0.

This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.