summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2011-04-20 21:31:13 +0100
committerdakkar <dakkar@thenautilus.net>2011-04-20 21:31:13 +0100
commitd336dfe3d79faf0b80b4b5fafee886b3568b0e13 (patch)
tree380a3b309aebfe1be18ffdffc1f6fc345d4933b3
parentcmdline opts, external data (diff)
downloadqr-builder-d336dfe3d79faf0b80b4b5fafee886b3568b0e13.tar.gz
qr-builder-d336dfe3d79faf0b80b4b5fafee886b3568b0e13.tar.bz2
qr-builder-d336dfe3d79faf0b80b4b5fafee886b3568b0e13.zip
make objects one-shot
-rw-r--r--lib/GridFiller.pm53
-rw-r--r--lib/GridFiller/Status.pm12
-rw-r--r--script/qr-color.pl26
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();