Revision history for JSON-MaybeXS
-1.003000 - 2014-10-22
- - add :legacy tag to support legacy apps
+ - add :legacy tag to support legacy apps
+
1.002006 - 2014-10-22
- add some additional test diagnostics, to help find bad version combinations
of JSON backends
runtime => {
requires => {
'Scalar::Util' => '0',
+ 'Carp' => '0',
'JSON::PP' => '2.27202',
# we may also add a runtime prereq for Cpanel::JSON::XS, on the
# installer's machine
use strict;
use warnings FATAL => 'all';
-use Carp;
use base qw(Exporter);
-
-use YAML;
-
-
-our $VERSION = '1.003000';
+our $VERSION = '1.003_000'; # TRIAL RELEASE
+$VERSION = eval $VERSION;
sub _choose_json_module {
return 'Cpanel::JSON::XS' if $INC{'Cpanel/JSON/XS.pm'};
}
our @EXPORT = qw(encode_json decode_json JSON);
-our @EXPORT_ALL = qw/is_bool/;
+my @EXPORT_ALL = qw(is_bool);
our @EXPORT_OK = qw(is_bool to_json from_json);
-our %EXPORT_TAGS = ( all => [ @EXPORT, @EXPORT_ALL ],
- legacy => [ @EXPORT, @EXPORT_OK],
- );
-
+our %EXPORT_TAGS = ( all => [ @EXPORT, @EXPORT_ALL ],
+ legacy => [ @EXPORT, @EXPORT_OK ],
+ );
sub JSON () { our $JSON_Class }
or $_[0]->isa('JSON::PP::Boolean'));
}
-# CopyPasta from JSON.pm version 2.90
+# (mostly) CopyPasta from JSON.pm version 2.90
+use Carp ();
sub from_json ($@) {
- if ( ref($_[0]) eq 'JSON' or $_[0] eq 'JSON' ) {
+ if ( ref($_[0]) =~ /^JSON/ or $_[0] =~ /^JSON/ ) {
Carp::croak "from_json should not be called as a method.";
}
- my $json = JSON->new;
+ my $json = JSON()->new;
if (@_ == 2 and ref $_[1] eq 'HASH') {
my $opt = $_[1];
sub to_json ($@) {
if (
- ref($_[0]) eq 'JSON'
- or (@_ > 2 and $_[0] eq 'JSON')
+ ref($_[0]) =~ /^JSON/
+ or (@_ > 2 and $_[0] =~ /^JSON/)
) {
Carp::croak "to_json should not be called as a method.";
}
- my $json = JSON->new;
+ my $json = JSON()->new;
if (@_ == 2 and ref $_[1] eq 'HASH') {
my $opt = $_[1];
$json->encode($_[0]);
}
-
-
-
1;
=head1 NAME
use JSON::MaybeXS qw(JSON); # JSON constant only
-To import all available sensible (encode_json, decode_json and
-is_bool) symbols, use C<:all>:
+To import all available sensible symbols (C<encode_json>, C<decode_json>, and
+C<is_bool>), use C<:all>:
use JSON::MaybeXS ':all';
-To import all symbols including those needed by legacy apps that use JSON::PP:
+To import all symbols including those needed by legacy apps that use L<JSON::PP>:
use JSON::MaybeXS ':legacy';
-This imports to_json and from_json symbols as well as everything in
-C< :all >. NOTE: This is to support legacy code that makes extensive
-use of to_json and from_json which you are not yet in a position to
+This imports the C<to_json> and C<from_json> symbols as well as everything in
+C<:all>. NOTE: This is to support legacy code that makes extensive
+use of C<to_json> and C<from_json> which you are not yet in a position to
refactor. DO NOT use this import tag in new code, in order to avoid
the crawling horrors of getting UTF8 support subtly wrong. See the
documentation for L<JSON> for further details.
=head2 to_json, from_json
-See L< JSON > for details. These are included to support legacy code
+See L<JSON> for details. These are included to support legacy code
B<only>.
=head2 JSON
=item * Karen Etheridge <ether@cpan.org>
+=item * Kieren Diment <diment@gmail.com>
+
=back
=head1 COPYRIGHT
use Test::More;
use JSON::MaybeXS qw/:legacy/;
-
-
my $in = '[1, 2, 3, 4]';
-
my $arr = from_json($in);
my $j = to_json($arr);
is($j, '[1,2,3,4]');
is(ref($arr), 'ARRAY');
+my $json = 'JSON::MaybeXS';
+diag "using invocant: $json";
+like(
+ do { eval { $json->from_json($in) }; $@ },
+ qr/from_json should not be called as a method/,
+ 'blessed invocant detected in from_json',
+);
+
+like(
+ do { eval { $json->to_json($arr, { blah => 1 } ) }; $@ },
+ qr/to_json should not be called as a method/,
+ 'blessed invocant detected in to_json',
+);
+
done_testing;
__END__
use strict;
use Test::More;
-# Just some tests to check JSON::PP versus JSON::MaybeXS for lecacy methods.
+# some tests to check JSON::PP versus JSON::MaybeXS for legacy methods
-unless ( eval { require JSON; 1}) {
- plan skip_all => 'No JSON';
+unless ( eval { require JSON; 1 }) {
+ plan skip_all => 'No JSON';
}
use JSON::MaybeXS qw/:legacy/;
use utf8;
my @hovercraft = (
- 'My hovercraft is full of eels',
- 'Automjeti im është plot me ngjala',
- 'حَوّامتي مُمْتِلئة بِأَنْقَلَيْسون',
- ' Маё судна на паветранай падушцы поўна вуграмі',
- '我的氣墊船裝滿了鱔魚 ',
- 'Il mio hovercraft/aeroscivolante è pieno di anguille',
- 'សុទ្ធតែឣន្ចងពេញទូកហាះយើង ។',
- "Tá m'árthach foluaineach lán d'eascanna."
+ 'My hovercraft is full of eels',
+ 'Automjeti im është plot me ngjala',
+ 'حَوّامتي مُمْتِلئة بِأَنْقَلَيْسون',
+ ' Маё судна на паветранай падушцы поўна вуграмі',
+ '我的氣墊船裝滿了鱔魚 ',
+ 'Il mio hovercraft/aeroscivolante è pieno di anguille',
+ 'សុទ្ធតែឣន្ចងពេញទូកហាះយើង ។',
+ "Tá m'árthach foluaineach lán d'eascanna."
);
foreach my $h (@hovercraft) {
- $h = '["' . $h . '"]';
- my $j_perl = JSON::from_json($h);
- my $j_json = JSON::to_json($j_perl);
-
- my $h_enc = Encode::encode_utf8($h);
- my $j_perl_enc = JSON::from_json($h_enc);
- my $j_json_enc = JSON::to_json($j_perl_enc);
-
- my $jm_perl = from_json($h);
- my $jm_json = to_json($jm_perl);
-
- my $jm_perl_enc = from_json($h_enc);
- my $jm_json_enc = to_json($jm_perl_enc);
-
- is_deeply($j_perl, $jm_perl);
- is_deeply($j_perl_enc, $jm_perl_enc);
- is ($j_json, $jm_json);
- is ($j_json_enc, $jm_json_enc);
+ $h = '["' . $h . '"]';
+ my $j_perl = JSON::from_json($h);
+ my $j_json = JSON::to_json($j_perl);
+
+ my $h_enc = Encode::encode_utf8($h);
+ my $j_perl_enc = JSON::from_json($h_enc);
+ my $j_json_enc = JSON::to_json($j_perl_enc);
+
+ my $jm_perl = from_json($h);
+ my $jm_json = to_json($jm_perl);
+
+ my $jm_perl_enc = from_json($h_enc);
+ my $jm_json_enc = to_json($jm_perl_enc);
+
+ is_deeply($j_perl, $jm_perl);
+ is_deeply($j_perl_enc, $jm_perl_enc);
+ is ($j_json, $jm_json);
+ is ($j_json_enc, $jm_json_enc);
}
+
done_testing();
-#!/usr/bin/env perl
-use warnings;
use strict;
-use FindBin qw/$Bin/;
+use warnings;
+
$ENV{PERL_JSON_BACKEND} = 'JSON::PP';
-require "$Bin/json_pm_legacy.t";
+
+require 'xt/json_pm_legacy.t';
-#!/usr/bin/env perl
-use warnings;
use strict;
-use FindBin qw/$Bin/;
+use warnings;
+
$ENV{PERL_JSON_BACKEND} = 'JSON::XS';
-require "$Bin/json_pm_legacy.t";
+require 'xt/json_pm_legacy.t';