Created
September 6, 2009 15:07
-
-
Save machu/181843 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rubygems' | |
require 'sinatra' | |
require 'appengine-apis/datastore' | |
# Make sure our template can use <%=h | |
helpers do | |
include Rack::Utils | |
alias_method :h, :escape_html | |
end | |
template :layout do | |
<<-EOS | |
<html> | |
<head><title>step counter</title></head> | |
<body> | |
<h1>step counter</h1> | |
<%= yield %> | |
</body> | |
</html> | |
EOS | |
end | |
get '/' do | |
redirect '/record/' | |
end | |
# get all records | |
get '/record/' do | |
query = AppEngine::Datastore::Query.new('Record') | |
if (params[:steps]) | |
@records = query.filter('steps', AppEngine::Datastore::Query::GREATER_THAN_OR_EQUAL, params[:steps]) | |
else | |
@records = query.fetch | |
end | |
erb %{ | |
<h2>post new steps</h2> | |
<form action="/record/" method="post"> | |
date: <input type="text" name="date" /><br /> | |
steps: <input type="text" name="steps" /><br /> | |
<input type="submit" value="send" /> | |
</form> | |
<h2>step records</h2> | |
<form action="." method="get"> | |
<input type="text" name="steps" /> | |
<input type="submit" value="steps filter" /> | |
</form> | |
<table border="1"> | |
<tr> | |
<th>date</th> | |
<th>steps</th> | |
<th>delete</th> | |
</tr> | |
<% @records.each do |record| %> | |
<tr> | |
<td><a href="/record/<%=h record[:date] %>"><%=h record[:date] %></a></td> | |
<td><%=h record[:steps] %></td> | |
<td> | |
<!-- delete form --> | |
<form action="/record/<%=h record[:date] %>" method="post"> | |
<input type="hidden" name="_method" value="delete" /> | |
<input type="submit" value="delete" /> | |
</form> | |
</td> | |
</tr> | |
<% end %> | |
</table> | |
} | |
end | |
# get one record | |
get '/record/:date' do | |
@key = AppEngine::Datastore::Key.from_path('Record', params[:date]) | |
begin | |
@record = AppEngine::Datastore.get(@key) | |
rescue AppEngine::Datastore::EntityNotFound => e | |
@record = nil | |
end | |
if @record | |
erb %{ | |
<h2>found record</h2> | |
date: <%=h @record[:date] %><br /> | |
key: <%=h @key %><br /> | |
steps: <%=h @record[:steps] %><br /> | |
} | |
else | |
erb %{ | |
<h2>not found record</h2> | |
date: <%=h params[:date] %><br /> | |
key: <%=h @key %><br /> | |
} | |
end | |
end | |
# create new record | |
post '/record/' do | |
@record = AppEngine::Datastore::Entity.new('Record', params[:date]) | |
@record[:date] = params[:date] | |
@record[:steps] = params[:steps] | |
new_key = AppEngine::Datastore.put(@record) # new_key == record.key | |
erb %{ | |
<h2>post complete!</h2> | |
date: <%=h @record[:date] %><br /> | |
steps: <%=h @record[:steps] %><br /> | |
record: <%=h @record.inspect %><br /> | |
entity key: <%=h @record.key %><br /> | |
key class: <%=h @record.key.class %><br /> | |
<a href="/record/">back</a> | |
} | |
end | |
# delete one record | |
delete '/record/:date' do | |
@key = AppEngine::Datastore::Key.from_path('Record', params[:date]) | |
@record = AppEngine::Datastore.delete(@key) | |
erb %{ | |
<h2>delete complete!</h2> | |
date: <%=h @record[:date] %><br /> | |
key: <%=h @key %><br /> | |
steps: <%=h @record[:steps] %><br /> | |
} | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment