generator-bat
Version:
BAT, the Backbone Application Template; a Yeoman generator collection created by marviq
224 lines (175 loc) • 5.46 kB
text/coffeescript
'use strict'
( ( factory ) ->
if typeof exports is 'object'
module.exports = factory(
require( 'backbone' )
require( 'bluebird' )
require( 'moment' )
require( './../apis/env.coffee' )
)
else if typeof define is 'function' and define.amd
define( [
'backbone'
'bluebird'
'moment'
'./../apis/env.coffee'
], factory )
return
)((
Backbone
Promise
moment
api
) ->
###*
# @author David Bouman
# @module App
# @submodule Models
###
## Stamped logs
##
log = ( args... ) -> console.log( '[BUILDINFO]', args... )
###*
# The current build's briefing information.
#
# @class BuildBrief
# @extends Backbone.Model
# @static
###
class BuildBriefModel extends Backbone.Model
###*
# List of [valid attribute names](#attrs).
#
# @property schema
# @type Array[String]
# @final
###
###*
# The value of the `BUILD_NUMBER` environment variable at the time of build.
# Expected to be provided from the ci/cd build job.
# Expected to be a count of the number of these build jobs triggered so far.
#
# If `BUILD_NUMBER` has not been set, this will instead be the number of builds triggered from a watched `grunt dev` run since invocation.
#
# @attribute buildNumber
# @type String
###
###*
# The value of the `BUILD_ID` environment variable at the time of build.
# Expected to be provided from the ci/cd build job.
# Expected to be reference-id of the build job meaningful to your ci/cd.
#
# @attribute buildId
# @type String
###
###*
# The value of the `GIT_COMMIT` environment variable at the time of build.
# Expected to be provided from the ci/cd build job.
# Expected to be the git commit hash that the ci/cd build job checked out.
#
# If `GIT_COMMIT` has not been set, this will be the string `working dir` instead.
#
# @attribute revision
# @type String
###
###*
# Human readable timestamp of when this build brief was generated. Indicative of when the build was run/completed.
#
# @attribute grunted
# @type String
###
###*
# The build's target-environment's name.
#
# Typically:
# * `production`
# * `acceptance`
# * `testing`
# * `local`
#
# @attribute environment
# @type String
###
###*
# Flag for signalling whether this was a debugging build.
#
# @attribute debugging
# @type Boolean
###
###*
# The app's name as listed in its `package.json`.
#
# @attribute name
# @type String
###
###*
# The app's version as listed in its `package.json`.
#
# See also: http://semver.org/
#
# @attribute version
# @type Semver
###
###*
# Unix timestamp of the build's run; equal to `grunted`
#
# @attribute timestamp
# @type Number
###
schema: [
'buildNumber'
'buildId'
'revision'
'grunted'
'environment'
'debugging'
'name'
'version'
'timestamp'
]
###*
# Service API endpoint; defined in the {{#crossLink 'EnvApi/buildBrief:attribute'}}`EnvApi`{{/crossLink}}.
#
# @property url
# @type ApiServiceModel
# @final
#
# @default '<EnvApi.url>/build.json'
###
url: api.get( 'buildBrief' )
###*
# @method initialize
# @protected
###
initialize: () ->
###*
# A `Promise` that the build's briefing data will have been loaded.
#
# @property initialized
# @type Promise
# @final
###
@initialized =
Promise.resolve( @fetch( cache: false ) ).then(
( attributes ) =>
### jshint unused: false ###
return @
( jqXHR ) ->
### jshint unused: false ###
message = 'Unable to load build briefing information.'
log( message )
throw new Error( message )
)
return
###*
# @method parse
# @protected
###
parse: ( data ) ->
key = 'timestamp'
data[ key ] = moment( data[ key ] )
return data
## Export singleton.
##
return new BuildBriefModel()
)