NAME

WWW::Kickstarter::Data::Categories - Kickstarter categories

SYNOPSIS

use WWW::Kickstarter;

my $email    = '...';  # Your Kickstarter login credentials
my $password = '...';

my $ks = WWW::Kickstarter->new();
$ks->login($email, $password);

my $categories = $ks->categories();

$categories->visit(sub{
   my ($category, $depth, $visit_next) = @_;
   say "   " x $depth, $category->name;
   1 while $visit_next->();
});

ACCESSORS

my @categories = $categories->categories;

Returns a WWW::Kickstarter::Data::Category object for each Kickstarter category.

my @categories = $categories->top_level_categories;

Returns a WWW::Kickstarter::Data::Category object for each top-level Kickstarter category.

API CALLS

refetch

$categories = $categories->refetch();

Refetches the categories from Kickstarter.

METHODS

visit

sub visitor {
   my ($category, $depth, $visit_next, $num_subcategories, @args) = @_;
   ...
}

$categories->visit(\&visitor, @args);

$categories->visit({ visitor => \&visitor, %opts }, @args);

Traverses the category hiearchy in a depth-first, alphabetical manner.

The visitor is called with the following arguments:

  • $category

    A category as an WWW::Kickstarter::Data::Category object.

  • $depth

    The depth of the category in the hierarchy, zero for top-level categories.

  • $visit_next

    A code reference that visits one subcategory each time it's called. Unless you want to avoid visiting a category's subcategories, it should be called until it returns false.

  • $num_subcategories

    The number of subcategories this category has. The following are basically equivalent:

    • 1 while $visit_next->(); =item * $visit_next->() for 1..$num_subcategories;

  • @args

    The values passed to visit or &$visit_next.

Options:

  • root => 1

    The visitor will be called one extra time for the root of the tree. $category will be undefined in the visitor for this call. The root will have a depth of zero, so the top-level categories will have a depth of one.

Examples

  • Simple Example

    $categories->visit(sub{
       my ($category, $depth, $visit_next) = @_;
       say "   " x $depth, $category->name;
       1 while $visit_next->();
    });

    Output:

    Art
       Crafts
       Digital Art
       ...
       Sculpture
    Comics
    Dance
    Design
       Graphic Design
       Product Design
    ...
  • Passing data down to subcategories.

    $categories->visit(sub{
       my ($category, $depth, $visit_next, undef, $parent) = @_;
       say $parent . $category->name;
       1 while $visit_next->($parent . $category->name . '/');
    }, '');

    Output:

    Art
    Art/Crafts
    Art/Digital Art
    ...
    Art/Sculpture
    Comics
    Dance
    Design
    Design/Graphic Design
    Design/Product Design
    ...
  • Complex example

    $categories->visit({
       root    => 1,
       visitor => sub{
          my ($category, $depth, $visit_next, $num_subcategories, $subcategory_idx) = @_;
    
          if ($category) {
             my $class = $subcategory_idx % 2 ? 'odd' : 'even';
             print qq{<li class="$class">} . $category->name;
          }
    
          if ($num_subcategories) {
             say "<ul>";
             for my $subcategory_idx (1..$num_subcategories) {
                $visit_next->($subcategory_idx);
             }
             say "</ul>";
          }
    
          if ($category) {
             say "</li>"
          }
       },
    });

    Output:

    <ul>
    <li class="odd">Art<ul>
    <li class="odd">Crafts</li>
    <li class="even">Digital Art</li>
    ...
    <li class="even">Sculpture</li>
    </ul>
    </li>
    <li class="even">Comics</li>
    <li class="odd">Dance</li>
    <li class="even">Design<ul>
    <li class="odd">Graphic Design</li>
    <li class="even">Product Design</li>
    </ul>
    </li>
    ...
    </ul>

VERSION, BUGS, KNOWN ISSUES, SUPPORT, AUTHORS, COPYRIGHT & LICENSE

See WWW::Kickstarter