CatalystX::CRUD::Model::File - filesystem CRUD model


 package MyApp::Model::Foo;
 use base qw( CatalystX::CRUD::Model::File );
    object_class    => 'MyApp::File',
    delegate_class  => 'Path::Class::File', # optional
    inc_path        => [ '/some/path', '/other/path' ],


CatalystX::CRUD::Model::File is an example implementation of CatalystX::CRUD::Model.


Only new or overridden methods are documented here.


Implements the CXC::Model API. Sets the inc_path() (if not already set) to the root config value.

new_object( file => path/to/file )

Return a new CatalystX::CRUD::Object::File object.

fetch( file => path/to/file )

Read path/to/file from disk and return a CXCO::File object.

path/to/file is assumed to be in inc_path

If path/to/file is empty, the CatalystX::CRUD::Object::File object is returned but its content() will be undef. If its parent dir is '.', its dir() will be set to the first item in inc_path().

If path/to/file is not found, undef is returned.

prep_new_object( file )

Searches inc_path() and calls file read() method if file is found.

Also verifies that the delegate() has an absolute path set.

Called internally by fetch().

Returns file.


Returns the include path from config(). The include path is searched by search(), count() and iterator().


Returns a wanted subroutine suitable for File::Find.

 # TODO regex vs exact match

search( filter_CODE )

Uses File::Find to search through inc_path() for files. filter_CODE should be a CODE ref matching format returned by make_query(). If not set, make_query() is called by default.

Returns an array ref of CXCO::File objects.

count( filter_CODE )

Returns number of files matching filter_CODE. See search for a description of filter_CODE.

iterator( filter_CODE )

Acts same as search() but returns a CatalystX::CRUD::Iterator::File object instead of a simple array ref.

iterator_related( file, rel_name )

Required method. Acts like iterator() for rel_name.

add_related( file, rel_name, other_file_name, overwrite )

For rel_name of "dir" will create a symlink for other_file_name's basename to file in the same directory as file.

If a file already exists for other_file_name in the same dir as file will throw an error indicating the relationship already exists. To stop the error being thrown, pass a true value for the overwrite param.

If the symlink fails, will throw_error().

If symlink() is not supported on your system, will print an error to the Catalyst log.

put_related( file, rel_name, other_file_name )

Calls add_related() with overwrite option.

rm_related( file, rel_name, other_file_name )

For rel_name of "dir" will create a symlink for other_file_name's basename to file in the same directory as file.

If the symlink() function is not supported, will log an error and return without doing anything.

If the symlink represented by other_file_name does not exist or is not a symlink, will throw an error.

If the unlink fails will also throw an error.


Peter Karman, <perl at>


Please report any bugs or feature requests to bug-catalystx-crud at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


You can find documentation for this module with the perldoc command.

    perldoc CatalystX::CRUD

You can also look for information at:


Copyright 2007 Peter Karman, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.