Skip to content

Instantly share code, notes, and snippets.

@d11wtq
Created October 21, 2011 16:38
Show Gist options
  • Save d11wtq/1304286 to your computer and use it in GitHub Desktop.
Save d11wtq/1304286 to your computer and use it in GitHub Desktop.
require "sinatra/base"
require "dm-core"
require "dm-serializer"
Bundler.require(:default, ENV["RACK_ENV"] || :development) if defined?(Bundler)
DataMapper.setup(:default, :adapter => :in_memory)
Dir[File.join(File.dirname(__FILE__), "models/**/*.rb")].each { |f| require f }
DataMapper.finalize
module Spesa
module ReflectiveRoutes
def reflect_routes(model)
name = model.storage_name.gsub(/^spesa_/, "")
reflect_collection_route(name, model)
reflect_resource_route(name, model)
end
def reflect_collection_route(name, model)
get "/#{name}" do
content_type :json
model.all.to_json
end
end
def reflect_resource_route(name, model)
get "/#{name}/:id" do |id|
content_type :json
model.get!(id).to_json
end
end
end
class Application < Sinatra::Base
extend ReflectiveRoutes
Spesa.constants.map { |c| Spesa.const_get(c) }.select { |k| k.kind_of?(DataMapper::Model) }.each do |model|
reflect_routes(model)
end
error DataMapper::ObjectNotFoundError do
404
end
end
end
Spesa::Customer.create(:full_name => "Bob")
Spesa::Customer.create(:full_name => "Fred")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment