StorageDisplay

 view release on metacpan or  search on metacpan

lib/StorageDisplay/Collect.pm  view on Meta::CPAN

    $p =~ s,::,/,g;
    chomp(my $cwd = `pwd`);
    $INC{$p.'.pm'} = $cwd.'/'.__FILE__;#k"current file";
}

# This package contains
# - two public subroutines
#   - `use_pp_parser` to know if JSON:PP makes all the work alone
#   - `decode_json` to decode a json text with the $json_parser object
# - a public `new` class method that returns
#   - a plain JSON::PP object (if boolean_values method exists)
#   - a __PACKAGE__ object (if not) that inherit from JSON::PP
# - an overrided `decode` method that
#   - calls SUPER::decode
#   - manually transforms JSON:::PP::Boolean into plain scalar
# $json_parser is
# - either a JSON::PP object (if boolean_values method exists)
# - or a StorageDisplay::Collect::JSON that inherit of JSON::PP
#   but override the decode method

use base 'JSON::PP';

my $has_boolean_values;

sub new {
    my $class = shift;
    my $json_pp_parser;
    if (!defined($has_boolean_values)) {
	$json_pp_parser = JSON::PP->new;
	$has_boolean_values = 0;
	eval {
	    # workaround if not supported
	    $json_pp_parser->boolean_values(0, 1);
	    $has_boolean_values = 1;
	};
    }
    my $parser;
    if ($has_boolean_values) {
	$parser = JSON::PP->new(@_);
	$parser->boolean_values(0, 1);
    } else {
	$parser = JSON::PP::new(__PACKAGE__, @_);
    }
    eval {
	# ignore if not supported
	$parser->allow_bignum;
    };
    return $parser;
}

lib/StorageDisplay/Collect.pm  view on Meta::CPAN

my $json_parser;

sub decode_json {
    if (not defined($json_parser)) {
	$json_parser = __PACKAGE__->new();
    }

    $json_parser->decode(@_);
}

sub pp_parser_has_boolean_values {
    return $has_boolean_values;
}

sub jsonarray2perlhash {
    my $json = shift;
    my $root = shift;
    my $key = shift;
    my $info = {
        map { $_->{$key} => $_ }
	(@{decode_json($json)->{$root}})
    };

t/07_json.t  view on Meta::CPAN

	'mountpoints' => [
	    undef
	],
	'mounts' => [],
	'ro' => 0,
	'rw' => 1,
	'size' => '200G'
};

# JSON support from JSON::PP instead of JSON::MaybeXS
# - boolean_values method required
# - module included in basic perl modules
use JSON::PP;
# This load StorageDisplay::Collect::JSON;

my $jsonparser = JSON::PP->new;
my $boolean_support = 0;
eval {
    $jsonparser->boolean_values(0, 1);
    $boolean_support = 1;
};
diag("JSON::PP: boolean_values support: ".$boolean_support);
my $bignum_support = 0;
eval {
    $jsonparser->allow_bignum;
    $bignum_support = 1;
};
diag("JSON::PP: allow_bignum support: ".$bignum_support);

use StorageDisplay::Collect;
my $has_boolean_values = StorageDisplay::Collect::JSON::pp_parser_has_boolean_values();
is(defined($has_boolean_values), !1,
    "StorageDisplay::Collect::JSON initialization is delayed");
my $data_structure = StorageDisplay::Collect::JSON::decode_json($json_text);
$has_boolean_values = StorageDisplay::Collect::JSON::pp_parser_has_boolean_values();
is(defined($has_boolean_values), !0,
    "StorageDisplay::Collect::JSON is initialized");
diag("JSON::PP has boolean_values: ".$has_boolean_values);

my $parser = StorageDisplay::Collect::JSON->new();
ok(Scalar::Util::blessed $parser && $parser->isa("JSON::PP"), "StorageDisplay::Collect::JSON inherits JSON::PP");
if ($boolean_support) {
    is($parser->isa("StorageDisplay::Collect::JSON"), !1, "Directly uses JSON::PP::decode");
} else {
    ok($parser->isa("StorageDisplay::Collect::JSON"), "Wrapper around JSON::PP::decode");
}

is(



( run in 0.338 second using v1.01-cache-2.11-cpan-9ff20fc0ed8 )