Skip to content

Commit 159be1e

Browse files
committed
refactoring
1 parent 4ab4fdf commit 159be1e

File tree

1 file changed

+15
-62
lines changed

1 file changed

+15
-62
lines changed

data.coffee

Lines changed: 15 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,90 +3,44 @@ rest = require 'restler'
33
date = require 'date-utils'
44
moment = require 'moment'
55
ical = require 'ical'
6-
7-
parseFeed = (feed) ->
8-
JSON.parse(parser.toJson(feed)).feed.entry
6+
cache = require './cache'
7+
Event = require './models/event'
8+
Tweet = require './models/tweet'
9+
Message = require './models/message'
910

1011
messageFeed = 'http://groups.google.com/group/kc-nodejs/feed/atom_v1_0_topics.xml'
1112
eventFeed = 'http://www.google.com/calendar/ical/nodekc.org_e8lg6hesldeld1utui23ebpg7k%40group.calendar.google.com/public/basic.ics'
1213
twitterFeed = 'http://search.twitter.com/search.json?q=%40nodekc&rpp=5'
1314

14-
lastMessageFetchResult = {}
15-
lastEventFetchResult = {}
16-
lastTwitterFetchResult = {}
17-
18-
determineDate = (start, end) ->
19-
start = moment(start)
20-
end = moment(end)
21-
date = moment(new Date(start.native())).add('hours', -6).format('ddd, MMM D')
22-
23-
return date if start.diff(end, 'days') == -1
24-
25-
date + start.add('hours', -6).format(' h:mma CST')
26-
27-
createEventUrl = (id) ->
28-
id = id.split('@')[0]
29-
id = new Buffer(id + ' e8lg6hesldeld1utui23ebpg7k@google.com').toString('base64').replace('==', '')
30-
"http://calendar.nodekc.org"
31-
32-
striphtml = (value) ->
33-
value.replace(/<(?:.|\n)*?>/gm, ' ')
34-
35-
timeAgo = (date) ->
36-
moment(new Date(date)).fromNow()
15+
parseFeed = (feed) ->
16+
JSON.parse(parser.toJson(feed)).feed.entry
3717

38-
formatContent = (content) ->
39-
content = striphtml(content).trim()
40-
content += '\u2026' if /[\w]$/i.test content
41-
content
18+
tenMinutes = 10 * 60 * 1000
4219

43-
fetchMessages = (cb) ->
44-
if lastMessageFetchResult.on? and lastMessageFetchResult.on > (new Date).addMinutes(-1)
45-
cb lastMessageFetchResult.value
46-
return
47-
20+
fetchMessages = cache.for tenMinutes, (cb) ->
4821
rest.get(messageFeed).on('complete', (data) ->
4922
data or= ''
5023

5124
messages = for x in parseFeed data
52-
{ subject: x.title.$t, body: formatContent(x.summary.$t), author: x.author.name, timeago: timeAgo(x.updated), url: x.link.href }
53-
54-
lastMessageFetchResult.value = messages
55-
lastMessageFetchResult.on = new Date
56-
25+
new Message x
5726
cb messages
58-
5927
)
6028

61-
fetchTweets = (cb) ->
62-
if lastTwitterFetchResult.on? and lastTwitterFetchResult.on > (new Date).addMinutes(-1)
63-
cb lastTwitterFetchResult.value
64-
return
65-
29+
fetchTweets = cache.for tenMinutes, (cb) ->
6630
rest.get(twitterFeed).on('complete', (data) ->
6731
data or= {}
6832
data.results or= []
6933
tweets = for x in data.results
70-
{ timeago: timeAgo(x.created_at), created_at: x.created_at, created_by: x.from_user, tweet: x.text }
71-
72-
lastTwitterFetchResult.value = tweets
73-
lastTwitterFetchResult.on = new Date
74-
34+
new Tweet x
35+
7536
cb tweets
7637
)
7738

78-
fetchEvents = (cb) ->
79-
if lastEventFetchResult.on? and lastEventFetchResult.on > (new Date).addMinutes(-1)
80-
cb lastEventFetchResult.value
81-
return
82-
39+
fetchEvents = cache.for tenMinutes, (cb) ->
8340
ical.fromURL eventFeed, {}, (err, calendar) ->
8441
calendar or= {}
8542
events = for k,v of calendar
86-
{title: v.summary, location: v.location, details: v.description, when: determineDate(v.start, v.end), url: createEventUrl v.uid }
87-
lastEventFetchResult.value = events
88-
lastEventFetchResult.on = new Date
89-
43+
new Event v
9044
cb events
9145

9246
module.exports = {
@@ -97,8 +51,7 @@ module.exports = {
9751
keys.forEach (key) =>
9852
this[key] res.data, (k) ->
9953
finished.push k
100-
next() if finished.length == keys.length
101-
54+
next() if finished.length == keys.length
10255
messages: (data, cb) ->
10356
fetchMessages (messages) ->
10457
data.messages = messages

0 commit comments

Comments
 (0)