Refactor Travis.Helpers to prepare it for ES6 modules

In order to make it easy to switch to ember-cli I'm starting changing a series
of refactorings that will prepare the codebase to the switch. Here I'm:

1. Assign all of the external objects and functions to variables in order to
   make it easy to change them to imports in the feature
2. Extract functions from Travis.Helpers into local functions and create the
   object at the end of file to prepare it for exporting
This commit is contained in:
Piotr Sarnacki 2015-01-14 12:55:17 +01:00
parent 2b86e93d13
commit ec8d93f8cf

View File

@ -1,131 +1,166 @@
require 'config/emoij'
@Travis.Helpers =
COLORS:
default: 'yellow'
passed: 'green'
failed: 'red'
errored: 'gray'
canceled: 'gray'
config_keys_map = Travis.CONFIG_KEYS_MAP
config = Travis.config
githubCommitUrl = Travis.Urls.githubCommit
currentDate = Travis.currentDate
timeago = $.timeago
intersect = $.intersect
only = $.only
mapObject = $.map
compact: (object) ->
result = {}
(result[key] = value unless $.isEmpty(value)) for key, value of object || {}
result
colors = {
default: 'yellow'
passed: 'green'
failed: 'red'
errored: 'gray'
canceled: 'gray'
}
safe: (string) ->
new Handlebars.SafeString(string)
compact = (object) ->
result = {}
(result[key] = value unless Ember.isEmpty(value)) for key, value of object || {}
result
colorForState: (state) ->
Travis.Helpers.COLORS[state] || Travis.Helpers.COLORS['default']
safe = (string) ->
new Ember.Handlebars.SafeString(string)
formatCommit: (sha, branch) ->
Travis.Helpers.formatSha(sha) + if branch then " (#{branch})" else ''
colorForState = (state) ->
colors[state] || colors['default']
formatSha: (sha) ->
(sha || '').substr(0, 7)
formatCommit = (sha, branch) ->
formatSha(sha) + if branch then " (#{branch})" else ''
formatConfig: (config) ->
config = $.only config, Object.keys(Travis.CONFIG_KEYS_MAP)
values = $.map config, (value, key) ->
value = (if value && value.join then value.join(', ') else value) || ''
if key == 'rvm' && "#{value}".match(/^\d+$/)
value = "#{value}.0"
'%@: %@'.fmt Travis.CONFIG_KEYS_MAP[key], value
if values.length == 0 then '-' else values.join(', ')
formatSha = (sha) ->
(sha || '').substr(0, 7)
formatMessage: (message, options) ->
message = message || ''
message = message.split(/\n/)[0] if options.short
message = @_emojize(@_escape(message))
if !!options.repo
message = @githubify(message, options.repo.get('owner'), options.repo.get('name'))
if !!options.pre
message = message.replace /\n/g, '<br/>'
message
formatConfig = (config) ->
config = only config, Object.keys(config_keys_map)
values = mapObject config, (value, key) ->
value = (if value && value.join then value.join(', ') else value) || ''
if key == 'rvm' && "#{value}".match(/^\d+$/)
value = "#{value}.0"
'%@: %@'.fmt config_keys_map[key], value
if values.length == 0 then '-' else values.join(', ')
pathFrom: (url) ->
(url || '').split('/').pop()
formatMessage = (message, options) ->
message = message || ''
message = message.split(/\n/)[0] if options.short
message = @_emojize(@_escape(message))
if !!options.repo
message = @githubify(message, options.repo.get('owner'), options.repo.get('name'))
if !!options.pre
message = message.replace /\n/g, '<br/>'
message
timeAgoInWords: (date) ->
$.timeago.distanceInWords date
pathFrom = (url) ->
(url || '').split('/').pop()
durationFrom: (started, finished) ->
started = started and @_toUtc(new Date(@_normalizeDateString(started)))
finished = if finished then @_toUtc(new Date(@_normalizeDateString(finished))) else @_nowUtc()
if started && finished then Math.round((finished - started) / 1000) else 0
timeAgoInWords = (date) ->
timeago.distanceInWords date
timeInWords: (duration) ->
days = Math.floor(duration / 86400)
hours = Math.floor(duration % 86400 / 3600)
minutes = Math.floor(duration % 3600 / 60)
seconds = duration % 60
durationFrom = (started, finished) ->
started = started and @_toUtc(new Date(@_normalizeDateString(started)))
finished = if finished then @_toUtc(new Date(@_normalizeDateString(finished))) else @_nowUtc()
if started && finished then Math.round((finished - started) / 1000) else 0
if days > 0
'more than 24 hrs'
else
result = []
result.push hours + ' hr' if hours is 1
result.push hours + ' hrs' if hours > 1
result.push minutes + ' min' if minutes > 0
result.push seconds + ' sec' if seconds > 0
if result.length > 0 then result.join(' ') else '-'
timeInWords = (duration) ->
days = Math.floor(duration / 86400)
hours = Math.floor(duration % 86400 / 3600)
minutes = Math.floor(duration % 3600 / 60)
seconds = duration % 60
githubify: (text, owner, repo) ->
self = this
text = text.replace @_githubReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedNumber) ->
self._githubReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, number: matchedNumber } )
text = text.replace @_githubUserRegexp, (reference, username) ->
self._githubUserLink(reference, username)
text = text.replace @_githubCommitReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedSHA) ->
self._githubCommitReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, sha: matchedSHA })
text
if days > 0
'more than 24 hrs'
else
result = []
result.push hours + ' hr' if hours is 1
result.push hours + ' hrs' if hours > 1
result.push minutes + ' min' if minutes > 0
result.push seconds + ' sec' if seconds > 0
if result.length > 0 then result.join(' ') else '-'
_githubReferenceRegexp: new RegExp("([\\w-]+)?\\/?([\\w-]+)?(?:#|gh-)(\\d+)", 'g')
githubify = (text, owner, repo) ->
self = this
text = text.replace @_githubReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedNumber) ->
self._githubReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, number: matchedNumber } )
text = text.replace @_githubUserRegexp, (reference, username) ->
self._githubUserLink(reference, username)
text = text.replace @_githubCommitReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedSHA) ->
self._githubCommitReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, sha: matchedSHA })
text
_githubReferenceLink: (reference, current, matched) ->
owner = matched.owner || current.owner
repo = matched.repo || current.repo
"<a href=\"#{Travis.config.source_endpoint}/#{owner}/#{repo}/issues/#{matched.number}\">#{reference}</a>"
_githubReferenceRegexp = new RegExp("([\\w-]+)?\\/?([\\w-]+)?(?:#|gh-)(\\d+)", 'g')
_githubUserRegexp: new RegExp("\\B@([\\w-]+)", 'g')
_githubReferenceLink = (reference, current, matched) ->
owner = matched.owner || current.owner
repo = matched.repo || current.repo
"<a href=\"#{config.source_endpoint}/#{owner}/#{repo}/issues/#{matched.number}\">#{reference}</a>"
_githubUserLink: (reference, username) ->
"<a href=\"#{Travis.config.source_endpoint}/#{username}\">#{reference}</a>"
_githubUserRegexp = new RegExp("\\B@([\\w-]+)", 'g')
_githubCommitReferenceRegexp: new RegExp("([\\w-]+)?\\/([\\w-]+)?@([0-9A-Fa-f]+)", 'g')
_githubUserLink = (reference, username) ->
"<a href=\"#{config.source_endpoint}/#{username}\">#{reference}</a>"
_githubCommitReferenceLink: (reference, current, matched) ->
owner = matched.owner || current.owner
repo = matched.repo || current.repo
url = "#{Travis.Urls.githubCommit("#{owner}/#{repo}", matched.sha)}"
"<a href=\"#{url}\">#{reference}</a>"
_githubCommitReferenceRegexp = new RegExp("([\\w-]+)?\\/([\\w-]+)?@([0-9A-Fa-f]+)", 'g')
_normalizeDateString: (string) ->
if window.JHW
string = string.replace('T', ' ').replace(/-/g, '/')
string = string.replace('Z', '').replace(/\..*$/, '')
string
_githubCommitReferenceLink = (reference, current, matched) ->
owner = matched.owner || current.owner
repo = matched.repo || current.repo
url = "#{githubCommitUrl("#{owner}/#{repo}", matched.sha)}"
"<a href=\"#{url}\">#{reference}</a>"
_nowUtc: ->
@_toUtc Travis.currentDate()
_normalizeDateString = (string) ->
if window.JHW
string = string.replace('T', ' ').replace(/-/g, '/')
string = string.replace('Z', '').replace(/\..*$/, '')
string
_toUtc: (date) ->
Date.UTC date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()
_nowUtc = ->
@_toUtc currentDate()
_emojize: (text) ->
emojis = text.match(/:\S+?:/g)
if emojis isnt null
$.each emojis.uniq(), (ix, emoji) ->
strippedEmoji = emoji.substring(1, emoji.length - 1)
unless EmojiDictionary.indexOf(strippedEmoji) is -1
image = '<img class=\'emoji\' title=\'' + emoji + '\' alt=\'' + emoji + '\' src=\'' + '/images/emoji/' + strippedEmoji + '.png\'/>'
text = text.replace(new RegExp(emoji, 'g'), image)
text
_toUtc = (date) ->
Date.UTC date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()
_escape: (text) ->
text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace />/g, '&gt;'
_emojize = (text) ->
emojis = text.match(/:\S+?:/g)
if emojis isnt null
emojis.uniq().each (emoji, ix) ->
strippedEmoji = emoji.substring(1, emoji.length - 1)
unless EmojiDictionary.indexOf(strippedEmoji) is -1
image = '<img class=\'emoji\' title=\'' + emoji + '\' alt=\'' + emoji + '\' src=\'' + '/images/emoji/' + strippedEmoji + '.png\'/>'
text = text.replace(new RegExp(emoji, 'g'), image)
text
configKeys: (config) ->
return [] unless config
$.intersect($.keys(config), Object.keys(Travis.CONFIG_KEYS_MAP))
_escape = (text) ->
text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace />/g, '&gt;'
configKeys = (config) ->
return [] unless config
intersect(Object.keys(config), Object.keys(config_keys_map))
Travis.Helpers =
configKeys: configKeys
_escape: _escape
_emojize: _emojize
_toUtc: _toUtc
_nowUtc: _nowUtc
_normalizeDateString: _normalizeDateString
_githubCommitReferenceLink: _githubCommitReferenceLink
_githubCommitReferenceRegexp: _githubCommitReferenceRegexp
_githubUserLink: _githubUserLink
_githubUserRegexp: _githubUserRegexp
_githubReferenceLink: _githubReferenceLink
_githubReferenceRegexp: _githubReferenceRegexp
githubify: githubify
timeInWords: timeInWords
durationFrom: durationFrom
timeAgoInWords: timeAgoInWords
pathFrom: pathFrom
formatMessage: formatMessage
formatConfig: formatConfig
formatSha: formatSha
formatCommit: formatCommit
colorForState: colorForState
safe: safe
compact: compact