NAME

Mojolicious::Plugin::Util::Endpoint - Use template URIs in Mojolicious

SYNOPSIS

# Mojolicious
$self->plugin('Util::Endpoint');

# Mojolicious::Lite
plugin 'Util::Endpoint';

my $route = $mojo->routes->route('/:user');

# Set endpoint
$route->endpoint(
         webfinger => {
            scheme => 'https',
            host   => 'sojolicio.us',
            route  => $route,
            query  => [
              q => '{uri}'
            ]
          });

return $self->endpoint('webfinger');
# https://sojolicio.us/{user}?q={uri}

$self->stash(user => 'Akron');

return $self->endpoint('webfinger');
# https://sojolicio.us/Akron?q={uri}

return $self->endpoint('webfinger' => {
                          uri => 'acct:akron@sojolicio.us'
                       });
# https://sojolicio.us/Akron?q=acct%3Aakron%40sojolicio.us

DESCRIPTION

Mojolicious::Plugin::Util::Endpoint is a plugin that allows for the simple establishement of endpoint URIs. This is similar to the url_for method of Mojolicious::Controller, but includes support for template URIs with parameters (as used in, e.g., Host-Meta or OpenSearch).

METHODS

register

# Mojolicious
$app->plugin('Util::Endpoint');

# Mojolicious::Lite
plugin 'Util::Endpoint';

Called when registering the plugin.

SHORTCUTS

endpoint

my $route = $mojo->routes->route('/suggest');
$route->endpoint('opensearch' => {
                    scheme => 'https',
                    host   => 'sojolicio.us',
                    port   => 3000,
                    query  => [
                      q     => '{searchTerms}',
                      start => '{startIndex?}'
                    ]
                  });

Establishes an endpoint defined for a service. It accepts optional parameters scheme, host, a port and query parameters (query). Template parameters need curly brackets, optional template parameters need a question mark before the closing bracket. Optional path placeholders are currenty not supported.

HELPER

endpoint

# In Controller:
return $self->endpoint('webfinger');
return $self->endpoint('webfinger', { user => 'me' } );

Returns the endpoint defined for a specific service. It accepts additional stash values for the route. These stash values override existing stash values from the controller and fill the template variables.

# In Controller:
return $self->endpoint('opensearch');
# https://sojolicio.us/suggest?q={searchTerms}
                              &start={startIndex?}

return $self->endpoint('opensearch' => {
                          searchTerms => 'simpson',
                          '?' => undef
                       });
# https://sojolicio.us/suggest?q=simpson

The special parameter ? can be set to undef to ignore all undefined optional template parameters.

If the defined endpoint can't be found, the value for url_for is returned.

get_endpoints

# In Controller:
my $hash = $self->get_endpoints;

while (my ($key, $value) = each %$hash) {
  print $key, ' => ', $value, "\n";
};

Returns a hash of all endpoints, interpolated with the current controller stash.

COMMANDS

endpoints

perl app.pl endpoints

Show all endpoints established by this plugin.

DEPENDENCIES

Mojolicious (best with SSL support).

AVAILABILITY

https://github.com/Akron/Mojolicious-Plugin-Util-Endpoint

COPYRIGHT AND LICENSE

Copyright (C) 2011-2012, Nils Diewald.

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