package ojoJojo; use Mojo::Base -strict; use ojo; use Mojo::Util qw(monkey_patch); use Mojo::JSON::Pointer; use Scalar::Util qw( blessed ); sub import { my $caller = caller; eval "package $caller; use Mojolicious::Lite; 1" or die $@; Mojo::Base->import(-strict, $] < 5.020 ? () : (-signatures)); my $ua = $caller->app->ua; $ua->server->app->hook(around_action => sub { local $_ = $_[1]; $_[0]() }); $ua->max_redirects(10) unless defined $ENV{MOJO_MAX_REDIRECTS}; $ua->proxy->detect unless defined $ENV{MOJO_PROXY}; monkey_patch $caller, a => \&a, b => \&b, c => \&myc, d => \&d, f => \&f, g => \&g, h => \&h, ch => \&ch, j => \&myj, jp => \&jp, n => \&n, o => \&o, p => \&p, r => \&r, t => \&t, u => \&u, x => \&x, } # json from a file sub myj { return j( blessed $_[0] && $_[0]->isa('Mojo::File') ? $_[0]->slurp : blessed $_[0] && $_[0]->isa('Mojo::Collection') ? $_->to_array : $_[0] ); } sub jp { my $datum = shift; my $data = blessed $datum && $datum->isa('Mojo::File') ? j($datum->slurp) : blessed $datum && $datum->isa('Mojo::Collection') ? $_->to_array : $datum; my $pointer = Mojo::JSON::Pointer->new( $data ); return @_ ? $pointer->get(shift) : $pointer; } sub myc { return c(@_)->with_roles('+UtilsBy','ojoJojo::Collection::Role::MyRole'); } sub ch { return myc(%{ shift() }); } package ojoJojo::Collection::Role::MyRole; use Role::Tiny; sub key { die "Not a two element collection" unless $_[0]->size == 2; return $_[0]->[0]; } sub value { die "Not a two element collection" unless $_[0]->size == 2; return $_[0]->[1]; } sub pairs ($c) { die "uneven number of elements in collection" if $c->odd; return $c->bundle_by( sub { $c->new(@_) }, 2); } sub even { return $_[0]->size % 2 == 0 } sub odd { return $c->size % 2 != 0 } 1;