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 / assets.rb
Created March 21, 2012 08:53
Uploader with blob via PATCH support (Chrome/Firefox)
require 'bundler/setup'
require 'sinatra/base'
require 'slim'
require 'coffee-script'
require 'sequel'
require 'sqlite3'
@jamiehodge
jamiehodge / mount.rb
Created April 10, 2012 14:31
sinatra/mount
module Sinatra
module Mount
def mount(app, route="/#{app.name.downcase}")
%w{get post put delete patch options}.each do |method|
self.send method.to_sym, "#{route}*" do
app.call(
env.merge!(
'SCRIPT_NAME' => route.split('/').last,
'PATH_INFO' => params.delete('splat').join('/')
@jamiehodge
jamiehodge / app.rb
Created April 10, 2012 21:54
application/vnd.amundsen.maze+xml
require 'sinatra'
require 'sequel'
require 'sqlite3'
require 'nokogiri'
DB = Sequel.sqlite
DB.instance_eval do
create_table :mazes do
primary_key :id
@jamiehodge
jamiehodge / app.rb
Created April 11, 2012 09:07
application/collection+json
require 'sinatra'
require 'rack/cache'
require 'sequel'
require 'sqlite3'
require 'yajl'
DB = Sequel.sqlite
DB.instance_eval do
create_table :tasks do
@jamiehodge
jamiehodge / app.rb
Created April 12, 2012 10:19
Micro-blogging with XHTML
require 'sinatra/base'
require 'slim'
require 'sequel'
require 'sqlite3'
require 'bcrypt'
require 'thin'
require 'rack/cache'
@jamiehodge
jamiehodge / index.slim
Created April 12, 2012 20:51
HTML5-based collection media type
ul
- for keyword in keywords
li
a rel='item' href=url("/#{keyword.id}", false) = keyword.name
nav
ul
- if keywords.next_page
li
a rel='next' href=url("/?page=#{keywords.next_page}", false) Next Page
@jamiehodge
jamiehodge / sequel.rb
Created April 16, 2012 20:04
Nested Attributes example
require 'sequel'
require 'sqlite3'
DB = Sequel.sqlite
DB.instance_eval do
create_table :artists do
primary_key :id
String :name
end
@jamiehodge
jamiehodge / conditionalforms.rb
Created May 8, 2012 08:22
Rack::ConditionalForms middleware to override If-Match and If-Unmodified-Since headers using form inputs
module Rack
class ConditionalForms
IF_MATCH_PARAM_KEY = '_if_match'.freeze
IF_UNMODIFIED_SINCE_KEY = '_if_unmodified_since'.freeze
def initialize(app)
@app = app
end
@jamiehodge
jamiehodge / presenter.rb
Created May 11, 2012 07:44
mini-presenter
class Presenter < BasicObject
def initialize(model, scope)
@model = model
@scope = scope
end
def method_missing(symbol, *args, &blk)
[@model, @scope].each do |obj|
return obj.send(symbol, *args, &blk) if obj.respond_to?(symbol)
@jamiehodge
jamiehodge / page.js
Created May 18, 2012 22:25
Spine.js Page model
Spine = require('spine')
class Page extends Spine.Model
@configure 'Page', 'name'
@extend Spine.Model.Ajax
@fetch: (params) ->
index = @last()?.id or 0
return if index is @index