Skip to content

Commit

Permalink
merge() and locking to moment 1.4
Browse files Browse the repository at this point in the history
  • Loading branch information
icambron committed Apr 5, 2012
1 parent 0e75493 commit 2473454
Show file tree
Hide file tree
Showing 9 changed files with 195 additions and 26 deletions.
Empty file modified bin/moment.min.js
100644 → 100755
Empty file.
21 changes: 20 additions & 1 deletion bin/twix.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion bin/twix.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file modified lib/moment.min.js
100644 → 100755
Empty file.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"author": "Isaac Cambron",
"keywords": ["twix", "date", "date range"],
"dependencies": {
"moment": ">=1.4"
"moment": "1.4"
},
"devDependencies": {
"mocha" : "0.8.x",
Expand Down
29 changes: 24 additions & 5 deletions src/twix.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ if typeof moment == "undefined"

class Twix
constructor: (start, end, allDay) ->

startM = moment start
endM = moment end

@start = if startM.zone() == moment().zone then startM else moment(startM.valueOf())
@end = if endM.zone() == moment().zone then endM else moment(endM.valueOf())

@allDay = allDay
#@start = moment start
#@end = moment end

@allDay = allDay || false

sameDay: ->
@start.year() == @end.year() &&
Expand All @@ -28,6 +29,8 @@ class Twix
countDays: ->
startDate = @start.sod()
endDate = @end.sod()
console.log "start: #{startDate.toString()}"
console.log "end: #{endDate.toString()}"
endDate.diff(startDate, 'days') + 1

daysIn: (minHours) ->
Expand Down Expand Up @@ -62,10 +65,26 @@ class Twix

engulfs: (other) -> @trueStart() <= other.trueStart() && @trueEnd() >= other.trueEnd()

trueStart: -> if @allDay then @start.sod() else @start
merge: (other) ->
allDay = @allDay && other.allDay
if allDay
newStart = if @start < other.start then @start else other.start
newEnd = if @end > other.end then @end else other.end
else
newStart = if @trueStart() < other.trueStart() then @trueStart() else other.trueStart()
newEnd = if @trueEnd() > other.trueEnd() then @trueEnd() else other.trueEnd()

new Twix(newStart, newEnd, allDay)

trueStart: -> if @allDay then @start.sod() else @start
trueEnd: -> if @allDay then @end.eod() else @end


equals: (other) ->
(other instanceof Twix) &&
@allDay == other.allDay &&
@start.valueOf() == other.start.valueOf() &&
@end.valueOf() == other.end.valueOf()

format: (inopts) ->
options =
groupMeridiems: true
Expand Down
83 changes: 75 additions & 8 deletions test/bin/twix.spec.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
(function() {
var Twix, assertEqual, moment, thatDay, thisYear, tomorrow, yesterday;
var Twix, assertDeepEqual, assertEqual, moment, thatDay, thisYear, tomorrow, yesterday;

if (typeof module !== "undefined") {
moment = require("moment");
assertEqual = require('assert').equal;
assertDeepEqual = require('assert').deepEqual;
Twix = require("../../bin/twix");
} else {
moment = window.moment;
Twix = window.Twix;
assertEqual = function(a, b) {
if (a !== b) throw new Error("Found " + b + ", expected " + a);
};
assertDeepEqual = function(a, b) {
if (!a.equals(b)) throw new Error("Found " + b + ", expected " + a);
};
}

thisYear = function(partial, time) {
Expand Down Expand Up @@ -89,12 +93,14 @@
return assertEqual(first.date(), second.date());
};
it("provides 1 day if the range includes 1 day", function() {
var end, iter, range, start;
var end, iter, next, range, start;
start = thisYear("5/25", "3:00");
end = thisYear("5/25", "14:00");
range = new Twix(start, end);
iter = range.daysIn();
assertSameDay(thisYear("5/25"), iter.next());
next = iter.next();
console.log(next);
assertSameDay(thisYear("5/25"), next);
return assertEqual(null, iter.next());
});
it("provides 2 days if the range crosses midnight", function() {
Expand Down Expand Up @@ -122,7 +128,7 @@
})();
return assertEqual(366, results.length);
});
return describe("with a minimum time", function() {
return it("doesn't generate extra days when there's a min time", function() {
var end, iter, range, start;
start = thisYear("5/25", "16:00");
end = thisYear("5/26", "3:00");
Expand Down Expand Up @@ -198,10 +204,10 @@
return assertNoOverlap(someTime, thatDay("3:30", "4:30"));
});
it("returns true for a partially later event", function() {
return assertOverlap(someTime, thatDay("4:30", "6:30"));
return assertOverlap(someTime, thatDay("8:00", "11:30"));
});
it("returns true for a partially earlier event", function() {
return assertOverlap(someTime, thatDay("8:00", "11:30"));
return assertOverlap(someTime, thatDay("4:30", "6:30"));
});
it("returns true for an engulfed event", function() {
return assertOverlap(someTime, thatDay("6:30", "7:30"));
Expand Down Expand Up @@ -264,10 +270,10 @@
return assertNotEngulfing(someTime, thatDay("3:30", "4:30"));
});
it("returns true for a partially later event", function() {
return assertNotEngulfing(someTime, thatDay("4:30", "6:30"));
return assertNotEngulfing(someTime, thatDay("8:00", "11:30"));
});
it("returns true for a partially earlier event", function() {
return assertNotEngulfing(someTime, thatDay("8:00", "11:30"));
return assertNotEngulfing(someTime, thatDay("4:30", "6:30"));
});
it("returns true for an engulfed event", function() {
return assertEngulfing(someTime, thatDay("6:30", "7:30"));
Expand Down Expand Up @@ -312,6 +318,67 @@
});
});

describe("merge()", function() {
var someDays, someTime;
someTime = thatDay("5:30", "8:30");
someDays = new Twix("5/24/1982", "5/25/1982", true);
describe("non-all-day events", function() {
it("spans a later time", function() {
return assertDeepEqual(thatDay("5:30", "11:30"), someTime.merge(thatDay("9:30", "11:30")));
});
it("spans an earlier time", function() {
return assertDeepEqual(thatDay("3:30", "8:30"), someTime.merge(thatDay("3:30", "4:30")));
});
it("spans a partially later event", function() {
return assertDeepEqual(thatDay("5:30", "11:30"), someTime.merge(thatDay("8:00", "11:30")));
});
it("spans a partially earlier event", function() {
return assertDeepEqual(thatDay("4:30", "8:30"), someTime.merge(thatDay("4:30", "6:30")));
});
it("isn't affected by engulfed events", function() {
return assertDeepEqual(someTime, someTime.merge(thatDay("6:30", "7:30")));
});
return it("becomes an engulfing event", function() {
return assertDeepEqual(thatDay("4:30", "9:30"), someTime.merge(thatDay("4:30", "9:30")));
});
});
describe("one all-day event", function() {
it("spans a later time", function() {
console.log(someDays.trueEnd());
return assertDeepEqual(new Twix("5/24/1982 00:00", "5/26/1982 7:00"), someDays.merge(new Twix("5/24/1982 20:00", "5/26/1982 7:00")));
});
it("spans an earlier time", function() {
return assertDeepEqual(new Twix("5/23/1982 8:00", moment("5/25/1982").eod()), someDays.merge(new Twix("5/23/1982 8:00", "5/25/1982 7:00")));
});
it("isn't affected by engulfing events", function() {
return assertDeepEqual(new Twix("5/24/1982 00:00", moment("5/25/1982").eod()), someDays.merge(someTime));
});
return it("becomes an engulfing event", function() {
return assertDeepEqual(new Twix("5/23/1982 20:00", "5/26/1982 8:30"), someDays.merge(new Twix("5/23/1982 20:00", "5/26/1982 8:30")));
});
});
return describe("two all-day events", function() {
it("spans a later time", function() {
return assertDeepEqual(new Twix("5/24/1982", "5/28/1982", true), someDays.merge(new Twix("5/27/1982", "5/28/1982", true)));
});
it("spans an earlier time", function() {
return assertDeepEqual(new Twix("5/21/1982", "5/25/1982", true), someDays.merge(new Twix("5/21/1982", "5/22/1982", true)));
});
it("spans a partially later time", function() {
return assertDeepEqual(new Twix("5/24/1982", "5/26/1982", true), someDays.merge(new Twix("5/25/1982", "5/26/1982", true)));
});
it("spans a partially earlier time", function() {
return assertDeepEqual(new Twix("5/23/1982", "5/25/1982", true), someDays.merge(new Twix("5/23/1982", "5/25/1982", true)));
});
it("isn't affected by engulfing events", function() {
return assertDeepEqual(someDays, someDays.merge(thatDay()));
});
return it("becomes an engulfing event", function() {
return assertDeepEqual(someDays, thatDay().merge(someDays));
});
});
});

describe("format()", function() {
var test;
test = function(name, t) {
Expand Down
6 changes: 3 additions & 3 deletions test/test.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="https://raw.github.com/visionmedia/mocha/master/mocha.css" />
<script src="https://raw.github.com/visionmedia/mocha/master/mocha.js"></script>
<script src="https://raw.github.com/timrwood/moment/master/moment.js"></script>
<script src="../lib/moment.js"></script>
<script>mocha.setup('bdd')</script>
<script src="../lib/twix.js"></script>
<script src="lib/twix.spec.js"></script>
<script src="../bin/twix.js"></script>
<script src="bin/twix.spec.js"></script>
<script>
$(function(){
mocha.run();
Expand Down
Loading

0 comments on commit 2473454

Please sign in to comment.