require 'sinatra' require 'haml' require 'less' require 'dm-core' require 'dm-validations' require 'dm-timestamps' require 'dm-migrations' require 'rqr' require 'rdiscount' #config set :haml, :format => :html5 #app get '/' do haml :index end post '/' do @grito = Grito.new(:title => params[:title], :text => params[:text]) @grito.save haml :index end get '/qr/:grito.png' do tmpfile = Tempfile.new('tmp') tmpfile.close rpr_filepath = tmpfile.path + '.png' RQR::QRCode.create do |qr| qr.save('http://grita.heroku.com/'+params[:grito], rpr_filepath) end buffer = File.open(rpr_filepath).read content_type 'image/png' buffer end get '/style.css' do less :style end get '/:grito' do @grito = Grito.first(:id => params[:grito].to_i(36)) raise "Invalid Post" if @grito.nil? @markdown = RDiscount.new(@grito.text) haml :grito end error do haml :error end DataMapper.setup(:default, ENV['DATABASE_URL'] || 'mysql://root:root@localhost/grita') class Grito include DataMapper::Resource property :id, Serial property :title, String property :text, Text property :created_at, DateTime validates_presence_of :title, :message => "· Debes incluír un título." validates_presence_of :text, :message => "· ¡No escribiste contenido!" def gethash() self.id.to_s(36) end end