The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Opsview::REST::QueryBuilder;
{
  $Opsview::REST::QueryBuilder::VERSION = '0.004';
}

use Moose::Role;
use URI;

requires 'base';

has uri => (
    is      => 'ro',
    default => sub { URI->new; },
    handles => [qw/ as_string /],
);

has path => (
    is  => 'ro',
);

has args => (
    is  => 'ro',
    isa => 'HashRef',
);

sub BUILDARGS {
    my ($class, $path, @args) = @_;

    if (@_ == 1) {
        return {};
    } else {
        return {
            path => $path,
            args => { @args },
        };
    }
}

sub BUILD {
    my $self = shift;

    $self->uri->path($self->base . ($self->path || ''));
    $self->uri->query_form($self->args);
}

1;
__END__

=pod

=head1 NAME

Opsview::REST::QueryBuilder - Role to transform attributes into a valid method URL

=head1 SYNOPSIS

    use Moose;
    
    has base => ( default => '/downtime' );

    with 'Opsview::REST::QueryBuilder'

=head1 DESCRIPTION

This is a role to help adding functionalities to the Opsview::REST. It only
requires the consumer to have a "base", and it will generate a valid method
URL when the consumer object is instantiated.

It offers the "as_string" method, which is handled by L<URI>.

=head1 AUTHOR

=over 4

=item *

Miquel Ruiz <mruiz@cpan.org>

=back

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Miquel Ruiz.

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

=cut