-
Notifications
You must be signed in to change notification settings - Fork 5
/
config.ru
114 lines (92 loc) · 2.46 KB
/
config.ru
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
require 'bundler/setup'
require 'rack-rewrite'
require 'multi_json'
require 'curb'
RACK_ENV = ENV['RACK_ENV']
MEETUP_API_KEY = ENV['MEETUP_API_KEY']
MEETUP_GROUP_ID = "3934632"
MEETUP_API_URL = "http://api.meetup.com/2"
MEETUP_QUERY = "key=#{MEETUP_API_KEY}&group_id=#{MEETUP_GROUP_ID}"
class NoCache
def initialize(app)
@app = app
end
def call(env)
@app.call(env).tap do |status, headers, body|
headers["Cache-Control"] = "no-store"
end
end
end
use NoCache
# TODO: Forgive the hacks below. Will clean up as time allows, as I'm
# trying to ship this demo for tomorrows meeting.
#
class MeetupAPI
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
if request.path =~ /api\/(.*)/
handle_api_request(request)
else
@app.call(env)
end
end
def handle_api_request(request)
if request.path =~ /api\/(.*)/
result = case $1
when 'meetings'
result = meetings
when 'members'
result = members
else
result = ""
end
end
[200, { 'Content-Type' => 'application/json' }, [result]]
end
def meetup_api_request(resource)
Curl::Easy.perform("#{MEETUP_API_URL}/#{resource}.json?#{MEETUP_QUERY}")
end
def meetings
response_body = meetup_api_request("events").body_str
parsed_response_body = MultiJson.decode(response_body)
results = parsed_response_body["results"].map do |result|
{
:id => result["id"],
:name => result["name"],
:event_url => result["event_url"]
}
end
MultiJson.encode({ :meetings => results })
rescue Exception => e
""
end
def members
response_body = meetup_api_request("members").body_str
parsed_response_body = MultiJson.decode(response_body)
results = parsed_response_body["results"].map do |result|
{
:id => result["id"],
:name => result["name"],
:link => result["link"],
:photo_link => result["photo"]["photo_link"],
:thumb_link => result["photo"]["thumb_link"]
}
end
MultiJson.encode({ :members => results })
rescue Exception => e
""
end
end
use MeetupAPI
use Rack::Rewrite do
rewrite %r{^(.*)\/$}, '$1/index.html'
end
unless RACK_ENV == 'production'
require 'rake-pipeline'
require 'rake-pipeline/middleware'
use Rake::Pipeline::Middleware, "Assetfile"
end
run Rack::Directory.new('public')