NAME
    Number::Stars - Class for conversion between percent number to star
    visualization.

SYNOPSIS
     use Number::Stars;

     my $obj = Number::Stars->new(%params);
     my $stars_hr = $obj->percent_stars($percent);

METHODS
  "new"
     my $obj = Number::Stars->new(%params);

    Constructor.

    *       "number_of_stars"

            Number of stars.

            Default value is 10.

    Returns instance of object.

  "percent_stars"
     my $stars_hr = $obj->percent_stars($percent);

    Get stars structure for setting of star visualisation. (e.g.: 50% →
    ★★★★★☆☆☆☆☆) Output structure is defined by number of star and its value.
    Possible values are: 'nothing', 'half' and 'full', which define type of
    star.

    Returns reference to hash.

ERRORS
     new():
             From Class::Utils::set_params():
                     Unknown parameter '%s'.
             From Mo::utils::check_number():
                     Parameter 'number_of_stars' must be a number.
                             Value: %s

EXAMPLE1
     use strict;
     use warnings;

     use Number::Stars;
     use Data::Printer;

     if (@ARGV < 1) {
            print STDERR "Usage: $0 percent\n";
            exit 1;
     }
     my $percent = $ARGV[0];

     # Object.
     my $obj = Number::Stars->new;

     # Get structure.
     my $stars_hr = $obj->percent_stars($percent);

     # Print out.
     print "Percent: $percent\n";
     print "Output structure:\n";
     p $stars_hr;

     # Output for run without arguments:
     # Usage: __SCRIPT__ percent

     # Output for value '55':
     # Percent: 55
     # Output structure:
     # \ {
     #     1    "full",
     #     2    "full",
     #     3    "full",
     #     4    "full",
     #     5    "full",
     #     6    "half",
     #     7    "nothing",
     #     8    "nothing",
     #     9    "nothing",
     #     10   "nothing"
     # }

EXAMPLE2
     use strict;
     use warnings;

     use Number::Stars;
     use Readonly;
     use Unicode::UTF8 qw(decode_utf8 encode_utf8);

     Readonly::Scalar our $FULL_STAR => decode_utf8('★');
     Readonly::Scalar our $HALF_STAR => decode_utf8('⭒');
     Readonly::Scalar our $NOTHING_STAR => decode_utf8('☆');

     if (@ARGV < 1) {
            print STDERR "Usage: $0 percent\n";
            exit 1;
     }
     my $percent = $ARGV[0];

     # Object.
     my $obj = Number::Stars->new;

     # Get structure.
     my $stars_hr = $obj->percent_stars($percent);

     my $output;
     foreach my $star_num (sort { $a <=> $b } keys %{$stars_hr}) {
           if ($stars_hr->{$star_num} eq 'full') {
                   $output .= $FULL_STAR;
           } elsif ($stars_hr->{$star_num} eq 'half') {
                   $output .= $HALF_STAR;
           } elsif ($stars_hr->{$star_num} eq 'nothing') {
                   $output .= $NOTHING_STAR;
           }
     }

     # Print out.
     print "Percent: $percent\n";
     print 'Output: '.encode_utf8($output)."\n";

     # Output for run without arguments:
     # Usage: __SCRIPT__ percent

     # Output for value '55':
     # Percent: 55
     # Output: ★★★★★⭒☆☆☆☆

EXAMPLE3
     use strict;
     use warnings;

     use Number::Stars;
     use Readonly;
     use Unicode::UTF8 qw(decode_utf8 encode_utf8);

     Readonly::Scalar our $FULL_STAR => decode_utf8('★');
     Readonly::Scalar our $HALF_STAR => decode_utf8('⭒');
     Readonly::Scalar our $NOTHING_STAR => decode_utf8('☆');

     if (@ARGV < 1) {
            print STDERR "Usage: $0 number_of_stars percent [number_of_stars]\n";
            print STDERR "\tDefault value of number_of_stars is 10.\n";
            exit 1;
     }
     my $percent = $ARGV[0];
     my $number_of_stars = $ARGV[1] || 10;

     # Object.
     my $obj = Number::Stars->new(
             'number_of_stars' => $number_of_stars,
     );

     # Get structure.
     my $stars_hr = $obj->percent_stars($percent);

     my $output;
     foreach my $star_num (sort { $a <=> $b } keys %{$stars_hr}) {
           if ($stars_hr->{$star_num} eq 'full') {
                   $output .= $FULL_STAR;
           } elsif ($stars_hr->{$star_num} eq 'half') {
                   $output .= $HALF_STAR;
           } elsif ($stars_hr->{$star_num} eq 'nothing') {
                   $output .= $NOTHING_STAR;
           }
     }

     # Print out.
     print "Percent: $percent\n";
     print 'Output: '.encode_utf8($output)."\n";

     # Output for run without arguments:
     # Usage: __SCRIPT__ percent [number_of_stars]
     #         Default value of number_of_stars is 10.

     # Output for values 55, 10:
     # Percent: 55
     # Output: ★★★★★⭒☆☆☆☆

     # Output for values 55:
     # Percent: 55
     # Output: ★★★★★⭒☆☆☆☆

     # Output for values 55, 3:
     # Percent: 55
     # Output: ★⭒☆

DEPENDENCIES
    Class::Utils, Error::Pure, Mo::utils.

SEE ALSO
    Tags::HTML::Stars
        Tags helper for stars evaluation.

REPOSITORY
    <https://github.com/michal-josef-spacek/Number-Stars>

AUTHOR
    Michal Josef Špaček <mailto:skim@cpan.org>

    <http://skim.cz>

LICENSE AND COPYRIGHT
    © Michal Josef Špaček 2020-2024

    BSD 2-Clause License

VERSION
    0.03

