Acme-VOYAGEGROUP-ConferenceRoom

 view release on metacpan or  search on metacpan

lib/Acme/VOYAGEGROUP/ConferenceRoom.pm  view on Meta::CPAN

    },
    atlantis => {
        lines         => [3..4],
        normalization => qr/^あとらんてぃす|アトランティス$/ms,
        position      => qr{ \s(/*\|\s+\|)$ }x,
    },
    pacifis => {
        lines         => [3..5],
        normalization => qr/^ぱしふぃす|パシフィス$/ms,
        position      => qr{ \s(/*\|)$ }x,
    },
    zipang => {
        lines         => [7],
        normalization => qr/^じぱんぐ|ジパング$/ms,
        position      => qr{ ^(\|\s+\|/*)\s }x,
    },
    lemuria => {
        lines         => [7],
        normalization => qr/^れむりあ|レムリア$/ms,
        position      => qr{ \s(/*\|)$ }x,
    },
    africa => {
        lines         => [9],
        normalization => qr/^あふりか|アフリカ$/ms,
        position      => qr{ \s(/*\|\s+\|\s+\|)$ }x,
    },
    eurasia => {
        lines         => [9],
        normalization => qr/^ゆーらしあ|ユーラシア$/ms,
        position      => qr{ \s(/*\|)$ }x,
    },
    north_america => {
        lines         => [11],
        normalization => qr/^のーすあめりか|ノースアメリカ$/ms,
        position      => qr{ \s(/*\|)$ }x,
    },
    south_america => {
        lines         => [11],
        normalization => qr/^さうすあめりか|サウスアメリカ$/ms,
        position      => qr{ \s(/*\|\s+\|)$ }x,
    },
    australlia => {
        lines         => [11],
        normalization => qr/^おーすとらりあ|オーストラリア$/ms,
        position      => qr{ \s(/*\|\s+\|\s+\|\s+\|)$ }x,
    },
    antarctica => {
        lines         => [11],
        normalization => qr/^あんたーくてぃか|アンタークティカ$/ms,
        position      => qr{ \s(/*\|\s+\|\s+\|\s+\|\s+\|)$ }x,
    },
    ajito => {
        lines         => [15..16],
        normalization => qr/^あじと|アジト$/ms,
        position      => qr{ \s(/*\|)$ }x,
    },
);

my %OUTPUT_OF = (
    color        => 'Acme::VOYAGEGROUP::ConferenceRoom::Output::Color',
    json         => 'Acme::VOYAGEGROUP::ConferenceRoom::Output::JSON',
    xml          => 'Acme::VOYAGEGROUP::ConferenceRoom::Output::XML',
    message_pack => 'Acme::VOYAGEGROUP::ConferenceRoom::Output::MessagePack',
);

sub conference_room {
    my $room_name = shift or croak "Conference Room Not Found";
    my $output_type = shift || 'color';

    $room_name = _normalize($room_name);
    my $process = $PROCESS_OF{$room_name};
    croak "Conference Room Not Found: $room_name" unless $process;

    croak "Mistake Position: $process->{position}" if $process->{position} !~ m/\s(\^?).+?(\$?)\s/xms;
    my @lines = split "\n", FLOOR_PLAN;
    my($head, $tail) = ($1) ? ('', '/') : ('/', '');
    for my $i (@{ $process->{lines} }) {
        1 while $lines[$i] =~ s{$process->{position}}{$head$1$tail};
    }

    if ($output_type ne 'none') {
        my $module = $OUTPUT_OF{$output_type};
        croak "No Type: $output_type" unless $module;

        return $module->convert(\@lines) if $module->use;
    }

    join "\n", @lines;
}

sub _normalize {
    my $room_name = shift;

    for my $normalized_room_name (keys %PROCESS_OF) {
        return $normalized_room_name
            if $room_name =~ $PROCESS_OF{$normalized_room_name}->{normalization};
    }

    lc($room_name);
}

1;
__END__

=encoding utf-8

=head1 NAME

Acme::VOYAGEGROUP::ConferenceRoom - It's new $module

=head1 SYNOPSIS

    use Acme::VOYAGEGROUP::ConferenceRoom;

=head1 DESCRIPTION

Acme::VOYAGEGROUP::ConferenceRoom is ...

=head1 LICENSE

Copyright (C) monmon.



( run in 0.882 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )