NAME¶
Metabase::Resource - factory class for Metabase resource descriptors
VERSION¶
version 0.022
SYNOPSIS¶
my $resource = Metabase::Resource->new(
'cpan:///distfile/RJBS/Metabase-Fact-0.001.tar.gz',
);
my $resource_meta = $resource->metadata;
my $typemap = $resource->metadata_types;
DESCRIPTION¶
Metabase is a framework for associating metadata with arbitrary resources. A
Metabase can be used to store test reports, reviews, coverage analysis
reports, reports on static analysis of coding style, or anything else for
which Metabase::Fact types are constructed.
Resources in Metabase are URI's that consist of a scheme and scheme specific
information. For example, a standard URI framework for a CPAN distribution is
defined by the URI::cpan class.
cpan:///distfile/RJBS/URI-cpan-1.000.tar.gz
Metabase::Resource is a factory class for resource descriptors. It provide a
common interface to extract scheme-specific indexing metadata from a
scheme-specific resource subclass.
For example, the Metabase::Resource::cpan class will deconstruct the example
above this into a Metabase resource metadata structure with the following
elements:
type => Metabase-Resource-cpan-distfile
dist_file => RJBS/URI-cpan-1.000.tar.gz
cpan_id => RJBS
dist_name => URI-cpan
dist_version => 1.000
Only the "type" field is mandatory for all resources. The other fields
are all specific to Metabase::Resource::cpan.
COMMON METHODS¶
new¶
my $resource = Metabase::Resource->new(
'cpan:///distfile/RJBS/Metabase-Fact-0.001.tar.gz',
);
Takes a single resource string argument and constructs a new Resource object
from a resource subtype determined by the URI scheme. Throws an error if the
required resource subclass is not available.
resource¶
Returns the string used to initialize the resource object.
scheme¶
Returns a string containing the scheme.
_cache (private)¶
Returns a hash reference for subclasses to use to store data derived from the
"content" string.
OVERLOADING¶
Resources have stringification overloaded to call "content". Equality
(==) and inequality (!=) are overloaded to perform string comparison instead.
SUBCLASSING AND SUBCLASS METHODS¶
Metabase::Resource relies on subclasses to implement scheme-specific parsing of
the URI into relevant index metadata.
Subclasses SHOULD NOT implement a "new" constructor, as the
Metabase::Resource constructor will load the subclass, construct the object,
bless the object into the subclass, and and then call "validate" on
the object. Subclasses MAY store structured data derived from the content
string during validation.
Subclasses SHOULD use the "content" method to access the resource
string and the "scheme" method to access the scheme. Subclasses MAY
use the "_cache" accessor to store derived metadata data. Subclasses
MUST provide a "metadata_types" method to return data types for all
elements stored in "_cache".
All subclasses MUST implement the "validate", "metadata" and
"metadata_types" methods, as described below.
All methods MUST throw an exception if an error occurs.
validate¶
$resource->validate
This method is called by the constructor. It SHOULD return true if the resource
string is valid according to scheme-specific rules. It MUST die if the
resource string is invalid.
$meta = $resource->metadata;
This method MUST return a hash reference with resource-specific indexing
metadata for the Resource. The key MUST be the name of the field for indexing.
The "scheme" key MUST be present and the "scheme" value
MUST be identical to the string from the "scheme" accessor. Other
keys SHOULD provide dimensions to differentiate one resource from another in
the context of "scheme". If a scheme has subcategories, the key
"type" SHOULD be used for the subcategory. Values MUST be simple
scalars, not references.
Here is a hypothetical example of a "metadata" function for a metabase
user resource like 'metabase:user:ec2726a4-070c-11df-a2e0-0018f34ec37c':
sub metadata {
my $self = shift;
my ($uuid) = $self =~ m{\Ametabase:user:(.+)\z};
return {
scheme => 'metabase',
type => 'user',
user => $uuid,
}
}
Field names should be valid perl identifiers, consisting of alphanumeric
characters or underscores. Hyphens and periods are allowed, but are not
recommended.
my $typemap = $resource->metadata_types;
This method is used to identify the datatypes of keys in the data structure
provided by "metadata". It MUST return a hash reference. It SHOULD
contain a key for every key that could appear in the data structure generated
by "metadata" and provide a value corresponding to a datatype for
each key. It MAY contain keys that do not always appear in the result of
"metadata".
Data types are loosely based on Data::RX. Type SHOULD be one of the following:
'//str' -- indicates a value that should be compared stringwise
'//num' -- indicates a value that should be compared numerically
Here is a hypothetical example of a "metadata_types" function for a
metabase user resource like
'metabase:user:ec2726a4-070c-11df-a2e0-0018f34ec37c':
sub metadata_types {
return {
scheme => '//str',
type => '//str',
user => '//str',
}
}
Consumers of "metadata_types" SHOULD assume that any
"metadata" key not found in the result of "metadata_types"
is a '//str' resource.
BUGS¶
Please report any bugs or feature using the CPAN Request Tracker. Bugs can be
submitted through the web interface at
<
http://rt.cpan.org/Dist/Display.html?Queue=Metabase-Fact>
When submitting a bug or request, please include a test-file or a patch to an
existing test-file that illustrates the bug or desired feature.
AUTHORS¶
- •
- David Golden <dagolden@cpan.org>
- •
- Ricardo Signes <rjbs@cpan.org>
- •
- H.Merijn Brand <hmbrand@cpan.org>
COPYRIGHT AND LICENSE¶
This software is Copyright (c) 2013 by David Golden.
This is free software, licensed under:
The Apache License, Version 2.0, January 2004