From ec8d93f8cf98b5173a7be4acd641f6f76b23a411 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 14 Jan 2015 12:55:17 +0100 Subject: [PATCH] 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 --- assets/scripts/app/helpers/helpers.coffee | 243 +++++++++++++--------- 1 file changed, 139 insertions(+), 104 deletions(-) diff --git a/assets/scripts/app/helpers/helpers.coffee b/assets/scripts/app/helpers/helpers.coffee index 34db8467..a0651ee2 100644 --- a/assets/scripts/app/helpers/helpers.coffee +++ b/assets/scripts/app/helpers/helpers.coffee @@ -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, '
' - 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, '
' + 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 - "#{reference}" +_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 + "#{reference}" - _githubUserLink: (reference, username) -> - "#{reference}" +_githubUserRegexp = new RegExp("\\B@([\\w-]+)", 'g') - _githubCommitReferenceRegexp: new RegExp("([\\w-]+)?\\/([\\w-]+)?@([0-9A-Fa-f]+)", 'g') +_githubUserLink = (reference, username) -> + "#{reference}" - _githubCommitReferenceLink: (reference, current, matched) -> - owner = matched.owner || current.owner - repo = matched.repo || current.repo - url = "#{Travis.Urls.githubCommit("#{owner}/#{repo}", matched.sha)}" - "#{reference}" +_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)}" + "#{reference}" - _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 = '\''' - 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, '&').replace(//g, '>' +_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 = '\''' + 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, '&').replace(//g, '>' + +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