Index: quiver/lib/src/time/clock.dart |
diff --git a/quiver/lib/src/time/clock.dart b/quiver/lib/src/time/clock.dart |
deleted file mode 100644 |
index dcc8a2c10a75d383c0be88ac3d3e2ab6c2536c73..0000000000000000000000000000000000000000 |
--- a/quiver/lib/src/time/clock.dart |
+++ /dev/null |
@@ -1,180 +0,0 @@ |
-// Copyright 2013 Google Inc. All Rights Reserved. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
- |
-part of quiver.time; |
- |
-/// Returns current time. |
-typedef DateTime TimeFunction(); |
- |
-/// Return current system time. |
-DateTime systemTime() => new DateTime.now(); |
- |
-/// Days in a month. This array uses 1-based month numbers, i.e. January is |
-/// the 1-st element in the array, not the 0-th. |
-const _DAYS_IN_MONTH = |
- const [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; |
- |
-int _daysInMonth(int year, int month) => (month == DateTime.FEBRUARY && |
- _isLeapYear(year)) ? 29 : _DAYS_IN_MONTH[month]; |
- |
-bool _isLeapYear(int year) => |
- (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)); |
- |
-/// Takes a [date] that may be outside the allowed range of dates for a given |
-/// [month] in a given [year] and returns the closest date that is within the |
-/// allowed range. |
-/// |
-/// For example: |
-/// |
-/// February 31, 2013 => February 28, 2013 |
-/// |
-/// When jumping from month to month or from leap year to common year we may |
-/// end up in a month that has fewer days than the month we are jumping from. |
-/// In that case it is impossible to preserve the exact date. So we "clamp" the |
-/// date value to fit within the month. For example, jumping from March 31 one |
-/// month back takes us to February 28 (or 29 during a leap year), as February |
-/// doesn't have 31-st date. |
-int _clampDate(int date, int year, int month) => |
- date.clamp(1, _daysInMonth(year, month)); |
- |
-/// Provides points in time relative to the current point in time, for example: |
-/// now, 2 days ago, 4 weeks from now, etc. |
-/// |
-/// This class is designed with testability in mind. The current point in time |
-/// (or [now()]) is defined by a [TimeFunction]. By supplying your own time |
-/// function or by using fixed clock (see constructors), you can control |
-/// exactly what time a [Clock] returns and base your test expectations on |
-/// that. See specific constructors for how to supply time functions. |
-class Clock { |
- final TimeFunction _time; |
- |
- /// Creates a clock based on the given [timeFunc]. |
- /// |
- /// If [timeFunc] is not provided, creates [Clock] based on system clock. |
- /// |
- /// Custom [timeFunc] can be useful in unit-tests. For example, you might |
- /// want to control what time it is now and set date and time expectations in |
- /// your test cases. |
- const Clock([TimeFunction timeFunc = systemTime]) : _time = timeFunc; |
- |
- /// Creates [Clock] that returns fixed [time] value. Useful in unit-tests. |
- Clock.fixed(DateTime time) : _time = (() => time); |
- |
- /// Returns current time. |
- DateTime now() => _time(); |
- |
- /// Returns the point in time [Duration] amount of time ago. |
- DateTime agoBy(Duration duration) => now().subtract(duration); |
- |
- /// Returns the point in time [Duration] amount of time from now. |
- DateTime fromNowBy(Duration duration) => now().add(duration); |
- |
- /// Returns the point in time that's given amount of time ago. The |
- /// amount of time is the sum of individual parts. Parts are compatible with |
- /// ones defined in [Duration]. |
- DateTime ago({int days: 0, int hours: 0, int minutes: 0, int seconds: 0, |
- int milliseconds: 0, int microseconds: 0}) => agoBy(new Duration( |
- days: days, |
- hours: hours, |
- minutes: minutes, |
- seconds: seconds, |
- milliseconds: milliseconds, |
- microseconds: microseconds)); |
- |
- /// Returns the point in time that's given amount of time from now. The |
- /// amount of time is the sum of individual parts. Parts are compatible with |
- /// ones defined in [Duration]. |
- DateTime fromNow({int days: 0, int hours: 0, int minutes: 0, int seconds: 0, |
- int milliseconds: 0, int microseconds: 0}) => fromNowBy(new Duration( |
- days: days, |
- hours: hours, |
- minutes: minutes, |
- seconds: seconds, |
- milliseconds: milliseconds, |
- microseconds: microseconds)); |
- |
- /// Return the point in time [micros] microseconds ago. |
- DateTime microsAgo(int micros) => ago(microseconds: micros); |
- |
- /// Return the point in time [micros] microseconds from now. |
- DateTime microsFromNow(int micros) => fromNow(microseconds: micros); |
- |
- /// Return the point in time [millis] milliseconds ago. |
- DateTime millisAgo(int millis) => ago(milliseconds: millis); |
- |
- /// Return the point in time [millis] milliseconds from now. |
- DateTime millisFromNow(int millis) => fromNow(milliseconds: millis); |
- |
- /// Return the point in time [seconds] ago. |
- DateTime secondsAgo(int seconds) => ago(seconds: seconds); |
- |
- /// Return the point in time [seconds] from now. |
- DateTime secondsFromNow(int seconds) => fromNow(seconds: seconds); |
- |
- /// Return the point in time [minutes] ago. |
- DateTime minutesAgo(int minutes) => ago(minutes: minutes); |
- |
- /// Return the point in time [minutes] from now. |
- DateTime minutesFromNow(int minutes) => fromNow(minutes: minutes); |
- |
- /// Return the point in time [hours] ago. |
- DateTime hoursAgo(int hours) => ago(hours: hours); |
- |
- /// Return the point in time [hours] from now. |
- DateTime hoursFromNow(int hours) => fromNow(hours: hours); |
- |
- /// Return the point in time [days] ago. |
- DateTime daysAgo(int days) => ago(days: days); |
- |
- /// Return the point in time [days] from now. |
- DateTime daysFromNow(int days) => fromNow(days: days); |
- |
- /// Return the point in time [weeks] ago. |
- DateTime weeksAgo(int weeks) => ago(days: 7 * weeks); |
- |
- /// Return the point in time [weeks] from now. |
- DateTime weeksFromNow(int weeks) => fromNow(days: 7 * weeks); |
- |
- /// Return the point in time [months] ago on the same date. |
- DateTime monthsAgo(int months) { |
- var time = now(); |
- var m = (time.month - months - 1) % 12 + 1; |
- var y = time.year - (months + 12 - time.month) ~/ 12; |
- var d = _clampDate(time.day, y, m); |
- return new DateTime( |
- y, m, d, time.hour, time.minute, time.second, time.millisecond); |
- } |
- |
- /// Return the point in time [months] from now on the same date. |
- DateTime monthsFromNow(int months) { |
- var time = now(); |
- var m = (time.month + months - 1) % 12 + 1; |
- var y = time.year + (months + time.month - 1) ~/ 12; |
- var d = _clampDate(time.day, y, m); |
- return new DateTime( |
- y, m, d, time.hour, time.minute, time.second, time.millisecond); |
- } |
- |
- /// Return the point in time [years] ago on the same date. |
- DateTime yearsAgo(int years) { |
- var time = now(); |
- var y = time.year - years; |
- var d = _clampDate(time.day, y, time.month); |
- return new DateTime(y, time.month, d, time.hour, time.minute, time.second, |
- time.millisecond); |
- } |
- |
- /// Return the point in time [years] from now on the same date. |
- DateTime yearsFromNow(int years) => yearsAgo(-years); |
-} |