summaryrefslogtreecommitdiff
path: root/lib/GridFiller/Status.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/GridFiller/Status.pm')
-rw-r--r--lib/GridFiller/Status.pm63
1 files changed, 39 insertions, 24 deletions
diff --git a/lib/GridFiller/Status.pm b/lib/GridFiller/Status.pm
index b14f870..092f9a9 100644
--- a/lib/GridFiller/Status.pm
+++ b/lib/GridFiller/Status.pm
@@ -3,13 +3,32 @@ use Moose;
use namespace::autoclean;
use List::Util qw(shuffle);
use List::MoreUtils qw(uniq);
-use GridFiller::Types qw(WordListT GridStatusT);
+use GridFiller::Types qw(WordListT GridStatusT GridT WordListT);
+use MooseX::Types::Moose qw(Str);
use GridFiller::Constants ':all';
use Carp;
use feature 'switch';
with 'MooseX::Log::Log4perl';
+has words => (
+ isa => WordListT,
+ required => 1,
+ is => 'ro',
+);
+
+has grid => (
+ isa => GridT,
+ required => 1,
+ is => 'ro',
+);
+
+has mode => (
+ isa => Str,
+ is => 'rw',
+ default => 'given',
+);
+
has words_to_use => (
isa => WordListT,
traits => ['Array'],
@@ -17,32 +36,21 @@ has words_to_use => (
has_next_word => 'count',
get_next_word => 'shift',
},
- is => 'rw',
- required => 1,
+ lazy_build => 1,
+ clearer => '_reset_wts',
);
has grid_status => (
isa => GridStatusT,
- is => 'rw',
- required => 1,
+ is => 'ro',
+ lazy_build => 1,
+ clearer => '_reset_gs',
);
-around BUILDARGS => sub {
- my ($orig, $class, $args, @rest) = @_;
-
- if (exists $args->{words} && exists $args->{grid}) {
- $args->{words_to_use} = _munge_words_to_use(delete $args->{words},$args);
- $args->{grid_status} = _munge_grid_status(delete $args->{grid});
- }
-
- return $class->$orig($args,@rest);
-};
-
-sub _munge_words_to_use {
- my ($words,$args) = @_;
- # clone initial word list
-
- my $mode = delete $args->{mode} || 'random';
+sub _build_words_to_use {
+ my ($self) = @_;
+ my $words = $self->words;
+ my $mode = $self->mode;
given ($mode) {
when ('random') { return [ shuffle uniq @$words ] }
@@ -53,8 +61,8 @@ sub _munge_words_to_use {
}
}
-sub _munge_grid_status {
- my ($grid) = @_;
+sub _build_grid_status {
+ my ($self) = @_;
return [
map {
[
@@ -62,7 +70,7 @@ sub _munge_grid_status {
$_ eq '*' ? $BLACK : $WHITE
} @$_
]
- } @$grid
+ } @{$self->grid}
];
}
@@ -129,4 +137,11 @@ sub to_string {
}
}
+sub reset {
+ my ($self) = @_;
+
+ $self->_reset_gs;
+ $self->_reset_wts;
+}
+
1;