NAME¶
URI::SmartURI - Subclassable and hostless URIs
VERSION¶
Version 0.031
SYNOPSIS¶
my $uri = URI::SmartURI->new(
'http://host/foo/',
{ reference => 'http://host/bar/' }
);
my $hostless = $uri->hostless; # '/foo/'
$hostless->absolute; # 'http://host/foo/'
$uri->relative; # '../foo/'
DESCRIPTION¶
This is a sort of "subclass" of URI using delegation with some extra
methods, all the methods that work for URIs will work on these objects as
well.
It's similar in spirit to URI::WithBase.
It's also completely safe to subclass for your own use.
CONSTRUCTORS¶
URI::SmartURI->new($str, [$scheme|{reference => $ref,
scheme => $scheme}])¶
Takes a uri $str and an optional scheme or hashref with a reference uri (for
computing relative/absolute URIs) and an optional scheme.
my $uri = URI::SmartURI->new('http://dev.catalyst.perl.org/');
my $uri = URI::SmartURI->new('/dev.catalyst.perl.org/new-wiki/', 'http');
my $uri = URI::SmartURI->new(
'http://search.cpan.org/~jrockway/Catalyst-Manual-5.701003/',
{ reference => 'http://search.cpan.org/' }
);
The object returned will be blessed into a scheme-specific subclass, based on
the class of the underlying $uri->obj (URI object.) For example,
URI::SmartURI::http, which derives from URI::SmartURI (or
$uri->factory_class if you're subclassing.)
URI::SmartURI->new_abs($str, $base_uri)¶
Proxy for URI->new_abs
URI::SmartURI->newlocal($filename, [$os])¶
Proxy for URI::URL->newlocal
METHODS¶
$uri->hostless¶
Returns the URI with the scheme and host parts stripped.
$uri->reference¶
Accessor for the reference URI (for relative/absolute below.)
$uri->relative¶
Returns the URI relative to the reference URI.
$uri->absolute¶
Returns the absolute URI using the reference URI as base.
stringification works, just like with URIs
and == does as well
$uri->eq($other_uri)¶
Explicit equality check to another URI, can be used as URI::SmartURI::eq($uri1,
$uri2) as well.
$uri->obj¶
Accessor for the URI object methods are delegated to.
$uri->factory_class¶
The class whose constructor was called to create the $uri object, usually
URI::SmartURI or your own subclass. This is used to call class (rather than
object) methods.
INTERNAL METHODS¶
These are used internally by SmartURI, and are not interesting for general use,
but may be useful for writing subclasses.
$uri->_opts¶
Returns a hashref of options for the $uri (reference and scheme.)
$class->_resolve_uri_class($uri_class)¶
Converts, eg., "URI::http" to "URI::SmartURI::http".
$class->_make_uri_class($uri_class)¶
Creates a new proxy class class for a URI class, with all exports and
constructor intact, and returns its name, which is made using
_resolve_uri_class (above).
$class->_inflate_uris(\@rray, $opts)¶
Inflate any URI objects in @rray into URI::SmartURI objects, all other members
pass through unharmed. $opts is a hashref of options to include in the objects
created.
$class->_deflate_uris(@rray)¶
Deflate any URI::SmartURI objects in @rray into the URI objects they are proxies
for, all other members pass through unharmed.
MAGICAL IMPORT¶
On import with the "-import_uri_mods" flag it loads all the URI .pms
into your class namespace.
This works:
use URI::SmartURI '-import_uri_mods';
use URI::SmartURI::WithBase;
use URI::SmartURI::URL;
my $url = URI::SmartURI::URL->new(...); # URI::URL proxy
Even this works:
use URI::SmartURI '-import_uri_mods';
use URI::SmartURI::Escape qw(%escapes);
It even works with a subclass of URI::SmartURI.
I only wrote this functionality so that I could run the URI test suite without
much modification, it has no real practical value.
BUGS¶
Please report any bugs or feature requests to "bug-uri-smarturi at
rt.cpan.org", or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=URI-SmartURI
<
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=URI-SmartURI>. I will be
notified, and then you'll automatically be notified of progress on your bug as
I make changes.
SUPPORT¶
You can find documentation for this module with the perldoc command.
perldoc URI::SmartURI
You can also look for information at:
- •
- RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=URI-SmartURI
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=URI-SmartURI>
- •
- AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/URI-SmartURI
<http://annocpan.org/dist/URI-SmartURI>
- •
- CPAN Ratings
http://cpanratings.perl.org/d/URI-SmartURI
<http://cpanratings.perl.org/d/URI-SmartURI>
- •
- Search CPAN
http://search.cpan.org/dist/URI-SmartURI
<http://search.cpan.org/dist/URI-SmartURI>
SEE ALSO¶
Catalyst::Plugin::SmartURI, URI, URI::WithBase
ACKNOWLEDGEMENTS¶
Thanks to folks on freenode #perl for helping me out when I was getting stuck,
Somni, revdiablo, PerlJam and others whose nicks I forget.
AUTHOR¶
Rafael Kitover, "<rkitover at cpan.org>"
COPYRIGHT & LICENSE¶
Copyright (c) 2008 Rafael Kitover
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.