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*