# NAME

Net::Amazon::DynamoDB::Table - Higher level interface to Net::Amazon::DyamoDB::Lite

# SYNOPSIS

   use Net::Amazon::DynamoDB::Table;

   my $table = Net::Amazon::DynamoDB::Table->new(
       region      => 'us-east-1',  # required
       table       => $table,       # required
       hash_key    => 'planet',     # required
       range_key   => 'species',    # required if table has a range key
       access_key  => ...,          # default: $ENV{AWS_ACCESS_KEY};
       secret_key  => ...,          # default: $ENV{AWS_SECRET_KEY};
   );

   # create or update an item
   $table->put(Item => { planet => 'Mars', ... });

   # get the item with the specified primary key; returns a hashref
   my $item = $table->get(planet => 'Mars');

   # delete the item with the specified primary key
   $table->delete(planet => 'Mars');

   # scan the table for items; returns an arrayref of items
   my $items_arrayref = $table->scan();

   # scan the table for items; returns items as a hash of key value pairs
   my $items_hashref = $table->scan_as_hashref();

# DESCRIPTION

A Net::Amazon::DynamoDB::Table object represents a single table in DynamoDB.
This module provides a simple UI layer on top of Net::Amazon::DynamoDB::Lite.

There are two features which make this class "simpler" than
Net::Amazon::DynamoDB::Lite.

The first is that you don't need to specify the TableName in every call.

The second is that you don't need to worry about types.

# METHODS

## new()

Returns a Net::Amazon::DynamoDB::Table object.  Accepts the following
attributes:

       region      => 'us-east-1',  # required
       table       => $table,       # required
       hash_key    => $hash_key,    # required
       range_key   => $range_key,   # required if table has a range key
       access_key  => ...,          # default: $ENV{AWS_ACCESS_KEY};
       secret_key  => ...,          # default: $ENV{AWS_SECRET_KEY};


## put()

Creates a new item, or replaces an old item with a new item.  This method
accepts the same parameters as those accepted by the AWS DynamoDB put\_item api
endpoint.  Note however, that you don't need to specify any types.  This module
does that for you.  For example:

   $dynamodb->put((
       Item => {
           a => 1,                  # a Number
           b => "boop",             # a String
           c => [ "hi mom", 23.5 ], # a List composed of a String and Number
           d => {                   # a Map
               chipmunks       => [qw/alvin theodore/], # a List of Strings
               backstreet_boys => [qw/Nick Kevin/],     # a List of Strings
               thing           => 23,                   # a Number
           },
       },
   );

## get()

Returns a hashref representing the item specified by the given primary key.
You can specify the primary key using the HashKey and RangeKey parameters
provided for convenience by this module:

   my $item = $dynamodb->get(
       planet  => 'Mars',
       species => 'green aliens',
   );

Or you can explicitly specify the primary key and types using the Key parameter
like this:

   my $item = $dynamodb->get(
       Key => [
           { planet  => { S => 'Mars'         } },
           { species => { N => 'green aliens' } },
       ],
   );

This method also accepts the same parameters as those accepted by the
AWS DynamoDB get\_item api endpoint.  For example:

   my $item = $dynamodb->get(
       planet         => 'Mars',
       species        => 'green aliens',
       ConsistentRead => 1,
   );

## delete()

Deletes a single item from a table using the given primary key.  You can
specify the primary key using the HashKey and RangeKey parameters provided for
convenience by this module:

   my $item = $dynamodb->delete(
       planet  => 'Mars',
       species => 'green aliens',
   );

Or you can explicitly specify the primary key and types using the Key parameter
like this:

   my $item = $dynamodb->get(
       Key => [
           { planet  => { S => 'Mars'         } },
           { species => { N => 'green aliens' } },
       ],
   );

This method also accepts the same parameters as those accepted by the
AWS DynamoDB get\_item api endpoint.  For example:

   my $item = $dynamodb->get(
       planet                    => 'Mars',
       species                   => 'green aliens',
       ConditionExpression       => "planet := :p",
       ExpressionAttributeValues => { ':p' => { S => 'Mars' } },
   );

## scan()

This method accepts the same parameters as those accepted by the
AWS DynamoDB scan api endpoint.  It returns an arrayref of item hashrefs.

## scan\_as\_hashref()

This method accepts the same parameters as those accepted by the
AWS DynamoDB scan api endpoint.  It returns the results as a hashref that looks
like this:

   # { $hash_key_value1 => $item1,
   #   $hash_key_value2 => $item2,
   #   ...,
   # }

# ACKNOWLEDGEMENTS

Thanks to [DuckDuckGo](http://duckduckgo.com) for making this module possible.

# LICENSE

Copyright (C) Eric Johnson.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# AUTHOR

Eric Johnson <[email protected]>