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 )