summaryrefslogtreecommitdiff
path: root/lib/GridFiller.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/GridFiller.pm')
-rw-r--r--lib/GridFiller.pm57
1 files changed, 47 insertions, 10 deletions
diff --git a/lib/GridFiller.pm b/lib/GridFiller.pm
index dbe7010..c21168f 100644
--- a/lib/GridFiller.pm
+++ b/lib/GridFiller.pm
@@ -1,7 +1,8 @@
package GridFiller;
use Moose;
use namespace::autoclean;
-use GridFiller::Types qw(GridT WordListT);
+use GridFiller::Types qw(GridT WordListT ResultT GridStatusT);
+use MooseX::Types::Moose qw(CodeRef);
use GridFiller::Status;
use GridFiller::Result;
use GridFiller::Chooser::Smarter;
@@ -22,20 +23,56 @@ has grid => (
is => 'ro',
);
-sub fill {
- my ($self,$args) = @_;
+has status => (
+ isa => 'GridFiller::Status',
+ is => 'ro',
+ writer => '_status',
+ lazy_build => 1,
+);
- my $status = GridFiller::Status->new({
- grid => $self->grid,
+sub _build_status {
+ my ($self) = @_;
+ return GridFiller::Status->new({
words => $self->words,
- mode => $args->{mode}
+ grid => $self->grid,
+ });
+}
+
+has chooser => (
+ isa => 'GridFiller::Chooser',
+ is => 'rw',
+ lazy_build => 1,
+);
+
+sub _build_chooser {
+ my ($self) = @_;
+ return GridFiller::Chooser::Smarter->new({
+ status => $self->status,
});
+}
+
+has result => (
+ isa => 'GridFiller::Result',
+ is => 'rw',
+ lazy_build => 1,
+);
+
+sub _build_result {
+ my ($self) = @_;
+ return GridFiller::Result->new({
+ source_grid => $self->grid,
+ });
+}
+
+sub fill {
+ my ($self) = @_;
- my $chooser_class = 'GridFiller::Chooser::'.($args->{chooser} || 'Random');
- Class::MOP::load_class($chooser_class);
+ my $status=$self->status;
+ my $result=$self->result;
+ my $chooser=$self->chooser;
- my $result = GridFiller::Result->new({source_grid => $self->grid});
- my $chooser = $chooser_class->new({status => $status});
+ $status->reset;
+ $result->reset;
while ($status->unfilled() && $status->has_next_word()) {
my $word = $status->get_next_word();