Skip to content

Instantly share code, notes, and snippets.

@machu
Created September 6, 2009 15:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save machu/181843 to your computer and use it in GitHub Desktop.
Save machu/181843 to your computer and use it in GitHub Desktop.
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