From: Brian Candler Date: 2009-01-20T19:17:28+09:00 Subject: Re: Desktop <-> Web Thomas Sawyer wrote: > ultimately I want to > use Rack instead. An example of a simple Rack-based JSON servlet would > be awesome. Anyone have one? How about this with Sinatra, which sits on top of Rack: --- myapp.rb --- require 'rubygems' require 'sinatra' require 'json' require 'widget' get '/widgets.json' do Widget.all.to_json end get '/widgets/:id.json' do Widget.find(Integer(params[:id])).to_json end post '/widgets.json' do item = JSON.parse(request.body.read) raise "Bad object" unless item.is_a? Widget Widget.add(item).to_s end --- widget.rb --- # Rubbish model, not thread-safe! class Widget attr_accessor :id, :name, :price def initialize(id, name, price) @id, @name, @price = id, name, price end def to_json(*a) { 'json_class' => self.class.name, 'data' => [ @id, @name, @price ], }.to_json(*a) end def self.json_create(o) new *o['data'] end def self.all @all ||= [] end def self.add(item) @seq ||= 0 @seq += 1 item.id = @seq all << item return @seq end def self.create(*args) add(new(*args)) end def self.find(id) all.find { |item| item.id == id } end end Widget.create(nil, "flurble", 12.3) Widget.create(nil, "boing", 4.56) -- Posted via http://www.ruby-forum.com/.