App-PM-Announce
view release on metacpan or search on metacpan
- t
requires:
Config::General: 0
Config::JFDI: 0
DBD::SQLite: 0
DBI: 0
DBIx::Simple: 0
Data::Dump: 1.14
Data::UUID: 0
Date::Manip: 0
DateTime: 0
DateTimeX::Easy: 0
Document::TriPart: 0
File::HomeDir: 0
Getopt::Chain: 0
HTML::TreeBuilder: 0
HTTP::Request::Common: 0
JSON: 2
Log::Dispatch: 0
Moose: 0
Path::Class: 0
SQL::Script: 0
Makefile.PL view on Meta::CPAN
Test::Most
Directory::Scratch
_END_
map { my ($pk, $vr) = split m/\s/; requires $pk => $vr || 0 } grep { ! /^\s*#/ } split m/\n/, <<_END_;
Config::General
Config::JFDI
Data::Dump 1.14
Data::UUID
Date::Manip
DateTime
DateTimeX::Easy
DBD::SQLite
DBI
DBIx::Simple
DateTime
Document::TriPart
File::HomeDir
Getopt::Chain
HTML::TreeBuilder
HTTP::Request::Common
JSON 2
Log::Dispatch
Moose
Path::Class
SQL::Script
lib/App/PM/Announce.pm view on Meta::CPAN
use Moose;
#with 'MooseX::LogDispatch';
use File::HomeDir;
use Path::Class;
use Config::JFDI;
use Config::General;
use String::Util qw/trim/;
use Data::UUID;
use Document::TriPart;
use DateTimeX::Easy;
use Log::Dispatch;
use Log::Dispatch::Screen;
use Log::Dispatch::File;
use App::PM::Announce::History;
use App::PM::Announce::Feed::meetup;
use App::PM::Announce::Feed::linkedin;
use App::PM::Announce::Feed::greymatter;
use App::PM::Announce::Feed::useperl;
lib/App/PM/Announce.pm view on Meta::CPAN
has log_file => qw/is ro lazy_build 1/;
sub _build_log_file {
return shift->home_dir->file( 'log' );
}
has logger => qw/is ro isa Log::Dispatch lazy_build 1/;
sub _build_logger {
my $self = shift;
my $logger = Log::Dispatch->new( callbacks => sub {
my $message = join ' ',
"[@{[ DateTime->now->set_time_zone( 'local' ) ]}]",
"[$_[3]]",
"$_[1]\n",
;
# $message = "# $message" if $_[3] eq 'debug';
return $message;
} );
$logger->add( Log::Dispatch::Screen->new( name => 'screen', min_level => $self->debug ? 'debug' : 'info', stderr => 1 ) ) if $self->debug;
# $logger->add( Log::Dispatch::File->new( name => 'file', mode => 'append', min_level => 'info', filename => $self->log_file.'' ) );
return $logger;
}
lib/App/PM/Announce.pm view on Meta::CPAN
$event{$_} = trim $event{$_} for qw/title venue/;
die "Wasn't given a UUID for the event\n" unless $event{uuid};
die "Wasn't given a title for the event\n" unless $event{title};
# die "Wasn't given a venue for the event\n" unless $event{venue};
die "Wasn't given a date & time for the event\n" unless $event{datetime};
die "The date & time isn't a DateTime object\n" unless $event{datetime}->isa( 'DateTime' );
}
my (@report, $event, $result);
my $uuid = $event{uuid};
$event = $self->history->find_or_insert( $uuid )->{data};
$self->history->update( $uuid => %event );
eval {
if ($event->{did_meetup}) {
$self->logger->debug( "Already posted to meetup, skipping" );
lib/App/PM/Announce.pm view on Meta::CPAN
}
use Data::Dump qw/dd pp/;
sub parse {
my $self = shift;
die "Couldn't parse" unless my $document = Document::TriPart->read(shift);
my $datetime = $document->header->{datetime};
die "You didn't give a datetime" unless $datetime;
die "Unable to parse ", $document->header->{datetime} unless $datetime = DateTimeX::Easy->parse( $datetime );
$document->header->{datetime} = $datetime;
return $document;
}
sub template {
my $self = shift;
my %given = @_;
my $uuid = Data::UUID->new->create_str;
my $datetime = DateTimeX::Easy->parse( '4th tuesday' );
my $venue = $self->config->{venue} || '';
$datetime = DateTimeX::Easy->parse( '3rd tuesday' ) unless $datetime;
$datetime->set(hour => 20, minute => 0, second => 0);
return <<_END_;
# App-PM-Announce
# You can leave 'venue' blank to use the default venue (per @{[ $self->config_file ]})
# The 'datetime' field is the date & time that the event will take place. Any reasonable string should do (parsed via DateTimeX::Easy)
---
title: The title of the event
venue: $venue
datetime: $datetime
image: $given{image}
uuid: $uuid
---
Put your multi-line description for the event here.
Everything below the '---' is considered the description.
_END_
lib/App/PM/Announce/App.pm view on Meta::CPAN
package App::PM::Announce::App;
use warnings;
use strict;
use Getopt::Chain;
use App::PM::Announce;
use App::PM::Announce::Util;
use DateTime;
use Text::Table;
use Data::Dump qw/dd pp dump/;
use Document::TriPart;
my @feeds = @App::PM::Announce::Feed::feeds;
my $app;
my @app;
sub app {
return $app ||= App::PM::Announce->new(@app);
lib/App/PM/Announce/App.pm view on Meta::CPAN
});
my $key = int rand $$;
my $description = join ' ', @arguments;
$description ||= 'Default description';
app->announce(
uuid => Data::UUID->new->create_str,
title => "$description ($key)",
description => "$description ($key)",
venue => 920502,
datetime => DateTime->now->add(days => 10),
);
},
template => {
options => [ 'image=s' ],
run => sub {
my ($context, @arguments) = @_;
print STDOUT app->template( image => $context->option( 'image' ) || '' );
},
},
announce => sub {
lib/App/PM/Announce/Util.pm view on Meta::CPAN
use strict;
use warnings;
use Date::Manip;
use Scalar::Util qw/blessed/;
sub age {
my $class = shift;
my $dtime = shift;
$dtime->set_time_zone("UTC") if blessed $dtime && ($dtime = $dtime->clone);
my $now = DateTime->now;
my $age_delta = DateCalc(ParseDate($dtime.""), ParseDate($now.""));
my ($week, $day, $hour, $minute, $second) = split m/:/, scalar Delta_Format($age_delta, 2, "\%wv:\%dv:\%hv:\%mv:\%sv");
my $age;
if ($week) {
$age = scalar Delta_Format($age_delta, 2, "\%wh weeks");
}
elsif ($day) {
$age = scalar Delta_Format($age_delta, 2, "\%dh days");
t/prototype/03-meetup.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Test::Most;
plan qw/no_plan/;
use DateTime;
use App::PM::Announce;
my $app = App::PM::Announce->new;
my $feed = App::PM::Announce::Feed::meetup->new(
app => $app,
username => 'robert...krimen@gmail.com',
password => 'test8378',
uri => 'http://www.meetup.com/The-San-Francisco-Beta-Tester-Meetup-Group/calendar/?action=new',
);
my $key = int rand $$;
$feed->announce(
title => "Event title ($key)",
description => "Event description ($key)",
venue => 920502,
datetime => DateTime->now->add(days => 10),
image => Path::Class::File->new( 't/assets/bee.jpg' ),
);
ok(1);
__END__
use WWW::Mechanize;
use HTTP::Request::Common qw/POST/;
use HTML::TreeBuilder;
t/prototype/04-useperl.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Test::Most;
plan qw/no_plan/;
use DateTime;
use App::PM::Announce;
my $app = App::PM::Announce->new;
my $feed = App::PM::Announce::Feed::useperl->new(
app => $app,
username => 'alice8378',
password => 'test8378',
promote => 'post',
);
my $key = int rand $$;
$feed->announce(
( run in 0.540 second using v1.01-cache-2.11-cpan-2b0bae70ee8 )