made the local suffix overrideable as per robkinyon's suggestion
[catagits/Catalyst-Plugin-ConfigLoader.git] / lib / Catalyst / Plugin / ConfigLoader / JSON.pm
index 02cdced..1c100ce 100644 (file)
@@ -3,8 +3,6 @@ package Catalyst::Plugin::ConfigLoader::JSON;
 use strict;\r
 use warnings;\r
 \r
-use File::Slurp;\r
-\r
 =head1 NAME\r
 \r
 Catalyst::Plugin::ConfigLoader::JSON - Load JSON config files\r
@@ -15,13 +13,26 @@ Loads JSON files. Example:
 \r
     {\r
         "name": "TestApp",\r
-        "Controller::Config": {\r
+        "Controller::Foo": {\r
             "foo": "bar"\r
+        },\r
+        "Model::Baz": {\r
+            "qux": "xyzzy"\r
         }\r
     }\r
 \r
 =head1 METHODS\r
 \r
+=head2 extensions( )\r
+\r
+return an array of valid extensions (C<json>, C<jsn>).\r
+\r
+=cut\r
+\r
+sub extensions {\r
+    return qw( json jsn );\r
+}\r
+\r
 =head2 load( $file )\r
 \r
 Attempts to load C<$file> as a JSON file.\r
@@ -29,32 +40,21 @@ Attempts to load C<$file> as a JSON file.
 =cut\r
 \r
 sub load {\r
-       my $class    = shift;\r
-       my $confpath = shift;\r
-\r
-       my @files;\r
-    if( $confpath =~ /\.(.{3,4})$/ ) {\r
-        return unless $1 =~ /^jso?n$/;\r
-        @files = $confpath;\r
+    my $class = shift;\r
+    my $file  = shift;\r
+\r
+    open( my $fh, $file ) or die $!;\r
+    my $content = do { local $/; <$fh> };\r
+    close $fh;\r
+\r
+    eval { require JSON::Syck; };\r
+    if( $@ ) {\r
+        require JSON;\r
+        JSON->import;\r
+        return jsonToObj( $content );\r
     }\r
     else {\r
-        @files = map { "$confpath.$_" } qw( json jsn );\r
-    }\r
-    \r
-    for my $file ( @files ) {\r
-        next unless -f $file;\r
-        \r
-        my $content = read_file( $file );\r
-\r
-        eval { require JSON::Syck; };\r
-        if( $@ ) {\r
-            require JSON;\r
-            JSON->import;\r
-            return jsonToObj( $content );\r
-        }\r
-        else {\r
-            return JSON::Syck::Load( $content );\r
-        }\r
+        return JSON::Syck::Load( $content );\r
     }\r
 }\r
 \r
@@ -79,6 +79,12 @@ it under the same terms as Perl itself.
 \r
 =item * L<Catalyst>\r
 \r
+=item * L<Catalyst::Plugin::ConfigLoader>\r
+\r
+=item * L<JSON>\r
+\r
+=item * L<JSON::Syck>\r
+\r
 =back\r
 \r
 =cut\r