| SimpleDB-Class documentation | Contained in the SimpleDB-Class distribution. |
SimpleDB::Class::Role::Itemized - Provides utility methods to classes that need to instantiate items.
version 1.0502
my $class = $self->determine_item_class(\%attributes); my $item = $self->instantiate_item(\%attributes, $id); my $item = $self->parse_item($id, \@attributes);
This is a Moose::Role that provides utility methods for instantiating SimpleDB::Class::Items.
The following methods are available from this role.
Instantiates an item based upon it's proper classname and then calls update to populate it's attributes with data.
A hash reference of attribute data.
An optional id to instantiate the item with.
Given an attribute list we can determine if an item needs to be recast as a different class.
A hash ref of attributes.
Converts the attributes section of an item document returned from SimpleDB into a SimpleDB::Class::Item object.
The ItemName of the item to create.
An array of attributes as returned by SimpleDB::Client.
SimpleDB::Class is Copyright 2009-2010 Plain Black Corporation (http://www.plainblack.com/) and is licensed under the same terms as Perl itself.
| SimpleDB-Class documentation | Contained in the SimpleDB-Class distribution. |
package SimpleDB::Class::Role::Itemized; BEGIN { $SimpleDB::Class::Role::Itemized::VERSION = '1.0502'; } use Moose::Role; use SimpleDB::Class::Types ':all'; requires 'item_class';
#--------------------------------------------------------
sub instantiate_item { my ($self, $attributes, $id) = @_; $attributes->{simpledb} = $self->simpledb; if (defined $id && $id ne '') { $attributes->{id} = $id; } return $self->determine_item_class($attributes)->new($attributes); } #--------------------------------------------------------
sub determine_item_class { my ($self, $attributes) = @_; my $class = $self->item_class; my $castor = $class->_castor_attribute; if ($castor) { my $reclass = $attributes->{$castor}; if (ref $reclass eq 'ARRAY') { $reclass = $reclass->[0]; } if ($reclass) { return $reclass; } } return $class; } #--------------------------------------------------------
sub parse_item { my ($self, $id, $list) = @_; unless (ref $list eq 'ARRAY') { $list = [$list]; } # format the data into a reasonable structure my $attributes = {}; foreach my $attribute (@{$list}) { # get attribute name unless (exists $attribute->{Name}) { return undef; # empty result set } my $name = $attribute->{Name}; # skip handling the 'id' field next if $name eq 'id'; # get value my $value = $attribute->{Value}; if (ref $value eq 'HASH' && !(keys %{$value})) { # undef comes back as an empty hash for some reason next; # no need to store undef } # store attribute list push @{$attributes->{$name}}, $value; } # now we can determine the item's class from attributes if necessary my $item_class = $self->determine_item_class($attributes); # now we're ready to instantiate $attributes->{simpledb} = $self->simpledb; $attributes->{id} = $id; return $item_class->new($attributes); }
1;