Author: marvin
Date: Fri May 11 20:44:49 2012
New Revision: 1337369

URL: http://svn.apache.org/viewvc?rev=1337369&view=rev
Log:
Add CFCParcel_new_from_file().

Modified:
    lucy/trunk/clownfish/perl/lib/Clownfish/CFC.pm
    lucy/trunk/clownfish/perl/lib/Clownfish/CFC.xs
    lucy/trunk/clownfish/perl/t/403-parcel.t
    lucy/trunk/clownfish/src/CFCParcel.c
    lucy/trunk/clownfish/src/CFCParcel.h

Modified: lucy/trunk/clownfish/perl/lib/Clownfish/CFC.pm
URL: 
http://svn.apache.org/viewvc/lucy/trunk/clownfish/perl/lib/Clownfish/CFC.pm?rev=1337369&r1=1337368&r2=1337369&view=diff
==============================================================================
--- lucy/trunk/clownfish/perl/lib/Clownfish/CFC.pm (original)
+++ lucy/trunk/clownfish/perl/lib/Clownfish/CFC.pm Fri May 11 20:44:49 2012
@@ -357,6 +357,17 @@ BEGIN { XSLoader::load( 'Clownfish::CFC'
         return _new_from_json( $args{json} );
     }
 
+    our %new_from_file_PARAMS = (
+        path => undef,
+    );
+
+    sub new_from_file {
+        my ( $either, %args ) = @_;
+        verify_args( \%new_from_file_PARAMS, %args ) or confess $@;
+        confess "no subclassing allowed" unless $either eq __PACKAGE__;
+        return _new_from_file( $args{path} );
+    }
+
 #    $parcel = 
Clownfish::CFC::Model::Parcel->aquire($parcel_name_or_parcel_object);
 #
 # Aquire a parcel one way or another.  If the supplied argument is a

Modified: lucy/trunk/clownfish/perl/lib/Clownfish/CFC.xs
URL: 
http://svn.apache.org/viewvc/lucy/trunk/clownfish/perl/lib/Clownfish/CFC.xs?rev=1337369&r1=1337368&r2=1337369&view=diff
==============================================================================
--- lucy/trunk/clownfish/perl/lib/Clownfish/CFC.xs (original)
+++ lucy/trunk/clownfish/perl/lib/Clownfish/CFC.xs Fri May 11 20:44:49 2012
@@ -1073,6 +1073,15 @@ CODE:
 OUTPUT: RETVAL
 
 SV*
+_new_from_file(path)
+    const char *path;
+CODE:
+    CFCParcel *self = CFCParcel_new_from_file(path);
+    RETVAL = S_cfcbase_to_perlref(self);
+    CFCBase_decref((CFCBase*)self);
+OUTPUT: RETVAL
+
+SV*
 _new_from_json(json)
     const char *json;
 CODE:

Modified: lucy/trunk/clownfish/perl/t/403-parcel.t
URL: 
http://svn.apache.org/viewvc/lucy/trunk/clownfish/perl/t/403-parcel.t?rev=1337369&r1=1337368&r2=1337369&view=diff
==============================================================================
--- lucy/trunk/clownfish/perl/t/403-parcel.t (original)
+++ lucy/trunk/clownfish/perl/t/403-parcel.t Fri May 11 20:44:49 2012
@@ -16,7 +16,8 @@
 use strict;
 use warnings;
 
-use Test::More tests => 9;
+use Test::More tests => 10;
+use File::Spec::Functions qw( catfile );
 
 BEGIN { use_ok('Clownfish::CFC::Model::Parcel') }
 
@@ -34,6 +35,14 @@ isa_ok(
     "new_from_json"
 );
 
+isa_ok(
+    Clownfish::CFC::Model::Parcel->new_from_file(
+        path => catfile(qw( t cfsource Animal.cfp )),
+    ),
+    "Clownfish::CFC::Model::Parcel",
+    "new_from_file"
+);
+
 # Register singleton.
 Clownfish::CFC::Model::Parcel->singleton(
     name  => 'Crustacean',

Modified: lucy/trunk/clownfish/src/CFCParcel.c
URL: 
http://svn.apache.org/viewvc/lucy/trunk/clownfish/src/CFCParcel.c?rev=1337369&r1=1337368&r2=1337369&view=diff
==============================================================================
--- lucy/trunk/clownfish/src/CFCParcel.c (original)
+++ lucy/trunk/clownfish/src/CFCParcel.c Fri May 11 20:44:49 2012
@@ -257,6 +257,15 @@ CFCParcel_new_from_json(const char *json
     return S_new_from_json(json, "[NULL]");
 }
 
+CFCParcel*
+CFCParcel_new_from_file(const char *path) {
+    size_t len;
+    char *json = CFCUtil_slurp_text(path, &len);
+    CFCParcel *self = S_new_from_json(json, path);
+    FREEMEM(json);
+    return self;
+}
+
 void
 CFCParcel_destroy(CFCParcel *self) {
     FREEMEM(self->name);

Modified: lucy/trunk/clownfish/src/CFCParcel.h
URL: 
http://svn.apache.org/viewvc/lucy/trunk/clownfish/src/CFCParcel.h?rev=1337369&r1=1337368&r2=1337369&view=diff
==============================================================================
--- lucy/trunk/clownfish/src/CFCParcel.h (original)
+++ lucy/trunk/clownfish/src/CFCParcel.h Fri May 11 20:44:49 2012
@@ -69,6 +69,9 @@ CFCParcel*
 CFCParcel_new(const char *name, const char *cnick);
 
 CFCParcel*
+CFCParcel_new_from_file(const char *path);
+
+CFCParcel*
 CFCParcel_new_from_json(const char *json);
 
 CFCParcel*


Reply via email to