Skip to content

Commit 8675b26

Browse files
committed
removed dependency on building a c++ module for xml parsing
1 parent e10e6bd commit 8675b26

File tree

8 files changed

+61
-67
lines changed

8 files changed

+61
-67
lines changed

app.coffee

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#!/usr/bin/env node
2-
31
express = require 'express'
42
app = express.createServer()
53
port = process.env.PORT || 3000
@@ -23,6 +21,7 @@ app.set 'view engine', 'jade'
2321
app.get '/', data.load('tweets', 'messages', 'events', 'gitEvents'), (req, res) ->
2422
res.render 'layout', res.data
2523

24+
2625
app.listen port
2726

2827
console.log 'server listening on port ' + port

cache.coffee

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
module.exports = {
22
for: (expiration, work) ->
3-
lastResult = null
4-
lastModified = null
3+
last_result = null
4+
last_modified = null
55
return (complete) ->
6-
if lastModified? and (new Date).getTime() - expiration < lastModified
7-
complete lastResult
6+
if last_modified? and (new Date).getTime() - expiration < last_modified
7+
complete last_result
88
else
99
work (data) ->
10-
lastResult = data
11-
lastModified = (new Date).getTime()
12-
complete lastResult
10+
last_result = data
11+
last_modified = (new Date).getTime()
12+
complete last_result
1313
}

data.coffee

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ Tweet = require './models/tweet'
44
Message = require './models/message'
55
GitEvent = require './models/gitevent'
66

7-
tenMinutes = 10 * 60 * 1000
7+
ten_minutes = 10 * 60 * 1000
88

9-
fetchMessages = cache.for tenMinutes, (cb) ->
9+
fetchMessages = cache.for ten_minutes, (cb) ->
1010
Message.load cb
1111

12-
fetchTweets = cache.for tenMinutes, (cb) ->
12+
fetchTweets = cache.for ten_minutes, (cb) ->
1313
Tweet.load cb
1414

15-
fetchEvents = cache.for tenMinutes, (cb) ->
15+
fetchEvents = cache.for ten_minutes, (cb) ->
1616
Event.load cb
1717

18-
fetchGitEvents = cache.for tenMinutes, (cb) ->
18+
fetchGitEvents = cache.for ten_minutes, (cb) ->
1919
GitEvent.loadPushEvents 10, cb
2020

2121
module.exports = {
@@ -40,7 +40,6 @@ module.exports = {
4040
cb()
4141
gitEvents: (data, cb) ->
4242
fetchGitEvents (events) ->
43-
console.log events
4443
data.gitEvents = events
4544
cb()
4645
}

models/event.coffee

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
moment = require 'moment'
2-
parser = require 'xml2json'
32
rest = require 'restler'
43
ical = require 'ical'
54
require 'datejs'
65

7-
parseFeed = (feed) ->
8-
JSON.parse(parser.toJson(feed)).feed.entry
6+
event_feed = 'http://www.google.com/calendar/ical/nodekc.org_e8lg6hesldeld1utui23ebpg7k%40group.calendar.google.com/public/basic.ics'
97

108
formatDate = (start, end) ->
11-
start = moment(start.setTimezone("CST"))
12-
end = moment(end.setTimezone("CST"))
13-
9+
start = moment(start.setTimezone('CST'))
10+
end = moment(end.setTimezone('CST'))
1411
date = start.format('ddd, MMM D')
1512

1613
if end.diff(start, 'days') == 1 and start.hours() == 0
1714
return date
1815

1916
date + start.format(' h:mma CST')
2017

21-
eventFeed = 'http://www.google.com/calendar/ical/nodekc.org_e8lg6hesldeld1utui23ebpg7k%40group.calendar.google.com/public/basic.ics'
22-
2318
Event = (data) ->
2419
this.title = data.summary
2520
this.location = data.location
@@ -29,7 +24,7 @@ Event = (data) ->
2924
return
3025

3126
Event.load = (cb) ->
32-
ical.fromURL eventFeed, {}, (err, calendar) ->
27+
ical.fromURL event_feed, {}, (err, calendar) ->
3328
calendar or= {}
3429
events = for k,v of calendar
3530
new Event v

models/gitevent.coffee

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
rest = require 'restler'
22
moment = require 'moment'
33

4-
eventFeed = 'https://api.github.com/orgs/nodekc/events'
4+
event_feed_url = 'https://api.github.com/orgs/nodekc/events'
55

66
GitEvent = (data) ->
7-
console.log data
87
this.actor = data.actor.login
98
this.actor_gravatar_id = data.actor.gravatar_id
109
this.timeago = moment(new Date(data.created_at)).fromNow()
@@ -13,15 +12,14 @@ GitEvent = (data) ->
1312
return
1413

1514
GitEvent.loadPushEvents = (limit, cb) ->
16-
rest.get(eventFeed).on('complete', (data) ->
17-
18-
filtered = data.filter (x) ->
19-
x.type == "PushEvent"
15+
rest.get(event_feed_url)
16+
.on 'complete', (data) ->
17+
filtered = data.filter (x) ->
18+
x.type == "PushEvent"
2019

21-
gitEvents = for x in filtered[0...limit]
22-
new GitEvent x
20+
gitEvents = for x in filtered[0...limit]
21+
new GitEvent x
2322

24-
cb gitEvents
25-
)
23+
cb gitEvents
2624

2725
module.exports = GitEvent

models/message.coffee

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
moment = require 'moment'
2-
parser = require 'xml2json'
32
rest = require 'restler'
3+
FeedParser = require 'feedparser'
44

5-
messageFeed = 'http://groups.google.com/group/nodekc/feed/atom_v1_0_topics.xml'
6-
7-
parseFeed = (feed) ->
8-
JSON.parse(parser.toJson(feed)).feed.entry
5+
message_feed_url = 'http://groups.google.com/group/nodekc/feed/atom_v1_0_topics.xml'
96

107
striphtml = (value) ->
118
value.replace(/<(?:.|\n)*?>/gm, ' ')
@@ -16,22 +13,28 @@ formatContent = (content) ->
1613
content
1714

1815
Message = (data) ->
19-
this.subject = data.title.$t
20-
this.body = formatContent data.summary.$t
21-
this.author = data.author.name
22-
this.timeago = moment(new Date(data.updated)).fromNow()
23-
this.url = data.link.href
24-
this.author = data.author.name
16+
this.subject = data.title
17+
this.body = formatContent data.description
18+
this.timeago = moment(new Date(data.date)).fromNow()
19+
this.url = data.link
20+
this.author = data.author
2521
return
2622

2723
Message.load = (cb) ->
28-
rest.get(messageFeed).on('complete', (data) ->
29-
data or= ''
30-
31-
messages = for x in parseFeed data
32-
new Message x
33-
34-
cb messages
35-
)
24+
rest.get(message_feed_url)
25+
.on 'complete', (data) ->
26+
parser = new FeedParser()
27+
28+
articles = []
29+
30+
parser.on 'article', (article) ->
31+
articles.push(article)
32+
33+
parser.parseString data
34+
35+
messages = for x in articles
36+
new Message x
37+
38+
cb messages
3639

3740
module.exports = Message

models/tweet.coffee

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
moment = require 'moment'
22
rest = require 'restler'
3-
twitterFeed = 'http://search.twitter.com/search.json?q=%40nodekc&rpp=5'
3+
4+
twitter_feed_url = 'http://search.twitter.com/search.json?q=%40nodekc&rpp=5'
45

56
Tweet = (data) ->
67
this.created_by = data.from_user
@@ -10,14 +11,14 @@ Tweet = (data) ->
1011
return
1112

1213
Tweet.load = (cb) ->
13-
rest.get(twitterFeed).on('complete', (data) ->
14-
data or= {}
15-
data.results or= []
16-
17-
tweets = for x in data.results
18-
new Tweet x
19-
20-
cb tweets
21-
)
14+
rest.get(twitter_feed_url)
15+
.on 'complete', (data) ->
16+
data or= {}
17+
data.results or= []
18+
19+
tweets = for x in data.results
20+
new Tweet x
21+
22+
cb tweets
2223

2324
module.exports = Tweet

package.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
{
2-
"name": "node-kc",
2+
"name": "nodekc",
33
"version": "0.0.1",
44
"dependencies": {
55
"express": "~2.5.6",
66
"coffee-script": "latest",
77
"jade": "~v0.20.0",
88
"stylus": "~v0.22.5",
9-
"easysax": "latest",
109
"restler": "latest",
1110
"underscore.date": "latest",
12-
"xml2json": "latest",
1311
"ical": "latest",
1412
"moment": "latest",
15-
"datejs": "latest"
13+
"datejs": "latest",
14+
"feedparser": "0.9.1"
1615
}
1716
}
1817

0 commit comments

Comments
 (0)