NAME
    Sub::Rate - Rate based sub dispatcher generator

SYNOPSIS
        my $rate = Sub::Rate->new( max_rate => 100 );
        $rate->add( 10 => sub { ... } );     # sub1
        $rate->add( 20 => sub { ... } );     # sub2
        $rate->add( default => sub { ... }); # default sub
    
        my $func = $rate->generate;

        # Calling this $func then:
        # sub1 will be called by rate about 10/100 (10%),
        # sub2 will be called by rate about 20/100 (20%),
        # default sub will be called in rest case (70%),
        $func->();

DESCRIPTION
    Sub::Rate generates a SUB that will dispatch some SUBs by specified
    rate.

CLASS METHODS
  new(%options)
        my $obj = Sub::Rate->new;

    Create Sub::Rate object.

    Available options are:

    *   max_rate => 'Number'

        Max rate. (Default: 100)

    *   rand_func => 'CodeRef'

        Random calculate function. Default is:

            sub {
                CORE::rand($_[0]);
            };

        You can change random function to your own implementation by this
        option. "max_rate" is passed as $_[0] to this function.

  METHODS
  add($rate : Number|Str, $sub :CodeRef)
        $obj->add( 10, sub { ... } );
        $obj->add( 20, sub { ... } );
        $obj->add( 'default', sub { ... } );

    Add $sub to internal sublist rate by $rate.

    If $rate is not number but "default", then $sub is registered as default
    sub. If default sub is already registered, it will be replaced.

  generate()
        my $sub = $obj->generate;

    Create a new sub that dispatch functions by its rates.

  clear()
        $obj->clear;

    Clear all registered functions and default function.

AUTHOR
    Daisuke Murase <typester@cpan.org>

COPYRIGHT AND LICENSE
    Copyright (c) 2012 KAYAC Inc. All rights reserved.

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

    The full text of the license can be found in the LICENSE file included
    with this module.