Skip to content

Instantly share code, notes, and snippets.

@evanleck
evanleck / results.txt
Created May 23, 2017
A naive shootout between object serialization libraries
View results.txt
Warming up --------------------------------------
JSON Dump 20.000 i/100ms
Marshal Dump 64.000 i/100ms
MessagePack Dump 381.000 i/100ms
Oj Dump 107.000 i/100ms
YAML Dump 1.000 i/100ms
Calculating -------------------------------------
JSON Dump 187.571 (±10.1%) i/s - 940.000 in 5.067947s
Marshal Dump 611.550 (± 5.7%) i/s - 3.072k in 5.039944s
MessagePack Dump 3.945k (± 7.7%) i/s - 19.812k in 5.055238s
@evanleck
evanleck / http-decorator.rb
Created Sep 22, 2016
Decorating Ruby's Net::HTTP for Fun and Profit
View http-decorator.rb
# encoding: UTF-8
# frozen_string_literal: true
require 'net/http'
require 'json'
require 'uri'
class HTTPDecorator
# Timeouts
OPEN_TIMEOUT = 10 # in seconds
READ_TIMEOUT = 120 # in seconds
View proxy.erb
<script>proxyCheck = { hostname: '<%= request.host %>', pathname: '<%= request.path %>' };</script>
View proxy.js
/*
* This is a naive attempt to protect against transparent proxies.
* - We pass the request host and path in from Rack and compare it against what JS sees.
* - If they don't match, put them where they should be.
*
*/
(function(location) {
if (location.hostname !== proxyCheck.hostname || location.pathname !== proxyCheck.pathname) {
/* Use an anchor tag as a parser. */
var redirectParser = document.createElement('a');
@evanleck
evanleck / 50x.html
Created Dec 10, 2015
Better Low-Level Error Handling with Puma
View 50x.html
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='refresh' content='5'>
<title>Temporarily Unavailable</title>
<link rel='stylesheet' type='text/css' href='//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css'>
</head>
<body>
<div class='container'>
@evanleck
evanleck / puma.rb
Created Dec 10, 2015
Better Low-Level Error Handling with Puma
View puma.rb
# Inside of your Puma configuration file.
lowlevel_error_handler do
[500, { 'Content-Type' => 'text/html' }, File.open('50x.html')]
end
@evanleck
evanleck / needs.rb
Created Dec 8, 2015
Simple Strong Parameters in Sinatra
View needs.rb
#
# A way to require parameters
#
# get '/', needs: [:id, :action] do
# erb :index
# end
#
# Does not modify the parameters available to the request scope.
# Raises a RequiredParamMissing error if a needed param is missing
#
@evanleck
evanleck / allows.rb
Created Dec 8, 2015
Simple Strong Parameters in Sinatra
View allows.rb
#
# A way to whitelist parameters.
#
# get '/', allows: [:id, :action] do
# erb :index
# end
#
# Modifies the parameters available in the request scope.
# Stashes unmodified params in @_params
#
@evanleck
evanleck / example-app.rb
Created Dec 8, 2015
Simple Strong Parameters in Sinatra
View example-app.rb
require 'sinatra/base'
require 'sinatra/strong-params'
class ExampleApp < Sinatra::Base
configure do
register Sinatra::StrongParams
end
get '/', allows: [:search] do
# Only the 'search' parameter will make it to the execution scope.
@evanleck
evanleck / using-i18n.js
Created Dec 1, 2015
The Simplest JavaScript Internationalization I Can Think Of
View using-i18n.js
return i18n.forms.numberPatternMismatch;