lib/Joker/Result.pm
changeset 5 21e23104454c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/Joker/Result.pm	Sun Dec 21 18:02:02 2014 +0100
@@ -0,0 +1,64 @@
+package Joker::Result;
+use Moose;
+use MooseX::SemiAffordanceAccessor;
+
+has response => (is => 'ro', isa => 'Str');
+
+has fields => (
+    is       => 'ro',
+    isa	     => 'ArrayRef',
+    lazy     => 1,
+    init_arg => undef,
+    builder  => '_fields'
+);
+
+has status => (
+    is       => 'ro',
+    lazy     => 1,
+    init_arg => undef,
+    builder => '_status'
+);
+
+has data => (
+    is => 'ro',
+    isa => 'HashRef',
+    lazy => 1,
+    init_arg => undef,
+    builder => '_data',
+);
+
+has fields => (
+    is => 'ro',
+    isa => 'ArrayRef',
+    lazy => 1,
+    init_arg => undef,
+    default => sub { sort keys %{ $_[0]->data } },
+);
+
+has code => (
+    is => 'ro',
+    isa => 'Int',
+    lazy => 1,
+    init_arg => undef,
+    default => sub { $_[0]->data->{'status-code'} },
+);
+
+has status => (
+    is => 'ro',
+    isa => 'Str',
+    lazy => 1,
+    init_arg => undef,
+    default => sub { $_[0]->data->{'status-text'} },
+);
+
+sub _data {
+    my $self = shift;
+    my %_data;
+    my $_ = $self->response;
+    while (/^(\S+):\s*(.*)$/gm) {
+	$_data{lc $1} = $2;
+    }
+    return \%_data;
+}
+
+__PACKAGE__->meta->make_immutable;