App-PM-Announce

 view release on metacpan or  search on metacpan

META.yml  view on Meta::CPAN

    - 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.343 second using v1.01-cache-2.11-cpan-496ff517765 )