Initial patch from Bruno for implementing a ::Storage::Format::XML
[gitmo/MooseX-Storage.git] / lib / MooseX / Storage / Util.pm
index e13ea97..e11b33c 100644 (file)
@@ -2,8 +2,9 @@ package MooseX::Storage::Util;
 use Moose qw(confess blessed);
 
 use MooseX::Storage::Engine ();
+use utf8 ();
 
-our $VERSION   = '0.01';
+our $VERSION   = '0.18';
 our $AUTHORITY = 'cpan:STEVAN';
 
 sub peek {
@@ -30,9 +31,11 @@ sub peek {
 
 sub _inflate_json {
     my ($class, $json) = @_;
+
+    eval { require JSON::Any; JSON::Any->import };
+    confess "Could not load JSON module because : $@" if $@; 
     
-    require JSON::Any;
-    JSON::Any->import;
+    utf8::encode($json) if utf8::is_utf8($json);    
     
     my $data = eval { JSON::Any->jsonToObj($json) };
     if ($@) {
@@ -46,7 +49,8 @@ sub _inflate_yaml {
     my ($class, $yaml) = @_;
     
     require Best; 
-    Best->import([[ qw[YAML::Syck YAML] ]]);    
+    eval { Best->import([[ qw[YAML::Syck YAML] ]]) };
+    confess "Could not load YAML module because : $@" if $@; 
     
     my $inflater = Best->which('YAML::Syck')->can('Load');
     
@@ -60,6 +64,20 @@ sub _inflate_yaml {
     return $data;
 }
 
+sub _inflate_xml {
+    my ($class, $xml) = @_;
+    
+    eval { require XML::Simple; XML::Simple->import };
+    confess "Could not load XML::Simple module because : $@" if $@; 
+    
+    my $data = eval { XMLin($xml, SuppressEmpty => 1) };
+    if ($@) {
+        confess "There was an error when attempting to peek at XML: $@";
+    }
+    
+    return $data; 
+}
+
 1;
 
 __END__
@@ -137,7 +155,7 @@ Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright 2007 by Infinity Interactive, Inc.
+Copyright 2007-2008 by Infinity Interactive, Inc.
 
 L<http://www.iinteractive.com>