Skip to content

Instantly share code, notes, and snippets.


Joel Berger jberger

View GitHub Profile
View noname
diff --git a/src/util.ts b/src/util.ts
index c6e68b3..23e9b93 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -130,6 +130,14 @@ export function decodeURIComponentSafe(value: string): string | null {
+export function defaultObject<Type>(defaultValue: Type): Record<string, Type> {
+ return new Proxy({}, {
View defaultObject.js
export function defaultObject(defaultValue) {
return new Proxy({}, {
get: function(target, name) {
return target.hasOwnProperty(name) ? target[name] : defaultValue;
package Mojolicious::Plugin::RequestNegotiation;
use Mojo::Base 'Mojolicious::Plugin';
use Carp ();
sub register {
my ($plugin, $app, $conf) = @_;
$app->helper(sent => \&_sent);
$app->helper(when_sent => \&_when_sent);
use Mojo::Base -strict;
use Mojo::DOM;
my $html = q!<img src='/__swift/themes/admin_default/images/mimeico_blank.gif' valign='middle' style='position: relative; top: -1px;'> <a href=''><strong>prometheus.20200605.yml</strong></a>!;
my $dom = Mojo::DOM->new($html);
my $anchor = $dom->at('a');
my $href = $anchor->{href};
jberger / tpf_cat_statement.txt
Last active Sep 3, 2021
Proposed statement pausing the TPF CAT
View tpf_cat_statement.txt
When embarking on community moderation and when claiming the authority to mete out judgements, clear policy and procedure is
key to keep the moral authority to do so and to protect all of the parties involved.
Effective immediately, The Perl Foundation (TPF)'s Community Affairs Team (CAT) will not accept any incoming reports nor issue
any rulings until such time as:
a) a set of policies can be created to govern it
b) that policy is voted on and accepted by the TPF governing board
c) the policy, reporting procedure, and CAT board membership are clearly posted on the TPF's main website
Once this is done we hope to rebuild a sense of trust within the Perl Community and to act to keep it safe and welcoming.
use Mojo::Base -strict, -signatures;
use Mojo::UserAgent;
use Mojolicious;
my $mock = Mojolicious->new;
$mock->routes->any('/' => sub ($c) { $c->render(data => $c->req->body) });
my @content = (qw(this is a test));
use Mojo::Base -strict, -signatures;
use Mojo::UserAgent;
my @content = (qw(this is a test));
my $iterator = sub { shift @content };
# Build a normal transaction
my $ua = Mojo::UserAgent->new;
my $tx = $ua->build_tx(GET => '');
jberger / graphite
Last active Feb 9, 2022
A little graphite CLI tool
View graphite
#!/usr/bin/env perl
use Mojo::Base -strict;
use Getopt::Long qw(:config gnu_getopt no_auto_abbrev no_ignore_case);
use Mojo::Date;
use Mojo::URL;
use Mojo::UserAgent;
use Mojo::Util 'tablify';
View base.js
const Koa = require('koa');
const Router = require('@koa/router');
class Controller {
constructor(app, ctx) { = app;
this.ctx = ctx;
get req () { return this.ctx.request }
View app.conf
foo => 1,
plugins => [
{'HypnotoadRestarter' => {}},