view release on metacpan or search on metacpan
0.1.2 Wed Sep 30 23:26:11 PDT 2009
bug fixes:
* Build.PL install changes - SQLite3 could not actually write to the database,
even though, the db file was world writeable. The container dir
also needs to be writable, now it is.
* ensure the database is 0666 for tests as well
0.1.1 Fri Sep 18 02:11:02 PDT 2009
bug fixes:
* default constructor values were not getting set on the object as they should
* loosen untaint filepath - for the dist test failures
0.1.0 Wed Sep 9 23:43:56 PDT 2009
Initial public pre-release (minor version)
lib/ACME/QuoteDB.pm view on Meta::CPAN
#$q->quote($arg_ref->{'QuoteId'});
return $q->delete;
}
sub get_quote {
my ( $self, $arg_ref ) = @_;
# default use case, return random quote from all
if (not $arg_ref) {
return _get_one_rand_quote_from_all;
}
_args_are_valid($arg_ref, [qw/Rating AttrName Source Category/]);
my ($lower, $upper) = (q{}, q{});
if ($arg_ref->{'Rating'}) {
($lower, $upper) = _get_rating_params($arg_ref->{'Rating'});
}
lib/ACME/QuoteDB.pm view on Meta::CPAN
my @qms = ();
for (1..scalar @{$ids}) {
push @qms, '?';
}
return join ',', @qms;
}
sub get_quotes {
my ( $self, $arg_ref ) = @_;
# default use case, return random quote from all
if (not $arg_ref) {
return _get_one_rand_quote_from_all;
}
_args_are_valid($arg_ref, [qw/Rating AttrName Limit Category Source/]);
my ($lower, $upper) = (q{}, q{});
if ($arg_ref->{'Rating'}) {
($lower, $upper) = _get_rating_params($arg_ref->{'Rating'});
}
lib/ACME/QuoteDB.pm view on Meta::CPAN
my ($lower, $upper) = (q{}, q{});
if ($arg_ref->{'Rating'}) {
($lower, $upper) = _get_rating_params($arg_ref->{'Rating'});
}
my $limit = q{};
if ($arg_ref->{'Limit'}) {
$limit = _rm_beg_end_space($arg_ref->{'Limit'});
}
# default use case for attribution, return random quote
my $attr_name = q{};
if ( $arg_ref->{'AttrName'} ) {
# return 'n' from random from specified pool
$attr_name = _rm_beg_end_space($arg_ref->{'AttrName'});
}
return _get_rand_quote_for_attribution($attr_name, $lower, $upper, $limit, $contain);
}
1 and 'Chief Wiggum: Uh, no, you got the wrong number. This is 9-1... 2.';
lib/ACME/QuoteDB.pm view on Meta::CPAN
C<DBD::SQLite::db prepare_cached failed: no such table: ,...>
probably means that you do not have a database created in the correct format.
basically, you need to create the database, usually, on a first run
you need to add the flag (to the loader):
create_db => 1, # first run, create the db
appending to an existing database is the default behaviour
see L<ACME::QuoteDB::LoadDB/create_db_tables>
=head1 CONFIGURATION AND ENVIRONMENT
if you are running perl > 5.8.5 and have access to
install cpan modules, you should have no problem installing this module
(utf-8 support in DBD::SQLite not avaible until 5.8 - we don't support 'non
utf-8 mode)
=over 1
=item * By default, the quotes database used by this module installs in the
system path, 'lib', (See L<Module::Build/"INSTALL PATHS">)
as world writable - i.e. 0666 (and probably owned by root)
If you don't like this, you can modify Build.PL to not chmod the file and it
will install as 444/readonly, you can also set a chown in there for whoever
you want to have RW access to the quotes db.
Alternativly, one can specify a location to a quotes database (file) to use.
(Since the local mode is sqlite3, the file doesn't even need to exist, just
needs read/write access to the path on the filesystem)
lib/ACME/QuoteDB.pm view on Meta::CPAN
Something such as:
BEGIN {
# give alternate path to the DB
# doesn't need to exist, will create
$ENV{ACME_QUOTEDB_PATH} = '/home/me/my_stuff/my_quote_db'
}
* (NOTE: be sure this (BEGIN) exists *before* the 'use ACME::QuoteDB' lines)
The default is to use sqlite3.
In order to connect to a mysql database, several environmental variables
are required.
BEGIN {
# have to set this to use remote database
$ENV{ACME_QUOTEDB_REMOTE} = 'mysql';
$ENV{ACME_QUOTEDB_DB} = 'acme_quotedb';
$ENV{ACME_QUOTEDB_HOST} = 'localhost';
$ENV{ACME_QUOTEDB_USER} = 'acme_user';
lib/ACME/QuoteDB/DB/DBI.pm view on Meta::CPAN
=head1 SUBROUTINES/METHODS
see L<ACME::QuoteDB>
=head2 get_current_db_path
returns the path to our current database.
determined first by $ENV{ACME_QUOTEDB_PATH}
and next by the default system path to 'quotes.db'
=head1 DIAGNOSTICS
None currently known
=head1 CONFIGURATION AND ENVIRONMENT
By default, the quotes database used by this module installs in a system path,
which means you'll need to be root (sudo :) to load and modify it.
Alternativly, one can specify a location to a quotes database (file) to use.
Set the environmental variable:
$ENV{ACME_QUOTEDB_PATH} (untested on windows)
(this has to be set before trying a database load and also (everytime) before
using this module, obviouly)
lib/ACME/QuoteDB/LoadDB.pm view on Meta::CPAN
can be one of: 'csv', 'tsv', 'custom', or 'html'
if 'html' or 'custom' you must supply the method for parsing.
(see tests for examples)
example:
{ file_format => 'csv' }
=item delimiter - optional, default is a comma for csv
csv/tsv options tested: comma(,) and tab(\t)
'html' - not applicable
example:
{ delimiter => "\t" }
=item category - optional, extracted from data if exists, otherwise will use what you
lib/ACME/QuoteDB/LoadDB.pm view on Meta::CPAN
display to STDOUT what is being done
This can be helpful for testing quotes extraction from file parsing
example:
{verbose => 1}
=item create_db - optional (boolean)
L<ACME::QuoteDB::LoadDB> default behaviour is to always assume there is a
database and append new data to that. (It is usually only needed the first
time one load's data)
setting this parameter to a true value will create a new database.
(so while this is an optional param, it is required at least once ;)
B<NOTE: it is not intelligent, if you hand it a populated database,
it will happily overwrite all data>
B<AGAIN: setting this param will destroy the current database, creating a new
lib/ACME/QuoteDB/LoadDB.pm view on Meta::CPAN
create an empty quotes database (with correct tables).
(usually only performed the first time you load data)
B<NOTE: will overwrite ALL existing data>
Set 'create_db' parameter (boolean) to a true value upon instantiation
to enable.
The default action is to assume the database (and tables) exist and just
append new L<ACME::QuoteDB::LoadDB> loads to that.
=begin comment
keep pod coverage happy.
# Coverage for ACME::QuoteDB::LoadDB is 71.4%, with 3 naked subroutines:
# Catg
# Quote
# Attr
lib/ACME/QuoteDB/LoadDB.pm view on Meta::CPAN
C<DBD::SQLite::db prepare_cached failed: no such table: ,...>
probably means that you do not have a database created in the correct format.
basically, you need to create the database, usually, on a first run
you need to add the flag:
create_db => 1, # first run, create the db
appending to an existing database is the default behaviour
see L</create_db_tables>
=head1 CONFIGURATION AND ENVIRONMENT
if you are running perl > 5.8.5 and have access to
install cpan modules, you should have no problem installing this module
(utf-8 support in Text::CSV not avaible until 5.8 - we don't support 'non
utf-8 mode)
=over 1
=item * By default, the quotes database used by this module installs in the
system path, 'lib', (See L<Module::Build/"INSTALL PATHS">)
as world writable - i.e. 0666 (and probably owned by root)
If you don't like this, you can modify Build.PL to not chmod the file and it
will install as 444/readonly, you can also set a chown in there for whoever
you want to have RW access to the quotes db.
Alternativly, one can specify a location to a quotes database (file) to use.
(Since the local mode is sqlite3, the file doesn't even need to exist, just
needs read/write access to the path)
lib/ACME/QuoteDB/LoadDB.pm view on Meta::CPAN
Something such as:
BEGIN {
# give alternate path to the DB
# doesn't need to exist, will create
$ENV{ACME_QUOTEDB_PATH} = '/home/me/my_stuff/my_quote_db'
}
* (NOTE: be sure this (BEGIN) exists *before* the 'use ACME::QuoteDB' lines)
The default is to use sqlite3.
In order to connect to a mysql database, several environmental variables
are required.
BEGIN {
# have to set this to use remote database
$ENV{ACME_QUOTEDB_REMOTE} = 'mysql';
$ENV{ACME_QUOTEDB_DB} = 'acme_quotedb';
$ENV{ACME_QUOTEDB_HOST} = 'localhost';
$ENV{ACME_QUOTEDB_USER} = 'acme_user';
t/01-load_quotes.t view on Meta::CPAN
use File::Basename qw/dirname/;
use Data::Dumper qw/Dumper/;
use File::Spec;
# A. test dry run, show if parsing is succesful but don't load the database
{
my $q = File::Spec->catfile((dirname(__FILE__),'data'),
'simpsons_quotes.tsv.csv'
);
# only 2 supported formats: 'simple' text (which is the default) and 'tsv'
my $load_db = ACME::QuoteDB::LoadDB->new({
file => $q,
file_format => 'tsv', # the only supported format
delimiter => "\t",
# provide a category for all (if not in data)
category => 'Humor',
# provide a attr_source for all (if not in data)
attr_source => 'The Simpsons',
dry_run => 1, # don't write to the database
#verbose => 1, # show what is being done
t/01-load_quotes.t view on Meta::CPAN
{
#my $sqf = dirname(__FILE__) . '/data/simpsons_quotes.csv';
my $sqf = File::Spec->catfile((dirname(__FILE__),'data'),
'simpsons_quotes.csv'
);
my $load_db = ACME::QuoteDB::LoadDB->new({
file => $sqf,
file_format => 'csv',
#delimiter => ",", # comma is default
#verbose => 1,
create_db => 1, # first run, create the db
});
isa_ok $load_db, 'ACME::QuoteDB::LoadDB';
$load_db->data_to_db;
ok $load_db->success;
is $load_db->success, 1;
my $sq = ACME::QuoteDB->new;
t/02-get_quotes.t view on Meta::CPAN
my @expected_attr_name_list = (
'Apu Nahasapemapetilon',
'Chief Wiggum',
'Comic Book Guy',
'Grandpa Simpson',
'Ralph Wiggum',
);
is( $sq->list_attr_names, join "\n", sort @expected_attr_name_list);
#warn $sq->get_quote, "\n";
ok $sq->get_quote; # default get random quote
ok $sq->get_quote =~ m{\w+};
{
my $res = $sq->get_quote({AttrName => 'apu'});
if ($res =~ m/apu/xmsgi) {
pass 'ok';
}
else {
fail 'a supposed apu quote, should contain "Apu" within,...';
}
t/04-load_get_quote_utf8.t view on Meta::CPAN
'I can eat grass (Chinese)',
'I can eat grass (Japanese)',
'I can eat grass (Korean)',
'I can eat grass (Navajo)',
'I can eat grass (Greek)',
'I can eat grass (Hindi)',
'I can eat grass (Hebrew)',
);
is( $sq->list_attr_names, join "\n", sort @expected_attribution_list);
ok $sq->get_quote; # default get random quote
ok $sq->get_quote =~ m{\w+};
is $sq->get_quote({AttrName => $expected_attribution_list[1]}),
$utf8_quotes->[1] . "\n-- " . $expected_attribution_list[1];
is $sq->get_quote({AttrName => $expected_attribution_list[6]}),
$utf8_quotes->[6] . "\n-- " . $expected_attribution_list[6];
is @{ $sq->get_quotes({ Rating => '10' })}, @{$utf8_quotes};
t/data/python_quotes.txt view on Meta::CPAN
-- Tim Peters, 20 Oct 1998
We did requirements and task analysis, iterative design, and user testing.
You'd almost think programming languages were an interface between people and
computers.
-- Steven Pemberton, one of the designers of Python's direct ancestor
ABC
Not at all, although I agree here too <wink>. It's like saying a fork is broken
just because it's not that handy for jacking up a car. That is, Guido
implemented the syntax to support default arguments, and it works great for
that purpose! Using it to fake closures is a hack, and the "hey, this is cool!"
/ "hey, this really sucks!" mixed reaction thus follows, much as pain follows a
car falling on your skull. Stick to stabbing peas, or even teensy pea-sized
closures, and a fork serves very well.
-- Tim Peters, 31 Oct 1998
My customers consider it a marketable skill that I a) think for myself b) share
my thoughts with them.
-- Paul Prescod, 2 Nov 1998
t/data/python_quotes.txt view on Meta::CPAN
-- Barry Warsaw, 23 Mar 2000
>Have you ever looked at the output of a bib | tbl | eqn pipeline?
Are you kids still using that as a pick-up line?
-- Roy Smith and Cameron Laird, 4 Apr 2000
This is like getting lost in a dictionary. What does quincuncial mean anyhow?
-- Dennis Hamilton, 4 Apr 2000
UTF-8 has a certain purity in that it equally annoys every nation, and is
nobody's default encoding.
-- Andy Robinson, 10 Apr 2000
"Now if we could figure out where python programmers are from, someone
could write a book and get rich."
"Yorkshire."
-- Quinn Dunkan and Warren Postma, 11 Apr 2000
If I didn't have my part-time performance art income to help pay the bills, I
could never afford to support my programming lifestyle.
-- Jeff Bauer, 21 Apr 2000