making xmlrpc hashy
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 29 Jun 2006 21:36:17 +0000 (21:36 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 29 Jun 2006 21:36:17 +0000 (21:36 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@4855 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Utils/Fieldmapper.pm
Open-ILS/src/perlmods/OpenILS/WWW/XMLRPCGateway.pm

index 344a4d8..ccde846 100644 (file)
@@ -187,6 +187,18 @@ sub properties {
        return keys %{$$fieldmap{$class_name}{fields}};
 }
 
+sub to_bare_hash {
+       my $self = shift;
+
+       my %hash = ();
+       for my $f ($self->properties) {
+               my $val = $self->$f;
+               $hash{$f} = $val;
+       }
+
+       return \%hash;
+}
+
 sub clone {
        my $self = shift;
        return $self->new( [@$self] );
index 904c463..4679e44 100644 (file)
@@ -10,6 +10,7 @@ use Apache2::RequestRec ();
 use Apache2::RequestIO ();
 use Apache2::RequestUtil;
 use Data::Dumper;
+use UNIVERSAL::require;
 
 use XML::LibXML;
 use OpenSRF::EX qw(:try);
@@ -40,9 +41,12 @@ sub child_init {
        $__inited = 1;
        OpenSRF::System->bootstrap_client( config_file => $bs_config );
        my $sclient     = OpenSRF::Utils::SettingsClient->new();
+       my $idl = $sclient->config_value("IDL");
        $services = $sclient->config_value("xml-rpc", "allowed_services", "service");
        $services = ref $services ? $services : [ $services ];
        $logger->debug("XML-RPC: allowed services @$services");
+       OpenILS::Utils::Fieldmapper->require;
+       Fieldmapper->import(IDL => $idl);
 }
 
 
@@ -82,13 +86,17 @@ sub run_request {
        return wrap_perl($data);
 }
 
-
-
 # These should probably be moved out to a library somewhere
 
 sub wrap_perl {
    my $obj = shift;
    my $ref = ref($obj);
+
+   if ($ref =~ /^Fieldmapper/o) {
+      $ref = $obj->json_hint;
+      $obj = $obj->to_bare_hash;
+   }
+
    if( $ref eq 'HASH' ) {
       $obj->{$_} = wrap_perl( $obj->{$_} ) for (keys %$obj);
    } elsif( $ref eq 'ARRAY' ) {