-
Notifications
You must be signed in to change notification settings - Fork 0
/
twitter-props.rb
65 lines (55 loc) · 2.57 KB
/
twitter-props.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# run very flat apps with merb -I <app file>.
################################################################################
# CONFIG
################################################################################
require 'config/dependencies.rb'
use_test :rspec
use_template_engine :haml
Merb::Config.use { |c|
c[:framework] = { :public => [Merb.root / "public", nil] }
c[:session_store] = 'none'
c[:exception_details] = false
c[:log_level] = :error # or error, warn, info or fatal
c[:log_file] = Merb.root / "log" / "merb.log"
c[:reload_classes] = false
c[:reload_templates] = false
}
require 'config/database.rb'
################################################################################
################################################################################
# ROUTES
################################################################################
Merb::Router.prepare do
match('/').to(:controller => 'users', :action =>'index')
match('/:user').to(:controller => 'users', :action => 'show')
end
################################################################################
################################################################################
# CONTROLLERS
################################################################################
class Users < Merb::Controller
def index(key=nil)
%w(totals props drops).each do |term|
rows = CouchRest::Model.default_database.view("messages/by_#{term}")["rows"].first['value'].collect {|n| TempSort.new(n)}
self.instance_variable_set("@#{term}", rows.sort {|a,b| b.send(term) <=> a.send(term) } )
end
render
end
def show
@messages = CouchRest::Model.default_database.view("messages/by_handle", :key => params[:user] )["rows"].collect {|n| TempSort.new(n['value']) }.sort {|a,b| b.published_at <=> a.published_at }
@stats = TempSort.new((CouchRest::Model.default_database.view("messages/by_receiver_totals", :key => params[:user] )["rows"].first || {'value' => {'totals' => 0, 'props' => 0, 'drops' => 0}})['value'])
render
end
end
################################################################################
# MODELS
################################################################################
class TempSort
def initialize(values)
(values.keys - ["_id", "_rev","couchrest-type"] ).each {|key| TempSort.class_eval("attr_accessor :\"#{key}\""); self.send("#{key}=", values[key]) }
end
end
class Message < CouchRest::Model
key_accessor :author, :receiver, :content, :published_at, :status_uri, :image_uri, :tweet_id
timestamps!
end