Skip to content

Instantly share code, notes, and snippets.

@hisasann
Created October 15, 2009 03:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hisasann/210639 to your computer and use it in GitHub Desktop.
Save hisasann/210639 to your computer and use it in GitHub Desktop.
require "rubygems"
require "sinatra"
require 'json'
require 'haml'
require 'sequel'
Sequel::Model.plugin(:schema)
Sequel.sqlite('twitter.db')
class Users < Sequel::Model
unless table_exists?
set_schema do
primary_key :id
text :name
end
create_table
end
end
class Timelines < Sequel::Model
unless table_exists?
set_schema do
primary_key :id
text :name
text :message
end
create_table
end
end
# Topページ
get '/twitter/' do
@Users = Users.all
@Timelines = Timelines.all
haml :index
end
# name付きトップページ
get '/twitter/:name' do
# sql log
puts Users.filter(:name => params[:name]).sql
puts Timelines.filter(:name => params[:name]).sql
@Users = Users.all
@Timelines = Timelines.filter(:name => params[:name])
haml :index
end
# nameに該当するタイムラインを返すJSON
get '/twitter/:name/timeline.json' do
content_type :json
JSON.unparse(Timelines.filter(:name => params[:name]).map{|e|e.values})
end
# メッセージのPOST
post '/twitter/post' do
Timelines.insert(:name => params[:name], :message => params[:message])
@Timelines = Timelines.filter(:name => params[:name])
end
get '/js/suggest.js' do
<<JS
$(function() {
// サジェスト
$("#user").keyup(function(event){
event.preventDefault();
if (event.which != "13") { return; }
$.getJSON(["/twitter/", $("#user").val(), "/timeline.json"].join(""), {}, function(json){
var suggest = $("#suggest").html("");
for (var i=0, len=json.length; i<len; ++i) {
suggest.append(
$("<div>")
.css("display", "none")
.html([json[i].name, " ", json[i].message].join(""))
.fadeIn()
)
}
});
})
// メッセージの登録
$("#message").keyup(function(event){
event.preventDefault();
if (event.which != "13") { return; }
jQuery.post(["/twitter/post"].join(""), {
name: $("#user").val(),
message: $("#message").val()
}, function(){
}, "json");
})
});
JS
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment