Skip to content

Instantly share code, notes, and snippets.

@xaviervia
Created October 31, 2011 22:08
Show Gist options
  • Save xaviervia/1329184 to your computer and use it in GitHub Desktop.
Save xaviervia/1329184 to your computer and use it in GitHub Desktop.
Piano Rest - Revisiting (major refactor)
$LOAD_PATH << File.expand_path( "lib" )
require "piano/fast"
require "piano/rest"
disable :etags
enable :sessions
post "/" do
resource :index
save_data params
flash "Saved some data"
redirect back, params.to_json
end
put %r{^/(.*?):(.+?)$} do |resource_text, item_text|
resource resource_text
params["id"] = item_text
params.delete "captures"
save_data params
flash "Updated #{item_text}"
status 201
headers \
"Location" => "/#{resource}:#{item_text}"
body params.to_json
end
delete %r{^/(.*?):(.+?)$} do |resource_text, item_text|
resource_text = "index" if resource_text.nil?
resource resource_text
delete_data item_text
flash "Deleted #{item_text}"
status 201
headers \
"Location" => "/#{resource}"
end
get %r{^/(.*?):(.+?)$} do |resource_text, item|
resource_text = "index" if resource_text.nil?
resource resource_text
@content = from.yaml "data/#{resource}/#{item}.yaml"
try_haml resource.to.symbol
end
get %r{^/(.+?).js$} do |resource_text|
content_type resource.media_type.to.symbol
coffee resource.to.symbol
end
get %r{^/(.+?).css$} do |resource_text|
content_type resource.media_type.to.symbol
sass resource.to.symbol
end
get %r{^/(.+?)$} do |resource_text|
try_haml resource.to.symbol
end
get "/" do
try_haml resource.to.symbol
end
before %r{^/(.*?)(\.\w+)?$} do |resource_name, media_type|
resource_name = "index" if resource_name == ""
resource resource_name
resource.media_type = media_type[1..-1] if media_type
end
helpers do
def save_data data
dir! "data/#{resource}"
file.append "data/#{resource}/" + link( data[:id] ) + ".yaml", data.to_yaml
end
def delete_data data
file.delete "data/#{resource}/#{data}.yaml"
end
def items
return [] unless dir? "data/#{resource}"
dir "data/#{resource}",
:extension => :yaml,
:strip_extension => true
end
def resource symbol = nil
return session[:resource] unless symbol
session[:resource] = Piano::Rest::Resource.new symbol
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment