Badger::Storages
# Storage() is a shortcut to Badger::Storages->storage() which # loads and instantiates instances of Badger::Storage subclasses use Badger::Storages 'Storage'; # the following are all equivalent my $storage = Storage('file:/path/to/directory'); my $storage = Storage( file => '/path/to/directory' ); my $storage = Storage({ type => file, path => '/path/to/directory', }); # specifying storage option (codec), the following are equivalent my $storage = Storage( file => { path => '/path/to/directory', codec => 'json', } ); my $storage = Storage({ type => file, path => '/path/to/directory', codec => 'json', }); # see Badger::Storage for further examples
This clumsily named module implements a subclass of Badger::Factory for loading and instantiating Badger::Storage object (or strictly speaking, subclasses of Badger::Storage such as Badger::Storage::Filesystem).
You can call the storage()
method as a class method to load
a storage module and instantiate an instance of it.
my $storage = Badger::Storages->storage( file => '/path/to/dir' );
You can also create a Badger::Storages
object and call the
storage() method as an object method.
Creating a Badger::Storages
object allows you to specify
your own storage modules, a custom lookup path, or any other valid
configuration options for the storage factory.
my $factory = Badger::Storages->new( storage_path => ['My::Storage', 'Badger::Storage', 'BadgerX::Storage'], storages => { mumcached => 'My::MumCache::Storage', # ask mum where it is }, };
You can now load the entirely fictional
My::MumCache::Storage
module as follows:
my $storage = $factory->storage( mumcached => { # any options for the My::Mum::Storage module } );
Or any module under the My::Storage
,
Badger::Storage
or BadgerX::Storage
namespaces:
my $storage = $factory->storage( example => { # any options for the My::Storage::Example module } );
This is the main method used to fetch a Badger::Storage object. The first argument is the storage type, corresponding to the name of a Badger::Storage subclass module.
my $storage = Badger::Storages->storage( filesystem => '/path/to/dir' );
In this example the filesystem
type is mapped to Badger::Storage::Filesystem. You can also use the shorthand form
of file
.
my $storage = Badger::Storages->storage( file => '/path/to/dir' );
You can even go one step further and specify the entire thing as a URL
my $storage = Badger::Storages->storage('file:/path/to/dir');
These are all shorthand for the following:
my $storage = Badger::Storages->storage( filesystem => { path => '/path/to/dir', } );
If you prefer you can pass a single reference to a hash array with the
storage type defined as the type
item.
my $storage = Badger::Storages->storage( { type => 'filesystem', path => '/path/to/dir', } );
Any other configuration arguments destined for the particular storage
module can be added to this hash array. For example, to create a Badger::Storage::Filesystem object that stores YAML encoded
files in /tmp/badger_data
, you can write this:
my $storage = Badger::Storages->storage( file => { path => '/path/to/dir', codec => 'yaml', } );
See the documentation for Badger::Storage for information about what you can do with the storage object returned.
Andy Wardley http://wardley.org