Weather::YR::Base - Base class for all YR service classes.


Weather-YR documentation Contained in the Weather-YR distribution.

Index


Code Index:

NAME

Top

Weather::YR::Base - Base class for all YR service classes.

DESCRIPTION

Top

This module contains helper functions for all other YR service classes.

CONFIGURATION

Top

This base class contains no default configuration. To set default configuration parameters in your sub class, configure a %CONFIG variable in your class.

METHODS

Top

new(\%args)

Constructor. Takes parameters as a HASHREF that will be merged with the default configuration in %CONFIG.

config(%args)

Sets default package configuration values.

fetch

This method will try to fetch the content of the web service.

get_ua

Creates and returns an user agent instance which can be used to fetch data from the YR web services.

get_url

This method should be overridden by a subclass. By default it will return the value of $self->{url}.

merge_config

Method for overriding values in the object with values from a HASHREF.

SEE ALSO

Top

Weather::YR

AUTHOR

Top

Knut-Olav, <knut-olav@hoven.ws>

COPYRIGHT AND LICENSE

Top


Weather-YR documentation Contained in the Weather-YR distribution.
package Weather::YR::Base;

use strict;
use warnings;

use Error qw/:try/;
use LWP::UserAgent;

use Weather::YR;

my %CONFIG = ();


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

    my $config  = $CONFIG{$class} || {};
    my %config  = %$config;
    my $self    = bless \%config, $class;

    $self->merge_config($args);

    return $self;
}

sub config {
    my ($self, %args) = @_;

    if (ref $self) {
        $self->merge_config(\%args);
    }
    else {
        my $class = $self;
        $CONFIG{$class} ||= {};
        while (my ($key, $value) = each %args) {
            $CONFIG{$class}{$key} = $value;
        }
    }
}

sub fetch {
    my ( $self, $url ) = @_;

    my $ua          = $self->get_ua();
    my $response    = $ua->get($url);

    return $response->content
        if $response->is_success;

    Error::Simple->throw("Unable to fetch content at url $url"); 
}

sub get_ua {
    my $ua = LWP::UserAgent->new();
    $ua->timeout(15);
    $ua->env_proxy;

    my $version = $Weather::YR::VERSION;
    $ua->agent(sprintf('Perl YR/%s ', $version));


    return $ua;
}

sub get_url {
    my ( $self ) = @_;
    return $self->{'url'};
}


sub merge_config {
    my ( $self, $args ) = @_;

    return unless $args;
    @$self{keys %$args} = values %$args;
}

1;