Babble::Document - Babble document container class


Babble documentation Contained in the Babble distribution.

Index


Code Index:

NAME

Top

Babble::Document - Babble document container class

DESCRIPTION

Top

A Babble::Document object represents one entry in the whole collection a Babble is working with.

PROPERTIES

Top

A Babble::Document object has the following basic properties:

author

The author of the document.

title

Title of the document.

subject

Subject of the document.

date

Submission date of the document.

id

A unique ID of the document, usually a hyperlink.

content

The actual content of the document.

Other properties might be present, but they are not standardised by this class. However, preprocessors and DataSources are free to add others.

METHODS

Top

new()

Creates a new Babble::Document object. Recognises the default properties mentioned above as arguments.

date()

Get or set the submission date of the document, depending on having an argument or not.

date_iso()

Returns the submission date of the document in the "YYYY-MM-DD HH:MM:SS" format.

date_rss()

Returns the submission date of the document in a format suitable for putting into an RSS item's dc:date field.

date_text()

Returns the submission date of the document in human readable format.

date_date()

Returns only the date part of the documents submission date.

search($filters)

Given a list of filters (see later) in an arrayref, checks if the document matches all the criteria specified in them. If yes, returns an array consisting of the Babble::Document object. Otherwise returns an empty array.

The filters are simple hashrefs, with two mandatory keys: field and pattern. The first one determines which field the search is performed on (this can be any one of the available Babble::Document properties), and pattern is the pattern it should match.

Optional keys include inverse, which reverses the check, and cmp, which will be used as a comparsion function if set, instead of the default regexp matcher.

all()

Return ourselves. This is mostly here so that Babble::Document::Collection->all() can call $doc->all(), which in turn makes it possible to have Babble::Document::Collections nested, and still work.

AUTHOR

Top

Gergely Nagy, algernon@bonehunter.rulez.org

Bugs should be reported at http://bugs.bonehunter.rulez.org/babble.

SEE ALSO

Top

Babble, Babble::Document::Collection


Babble documentation Contained in the Babble distribution.
## Babble/Document.pm
## Copyright (C) 2004 Gergely Nagy <algernon@bonehunter.rulez.org>
##
## This file is part of Babble.
##
## Babble is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 dated June, 1991.
##
## Babble is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

package Babble::Document;

use strict;
use Date::Manip;

sub new {
	my $type = shift;
	my %params = @_;

	my $self = bless {
		author => $params{author},
		content => $params{content},
		subject => $params{subject},
		title => $params{title},
		id => $params{id},
		date => $params{date},
	}, $type;

	return $self;
}

sub date (;$) {
	my ($self, $nv) = @_;

	$self->{date} = ParseDate ($nv) if (defined $nv);
	return $self->{date};
}

sub date_iso () {
	my $self = shift;

	return UnixDate ($self->{date}, "%Y-%m-%d %H:%M:%S");
}

sub date_rss () {
	my $self = shift;

	return UnixDate ($self->{date}, "%Y-%m-%dT%H:%M:%S+00:00");
}

sub date_text () {
	my $self = shift;

	return UnixDate ($self->{date}, "%d %B, %Y %H:%M");
}

sub date_date () {
	my $self = shift;

	return UnixDate ($self->{date}, "%Y-%m-%d");
}

sub search {
	my ($self, $filters) = @_;
	my $match = 1;

	foreach my $filter (@$filters) {
		unless ($self->{$filter->{field}}) {
			next if ($filter->{inverse});

			$match = 0;
			last;
		}

		my $cmp = $filter->{cmp} ||
			sub {
				my ($a, $b) = @_;
				return $a =~ /$b/;
			};
		my $res = &$cmp ($self->{$filter->{field}},
				 $filter->{pattern});
		if ((!$res && !$filter->{inverse}) ||
		    ($res && $filter->{inverse})) {
			$match = 0;
			last;
		}
	}

	return ($self) if $match;
	return ();
}

sub all () {
	return ($_[0]);
}

1;

# arch-tag: ac55e89f-a93d-4b5f-87c7-b72f903352d7