Gungho::Provider::File::Simple - Provide Requests From A Simple File


Gungho documentation Contained in the Gungho distribution.

Index


Code Index:

NAME

Top

Gungho::Provider::File::Simple - Provide Requests From A Simple File

SYNOPSIS

Top

  provider:
    module: File::Simple
    config:
      filename: /path/to/filename

  # in file
  http://foo.com
  http://bar.com
  http://baz.com

DESCRIPTION

Top

This module allows you to put a list of URLs in a plain text file. Gungho will pick each line up and fetch the URL. You can embed comments via #

METHODS

Top

new

Creates a new instance.

pushback_request

dispatch


Gungho documentation Contained in the Gungho distribution.

# $Id: /mirror/gungho/lib/Gungho/Provider/File/Simple.pm 1688 2007-04-17T01:48:44.796031Z lestrrat  $
#
# Copyright (c) 2007 Daisuke Maki <daisuke@endeworks.jp>
# All rights reserved.

package Gungho::Provider::File::Simple;
use strict;
use warnings;
use base qw(Gungho::Provider);

__PACKAGE__->mk_accessors($_) for qw(read_done requests);

sub new
{
    my $class = shift;
    my $self = $class->next::method(@_);

    $self->has_requests(1);
    $self->read_done(0);
    $self->requests([]);
    $self;
}

sub pushback_request
{
    my ($self, $c, $req) = @_;

    my $list = $self->requests;
    push @$list, $req;
    $self->has_requests(1);
}

sub dispatch
{
    my ($self, $c) = @_;

    if (! $self->read_done) {
        my $filename = $self->config->{filename};
        die "No file specified" unless $filename;
        open(my $fh, $filename) or
            die "Could not open $filename for reading: $!";

        while (<$fh>) {
            chomp;
            s/\s*#.*$//;
            next unless /\S+/;

            my $req = $c->prepare_request(Gungho::Request->new(GET => $_));
            $self->pushback_request($c, $req);
        }
        close($fh);
        $self->read_done(1)
    }

    my $requests = $self->requests;
    $self->requests([]);
    while (@$requests) {
        $self->dispatch_request($c, shift @$requests);
    }

    if (scalar @{ $self->requests } <= 0) {
        $c->is_running(0);
    }
}

1;

__END__