App-PrettyRes

 view release on metacpan or  search on metacpan

bin/pretty-res  view on Meta::CPAN

#!perl

our $DATE = '2016-03-10'; # DATE
our $VERSION = '0.03'; # VERSION

use 5.010001;
use strict;
use warnings;

my %Opts = (
    input  => 'json',
    output => 'text',
);
my $Input;
my @Output;

sub parse_cmdline {
    require Getopt::Long;

    my $res = Getopt::Long::GetOptions(
        'input|i=s'  => \$Opts{input},
        'output|o=s' => \$Opts{output},
        'version|v'  => sub {
            say "pretty-res version ", ($main::VERSION // '?');
            exit 0;
        },
        'help|h'     => sub {
            print <<USAGE;
Usage:
  pretty-res [OPTIONS] < INPUT
  pretty-res --version
  pretty-res --help
Examples:
  pretty-res -o yaml data.json
Options:
  --input=s, -i   Input format (json, yaml, perl; default is json).
  --output=s, -o  Output format (text, text-pretty, text-simple, yaml, json,
                  json-pretty, ruby, perl, php).
Consult manpage/documentation for more details.
USAGE
            exit 0;
        },
    );
    exit 99 if !$res;
}

sub get_input {
    require Perinci::Result::Util;

    local $/;
    if ($Opts{input} eq 'json') {
        require JSON::MaybeXS;
        $Input = JSON::MaybeXS->new->allow_nonref->decode(~~<>);
    } elsif ($Opts{input} eq 'yaml') {
        require YAML::Syck;
        $Input = YAML::Syck::Load(~~<>);
    } elsif ($Opts{input} eq 'perl') {
        $Input = eval(~~<>);
    } else {
        warn "Unknown input format, ".
            "refer to documentation for available formats\n";
        exit 99;
    }

    unless (Perinci::Result::Util::is_env_res($Input)) {
        $Input = [200, "OK (enveloped added by pretty-res)", $Input];
    }
}

sub show_output {
    require Perinci::Result::Format;
    print Perinci::Result::Format::format($Input, $Opts{output});
}

# MAIN

parse_cmdline();
get_input();
show_output();

1;
# ABSTRACT: Format enveloped result prettily
# PODNAME: pretty-res

__END__

=pod

=encoding UTF-8

=head1 NAME

pretty-res - Format enveloped result prettily

=head1 VERSION

This document describes version 0.03 of pretty-res (from Perl distribution App-PrettyRes), released on 2016-03-10.

=head1 SYNOPSIS

Usage:

 % pretty-res [OPTIONS] < INPUT

Examples:

 % echo '[200, "OK", [1..5]]' | pretty-res -i perl
 .----.
 |  1 |
 |  2 |
 |  3 |
 |  4 |
 |  5 |
 `----'

 % echo '[1..5]' | pretty-res -i perl ; # enveloped automatically added
 .----.
 |  1 |
 |  2 |
 |  3 |
 |  4 |
 |  5 |
 `----'

 % cat celine-dion-album-sales.json
 [
   200,
   "OK",
   [
     {
       "lang": "en",
       "sales": 3000000,
       "title": "unison",
       "year": 1990
     },
     {
       "lang": "en",
       "sales": 5300000,
       "title": "celine dion",
       "year": 1992
     },
     {
       "lang": "en",
       "sales": 16600000,
       "title": "the color of my love",
       "year": 1993
     },
     ...
   ]
 ]

 % pretty-res celine-dion-album-sales.json
 .--------------------------------------------------------------.
 | lang      sales   tags        title                     year |
 |                                                              |
 | en      3000000               unison                    1990 |
 | en      5300000               celine dion               1992 |
 | en     16600000               the color of my love      1993 |
 | en     30300000               falling into you          1996 |
 | en     32100000               let's talk about love     1997 |
 | en     12100000   christmas   these are special times   1998 |
 | en     10500000               a new day has come        2002 |
 | en      5100000               one heart                 2003 |



( run in 1.282 second using v1.01-cache-2.11-cpan-39bf76dae61 )