X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FConfig-Any.git;a=blobdiff_plain;f=lib%2FConfig%2FAny%2FJSON.pm;h=17055f3accec940937df29b61d6b784d6b690a52;hp=faa041dc2a738cf62d7cdb12e3cd6309bbc7f1af;hb=d60679ba40498138c7dd83aa5a735e76ffdc3714;hpb=c80a0905834ed09d487b84d7a00a3e92e44bbb62 diff --git a/lib/Config/Any/JSON.pm b/lib/Config/Any/JSON.pm index faa041d..17055f3 100644 --- a/lib/Config/Any/JSON.pm +++ b/lib/Config/Any/JSON.pm @@ -1,92 +1,141 @@ -package Config::Any::JSON; - -use strict; -use warnings; - -=head1 NAME - -Config::Any::JSON - Load JSON config files - -=head1 DESCRIPTION - -Loads JSON files. Example: - - { - "name": "TestApp", - "Controller::Foo": { - "foo": "bar" - }, - "Model::Baz": { - "qux": "xyzzy" - } - } - -=head1 METHODS - -=head2 extensions( ) - -return an array of valid extensions (C, C). - -=cut - -sub extensions { - return qw( json jsn ); -} - -=head2 load( $file ) - -Attempts to load C<$file> as a JSON file. - -=cut - -sub load { - my $class = shift; - my $file = shift; - - open( my $fh, $file ) or die $!; - my $content = do { local $/; <$fh> }; - close $fh; - - eval { require JSON::Syck; }; - if( $@ ) { - require JSON; - JSON->import; - return jsonToObj( $content ); - } - else { - return JSON::Syck::Load( $content ); - } -} - -=head1 AUTHOR - -=over 4 - -=item * Brian Cassidy Ebricas@cpan.orgE - -=back - -=head1 COPYRIGHT AND LICENSE - -Copyright 2006 by Brian Cassidy - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. - -=head1 SEE ALSO - -=over 4 - -=item * L - -=item * L - -=item * L - -=item * L - -=back - -=cut - -1; \ No newline at end of file +package Config::Any::JSON; + +use strict; +use warnings; + +use base 'Config::Any::Base'; + +=head1 NAME + +Config::Any::JSON - Load JSON config files + +=head1 DESCRIPTION + +Loads JSON files. Example: + + { + "name": "TestApp", + "Controller::Foo": { + "foo": "bar" + }, + "Model::Baz": { + "qux": "xyzzy" + } + } + +=head1 METHODS + +=head2 extensions( ) + +return an array of valid extensions (C, C). + +=cut + +sub extensions { + return qw( json jsn ); +} + +=head2 load( $file ) + +Attempts to load C<$file> as a JSON file. + +=cut + +sub load { + my $class = shift; + my $file = shift; + + open( my $fh, '<', $file ) or die $!; + binmode $fh; + my $content = do { local $/; <$fh> }; + close $fh; + + if ( eval { require Cpanel::JSON::XS } ) { + my $decoder = Cpanel::JSON::XS->new->utf8->relaxed; + return $decoder->decode( $content ); + } + elsif ( eval { require JSON::MaybeXS } ) { + my $decoder = JSON::MaybeXS::JSON()->new->utf8->relaxed; + return $decoder->decode( $content ); + } + elsif ( eval { require JSON::DWIW } ) { + my $decoder = JSON::DWIW->new; + my ( $data, $error ) = $decoder->from_json( $content ); + die $error if $error; + return $data; + } + elsif ( eval { require JSON::XS } ) { + my $decoder = JSON::XS->new->utf8->relaxed; + return $decoder->decode( $content ); + } + elsif ( eval { require JSON::Syck } ) { + require Encode; + return JSON::Syck::Load( Encode::decode('UTF-8', $content ) ); + } + elsif ( eval { require JSON::PP; JSON::PP->VERSION( 2 ); } ) { + my $decoder = JSON::PP->new->utf8->relaxed; + return $decoder->decode( $content ); + } + require JSON; + if ( eval { JSON->VERSION( 2 ) } ) { + return JSON::decode_json( $content ); + } + else { + return JSON::jsonToObj( $content ); + } +} + +=head2 requires_any_of( ) + +Specifies that this modules requires one of, L, +L, L, L, L, L or +L in order to work. + +=cut + +sub requires_any_of { qw( + Cpanel::JSON::XS + JSON::MaybeXS + JSON::DWIW + JSON::XS + JSON::Syck + JSON::PP + JSON +) } + +=head1 AUTHOR + +Brian Cassidy + +=head1 COPYRIGHT AND LICENSE + +Copyright 2006-2016 by Brian Cassidy + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 SEE ALSO + +=over 4 + +=item * L + +=item * L + +=item * L + +=item * L + +=item * L + +=item * L + +=item * L + +=item * L + +=back + +=cut + +1;