NAME
    Gentoo::Overlay - Tools for working with Gentoo Overlays

VERSION
    version 2.000000

SYNOPSIS
      my $overlay = Gentoo::Overlay->new( path => '/usr/portage' );

      my $name       = $overlay->name();
      my %categories = $overlay->categories();

      print "Overlay $name 's categories:\n";
      for( sort keys %categories ){
        printf "%30s : %s", $_, $categories{$_};
      }

      # Overlay gentoo 's categories:
      #  .....
      #  dev-lang      : /usr/portage/dev-lang
      #  .....

    There will be more features eventually, this is just a first release.

METHODS
  default_path
    Useful function to easily wrap the class-wide method with a per-object
    sugar.

        $overlay->default_path('profiles');
        ->
        ::Overlay->_default_paths->{'profiles'}->($overlay);
        ->
        $overlay->path->subdir('profiles')


        $overlay->default_path('category','foo');
        ->
        ::Overlay->_default_path('category')->( $overlay, 'foo' );
        ->
        $overlay->path->subdir('foo')

        $overlay->default_path('repo_name');
        ->
        ::Overlay->_default_path('repo_name')->( $overlay );
        ->
        $overlay->_profile_dir->file('repo_name')

    They're class wide functions, but they need individual instances to
    work.

  iterate
      $overlay->iterate( $what, sub {
          my ( $context_information ) = shift;

      } );

    The iterate method provides a handy way to do walking across the whole
    tree stopping at each of a given type.

    *   "$what = 'categories'"

          $overlay->iterate( categories => sub {
              my ( $self, $c ) = shift;
              # $c->{category_name}  # String
              # $c->{category}       # Category Object
              # $c->{num_categories} # How many categories are there to iterate
              # $c->{last_category}  # Index ID of the last category.
              # $c->{category_num}   # Index ID of the current category.
          } );

    *   "$what = 'packages'"

          $overlay->iterate( packages => sub {
              my ( $self, $c ) = shift;
              # $c->{category_name}  # String
              # $c->{category}       # Category Object
              # $c->{num_categories} # How many categories are there to iterate
              # $c->{last_category}  # Index ID of the last category.
              # $c->{category_num}   # Index ID of the current category.
              #
              # $c->{package_name}   # String
              # See ::Category for the rest of the fields provided by the package Iterator.
              # Very similar though.
          } );

    *   "$what = 'ebuilds'"

          $overlay->iterate( ebuilds => sub {
              my ( $self, $c ) = shift;
              # $c->{category_name}  # String
              # $c->{category}       # Category Object
              # $c->{num_categories} # How many categories are there to iterate
              # $c->{last_category}  # Index ID of the last category.
              # $c->{category_num}   # Index ID of the current category.
              #
              # $c->{package_name}   # String
              # See ::Category for the rest of the fields provided by the package Iterator.
              # Very similar though.
              #
              # $c->{ebuild_name}   # String
              # See ::Package for the rest of the fields provided by the ebuild Iterator.
              # Very similar though.
          } );

ATTRIBUTES
  path
    Path to repository.

        isa => File, ro, required, coerce

    "File" in Types::Path::Tiny

  name
    Repository name.

        isa => Gentoo__Overlay_RepositoryName, ro, lazy_build

    "RepositoryName"

    "_build_name"

ATTRIBUTE ACCESSORS
  category_names
    Returns a list of the names of all the categories.

        my @list = sort $overlay->category_names();

    "_categories"

  categories
    Returns a hash of "Category" objects.

        my %hash = $overlay->categories;
        print $hash{dev-perl}->pretty_name; # dev-perl/::gentoo

    "_categories"

  get_category
    Returns a Category Object for a given category name

        my $cat = $overlay->get_category('dev-perl');

    "_categories"

PRIVATE ATTRIBUTES
  _profile_dir
    Path to the profile sub-directory.

        isa => Dir, ro, lazy_build

    "Dir" in MooseX::Types::Path::Tiny

    "_build__profile_dir"

  _categories
    The auto-generating category hash backing

        isa => HashRef[ Gentoo__Overlay_Category ], ro, lazy_build

    "_build__categories"

    "_has_category"

    "category_names"

    "categories"

    "get_category"

    "Gentoo__Overlay_Category" in Gentoo::Overlay::Types

    "MooseX::Types::Moose"

PRIVATE ATTRIBUTE ACCESSORS
  _has_category
    Returns if a named category exists

        $overlay->_has_category("dev-perl");

    "_categories"

PRIVATE CLASS ATTRIBUTES
  _default_paths
    Class-wide list of path generators.

        isa => HashRef[ CodeRef ], ro, lazy_build

    "_build__default_paths"

PRIVATE METHODS
  _build_name
    Extracts the repository name out of the file '"repo_name"' in
    "$OVERLAY/profiles/repo_name"

        $overlay->_build_name

    "name"

  _build__profile_dir
    Verifies the existence of the profile directory, and returns the path to
    it.

        $overlay->_build__profile_dir

    "_profile_dir"

  _build__categories
    Generates the Category Hash-Table, either by reading the categories
    index ( new, preferred ) or by traversing the directory ( old,
    discouraged )

        $category->_build_categories;

    "_categories"

    "_build___categories_scan"

    "_build___categories_file"

  _build___categories_file
    Builds the category map using the 'categories' file found in the
    overlays profile directory.

        $overlay->_build___categories_file

  _build___categories_scan
    Builds the category map the hard way by scanning the directory and then
    skipping things that are files and/or blacklisted.

        $overlay->_build___categories_scan

  _iterate_ebuilds
      $object->_iterate_ebuilds( ignored_value => sub {  } );

    Handles dispatch call for

      $object->iterate( ebuilds => sub { } );

  _iterate_categories
      $object->_iterate_categories( ignored_value => sub {  } );

    Handles dispatch call for

      $object->iterate( categories => sub { } );

  _iterate_packages
      $object->_iterate_packages( ignored_value => sub {  } );

    Handles dispatch call for

      $object->iterate( packages => sub { } );

AUTHOR
    Kent Fredric <kentnl@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2014 by Kent Fredric <kentnl@cpan.org>.

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