Skip to content

Instantly share code, notes, and snippets.

@djforth
Created December 7, 2013 21:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save djforth/7849436 to your computer and use it in GitHub Desktop.
Save djforth/7849436 to your computer and use it in GitHub Desktop.
Sets a Release Date
define (require)->
_ = require('underscore')
class ReleaseDate
release:0
current_date:0
differance:0
release_id:"release_date"
release_massage:""
MONTHS:['January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November', 'December']
SHORT_MONTHS:['Jan', 'Feb', 'March', 'April', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
MESSAGES:['At cinemas', "At cinemas tomorrow", "At cinemas today", "At cinemas now"]
DAY:24 * 60 * 60 * 1000
constructor:(date, relID, initalize=true)->
@current_date = new Date()
@release = new Date(date)
@release_id = relID if _.isString(relID)
if initalize
@init()
addReleaseMessage:(message)->
el = document.getElementById(@release_id)
el.innerHTML=message
getDate:(date)->
date.getDate()
getDifferance:()->
@release.getTime() - @current_date.getTime()
getMonth:(date, short=true)->
array = if short then @SHORT_MONTHS else @MONTHS
array[date.getMonth()]
init:()->
dif = @getDifferance()
state = @stateMachine(dif)
m = @setMessage(state)
@addReleaseMessage(m)
setMessage:(state)->
switch state
when 0
@MESSAGES[state] + " " + @getMonth(@release) + " " + @getDate(@release)
when -1
@MESSAGES[0] + " " + @getMonth(@release) + " " + @getDate(@release)
else @MESSAGES[state]
stateMachine:(dif)->
return -1 if !_.isNumber(dif)
state = switch
when dif <= -@DAY then 3
when dif <= 0 && dif > -@DAY then 2
when dif > 0 && dif <= @DAY then 1
when dif > @DAY then 0
else -1
describe "Release", ->
beforeEach ->
flag = false
@DAY = 24 * 60 * 60 * 1000
@release = null
that = @
# @feature = new release()
require ['release/release'], (Release) ->
flag = true
# that.Rel = Release
that.release = new Release('June 7, 2013', null, false)
waitsFor ->
flag
it 'It should exist', ->
expect(@release).toBeDefined()
describe "constuctor", ->
it "Set the current date", ->
expect(@release.current_date).toBeDefined()
it 'Set Release date', ->
rel_date = new Date('June 7, 2013')
expect(@release.release).toEqual(rel_date)
describe 'get date text', ->
beforeEach ->
@rel_date = new Date('January 28, 2014')
it "should return long month", ->
month = @release.getMonth(@rel_date, false)
expect(month).toEqual("January")
it "should return short month", ->
month = @release.getMonth(@rel_date, true)
expect(month).toEqual("Jan")
it "should return date", ->
month = @release.getDate(@rel_date)
expect(month).toEqual(28)
describe "should set release date difference functions", ->
beforeEach ->
@release.current_date = new Date('January 27, 2014')
@release.release = new Date('January 28, 2014')
it "should return the difference between release date and current date", ->
dif = @release.getDifferance()
expect(dif).toEqual(@DAY)
it "should return the correct states", ->
expect(@release.stateMachine(-(@DAY*2))).toBe(3)
expect(@release.stateMachine(-200)).toBe(2)
expect(@release.stateMachine(200)).toBe(1)
expect(@release.stateMachine(@DAY*2)).toBe(0)
expect(@release.stateMachine(null)).toBe(-1)
describe "should return the correct release message", ->
beforeEach ->
@release.release = new Date('January 28, 2014')
it 'should return the correct messages', ->
m = @release.setMessage(0)
console.log "test", m
expect(@release.setMessage(0)).toMatch('At cinemas Jan 28')
expect(@release.setMessage(-1)).toMatch('At cinemas Jan 28')
expect(@release.setMessage(1)).toMatch("At cinemas tomorrow")
expect(@release.setMessage(2)).toMatch("At cinemas today")
describe 'Should add message', ->
beforeEach ->
loadFixtures('../../../fixtures/release.html')
@holder = $("#release_date")
it 'should add the correct message to DOM', ->
@release.addReleaseMessage("Test message")
expect(@holder.text()).toMatch("Test message")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment