forked from fixitsammie/global.hackathon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.coffee
104 lines (83 loc) · 2.63 KB
/
gulpfile.coffee
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
#
# # Gulpfile
#
path = require 'path'
gulp = require 'gulp'
concat = require 'gulp-concat'
tap = require 'gulp-tap'
util = require 'gulp-util'
# The handler for gulp-tap
tap_json = (file, t) ->
filename = path.basename file.path
if filename is 'README.template.md' then return
try
data = JSON.parse file.contents.toString()
catch e
util.log util.colors.red('Warning'), "Failed to parse json file.
Invalid JSON syntax. File: #{file.path}"
file.contents = new Buffer ''
return
str = format_json data, file.path
if not str?
util.log util.colors.red('Warning'), "The JSON data couldn't be formatted
into the table for an unknown reason. File: #{file.path}"
file.contents = new Buffer ''
return
# Everything is successful
file.contents = new Buffer str
# Format a member object into a link
format_member = (member) ->
"[#{member?.name}](https://koding.com/#{member?.koding})"
# Format a data object, and return a string to be
# appended to the readme
format_json = (data, filepath) ->
teamPathName = path.basename path.dirname filepath
# Get the lead, ahead of time.
teamLead = null
if data.members? and data.members instanceof Array
for member, i in data.members
if member.lead is true
teamLead = member
data.members.splice i, 1
data.members.unshift teamLead
break
output = '|'
# First column, #TeamName
if data.teamName?
output += " <a target='_blank'
href='https://twitter.com/home?status=Go team
%23#{data.teamName.replace /\W+/g, ""}
for @koding %23hackathon\
#{if teamLead?.twitter? then " led by @"+teamLead.twitter else ''}
https://koding.com/Hackathon'>
<img src='https://g.twimg.com/Twitter_logo_blue.png' height='14'/>
##{data.teamName}
</a> |"
else
output += " |"
# Second column, TeamMembers
if data.members? and data.members instanceof Array
for member in data.members
output += format_member member
output += " #{member.location}" if member.location?
output += " *(team lead)*" if member.lead is true
output += "<br>"
output += " |"
# Third column, TeamPage
if data.teamName? then teamName = data.teamName
else teamName = teamPathName
output += " [#{teamName}](./Teams/#{teamPathName}/ABOUT.md) |"
# Add a newline to end this row.
output += '\n'
# Return the final output
output
gulp.task 'run', ->
gulp.src [
'README.template.md'
'./Teams/**/TeamKoders/team.json'
'./Teams/**/team.json'
]
.pipe tap tap_json
.pipe concat 'README.md', newLine: ''
.pipe gulp.dest './'
gulp.task 'default', ['run']