From d336dfe3d79faf0b80b4b5fafee886b3568b0e13 Mon Sep 17 00:00:00 2001 From: dakkar Date: Wed, 20 Apr 2011 21:31:13 +0100 Subject: make objects one-shot --- lib/GridFiller.pm | 53 +++++------------------------------------------- lib/GridFiller/Status.pm | 12 ++--------- script/qr-color.pl | 26 ++++++++++++++++-------- 3 files changed, 25 insertions(+), 66 deletions(-) diff --git a/lib/GridFiller.pm b/lib/GridFiller.pm index 3932f0d..aef8dcb 100644 --- a/lib/GridFiller.pm +++ b/lib/GridFiller.pm @@ -2,68 +2,28 @@ package GridFiller; use Moose; use namespace::autoclean; use GridFiller::Types qw(GridT WordListT ); -use MooseX::Types::Moose qw(CodeRef); -use GridFiller::Status; -use GridFiller::Result::Text; -use GridFiller::Chooser::Smarter; use Carp; -use Class::MOP; with 'MooseX::Log::Log4perl'; -has words => ( - isa => WordListT, - required => 1, - is => 'ro', -); - -has grid => ( - isa => GridT, - required => 1, - is => 'ro', -); - has status => ( isa => 'GridFiller::Status', is => 'ro', - writer => '_status', - lazy_build => 1, + required => 1, ); -sub _build_status { - my ($self) = @_; - return GridFiller::Status->new({ - words => $self->words, - grid => $self->grid, - }); -} - has chooser => ( isa => 'GridFiller::Chooser', - is => 'rw', - lazy_build => 1, + is => 'ro', + required => 1, ); -sub _build_chooser { - my ($self) = @_; - return GridFiller::Chooser::Smarter->new({ - status => $self->status, - }); -} - has result => ( isa => 'GridFiller::Result', - is => 'rw', - lazy_build => 1, + is => 'ro', + required => 1, ); -sub _build_result { - my ($self) = @_; - return GridFiller::Result::Text->new({ - source_grid => $self->grid, - }); -} - sub fill { my ($self) = @_; @@ -71,9 +31,6 @@ sub fill { my $result=$self->result; my $chooser=$self->chooser; - $status->reset; - $result->reset; - while ($status->unfilled() && $status->has_next_word()) { my $word = $status->get_next_word(); diff --git a/lib/GridFiller/Status.pm b/lib/GridFiller/Status.pm index bccb20f..65932b8 100644 --- a/lib/GridFiller/Status.pm +++ b/lib/GridFiller/Status.pm @@ -25,13 +25,13 @@ has grid => ( has mode => ( isa => Str, - is => 'rw', + is => 'ro', default => 'given', ); has length => ( isa => CodeRef, - is => 'rw', + is => 'ro', default => sub { sub {length shift} }, ); @@ -50,7 +50,6 @@ has grid_status => ( isa => GridStatusT, is => 'ro', lazy_build => 1, - clearer => '_reset_gs', ); sub _build_words_to_use { @@ -144,11 +143,4 @@ sub to_string { } } -sub reset { - my ($self) = @_; - - $self->_reset_gs; - $self->_reset_wts; -} - 1; diff --git a/script/qr-color.pl b/script/qr-color.pl index 134c887..3490126 100644 --- a/script/qr-color.pl +++ b/script/qr-color.pl @@ -4,6 +4,8 @@ use strict; use warnings; use Text::QRCode; use GridFiller; +use GridFiller::Status; +use GridFiller::Chooser::Smarter; use GridFiller::Result::Pango; use feature 'say'; use open ':std',':locale'; @@ -51,20 +53,28 @@ my $qr=Text::QRCode->new( my $arr=$qr->plot($data); -my $filler=GridFiller->new({ - words=>\@words, - grid=> $arr, -}); - my $result = GridFiller::Result::Pango->new({ source_grid => $arr, cell_size => $size, ( $font_descr ? (font_description => $font_descr) : () ), }); -$filler->result($result); -$filler->status->mode('longest'); -$filler->status->length($result->length_closure); +my $status=GridFiller::Status->new({ + words=>\@words, + grid=> $arr, + length => $result->length_closure, + mode => 'longest', +}); + +my $chooser=GridFiller::Chooser::Smarter->new({ + status => $status, +}); + +my $filler=GridFiller->new({ + status => $status, + chooser => $chooser, + result => $result, +}); $filler->fill(); -- cgit v1.2.3