Skip to content

Instantly share code, notes, and snippets.

View jamiehodge's full-sized avatar

Jamie Hodge jamiehodge

  • Zendesk
  • Copenhagen, Denmark
View GitHub Profile
@jamiehodge
jamiehodge / libav.rb
Created December 20, 2012 08:56
Homebrew Libav formula
require 'formula'
class Libav < Formula
homepage 'http://libav.org/'
url 'http://libav.org/releases/libav-9_beta2.tar.xz'
sha1 'acb7ffbcded06e5f04e8fd0f7dbcc923fd95df3f'
head 'git://git.libav.org/libav.git'
option "without-x264", "Disable H264 encoder"
require 'bundler/setup'
require 'roar/representer/json'
require 'roar/representer/feature/hypermedia'
require 'webmachine'
class Product
include Roar::Representer::JSON
include Roar::Representer::Feature::Hypermedia
property :name
@jamiehodge
jamiehodge / method_override.rb
Last active December 10, 2015 14:28
Webmachine method override
require "webmachine"
class MethodOverride < Webmachine::Resource
def allowed_methods
override_method!
%w(GET PUT DELETE)
end
private
@jamiehodge
jamiehodge / webmachine.markdown
Last active May 7, 2020 22:21
Webmachine state machine and resource callbacks

Webmachine State Machine

General

  • Service available?
    • callback: service_available?
    • false: 503 Service Unavailable
  • Known method?
    • callback: known_methods
  • absent: 501 Not Implemented
@jamiehodge
jamiehodge / resource.rb
Last active December 10, 2015 23:28
Decoupling Webmachine dispatcher and resource life cycles
# Please ignore this solution. It's too complicated :-(
require "webmachine"
class MyResource
include Webmachine::Resource::Callbacks
include Webmachine::Resource::Tracing
attr_reader :model, :request, :response
@jamiehodge
jamiehodge / libxml2.rb
Last active December 11, 2015 12:58
Libxml2 homebrew formula
require 'formula'
class Libxml2 < Formula
homepage 'http://xmlsoft.org'
url 'ftp://xmlsoft.org/libxml2/libxml2-2.9.0.tar.gz'
sha256 'ad25d91958b7212abdc12b9611cfb4dc4e5cddb6d1e9891532f48aacee422b82'
keg_only :provided_by_osx
fails_with :llvm do
@jamiehodge
jamiehodge / http.txt
Created January 30, 2013 11:13
Link headers and collections
Link: <http://localhost:5000/catalogs/>; rel="self"; title="Catalog Index"
Link: <http://localhost:5000/catalogs/1>; rel="item"; title="Catalog"
Link: <http://localhost:5000/catalogs/2>; rel="item"; title="Catalog"
...
Link: <http://localhost:5000/catalogs/?page=2&page_size=12>; rel="next"; title="Next Page"
@jamiehodge
jamiehodge / controller.rb
Created January 30, 2013 11:33
Header links
class Catalogs < Controller
set :model, Catalog
set :fields, [:title, :description]
namespace '/' do
get do
catalogs = model.paginate(page, page_size)
@jamiehodge
jamiehodge / router.rb
Last active December 12, 2015 04:18
Sinatra Journey
require 'journey'
require 'forwardable'
class Router
extend Forwardable
def_delegator :router, :call
def_delegator :formatter, :generate
def add_route(app, path, conditions={}, defaults={}, name)
routes.add_route(
@jamiehodge
jamiehodge / shell.rb
Last active December 13, 2015 23:49
Stream and capture subprocess stdout
require 'open3'
def subprocess(*cmd)
Open3.popen3(*cmd) {|i,o,e,t|
out = Thread.new do
o.each_with_object([]) do |line,memo|
memo << line
yield line if block_given?
end.join