time_math2 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -3
- data/README.md +135 -40
- data/lib/time_math.rb +50 -11
- data/lib/time_math/backports.rb +8 -0
- data/lib/time_math/op.rb +209 -0
- data/lib/time_math/resamplers.rb +76 -0
- data/lib/time_math/sequence.rb +159 -49
- data/lib/time_math/units/base.rb +184 -70
- data/lib/time_math/units/day.rb +2 -2
- data/lib/time_math/units/month.rb +4 -4
- data/lib/time_math/units/simple.rb +1 -1
- data/lib/time_math/units/week.rb +9 -6
- data/lib/time_math/units/year.rb +2 -2
- data/lib/time_math/util.rb +10 -0
- data/lib/time_math/version.rb +1 -1
- metadata +6 -4
- data/lib/time_math/core_ext.rb +0 -52
- data/lib/time_math/span.rb +0 -53
data/lib/time_math/units/day.rb
CHANGED
@@ -16,14 +16,14 @@ module TimeMath
|
|
16
16
|
|
17
17
|
protected
|
18
18
|
|
19
|
-
def
|
19
|
+
def _succ(tm)
|
20
20
|
return generate(tm, year: tm.year + 1, month: 1) if tm.month == 12
|
21
21
|
|
22
22
|
t = generate(tm, month: tm.month + 1)
|
23
23
|
fix_month(t, t.month + 1)
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def _prev(tm)
|
27
27
|
return generate(tm, year: tm.year - 1, month: 12) if tm.month == 1
|
28
28
|
|
29
29
|
t = generate(tm, month: tm.month - 1)
|
@@ -31,11 +31,11 @@ module TimeMath
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def _advance(tm, steps)
|
34
|
-
steps.times.inject(tm) { |t|
|
34
|
+
steps.to_i.times.inject(tm) { |t| _succ(t) }
|
35
35
|
end
|
36
36
|
|
37
37
|
def _decrease(tm, steps)
|
38
|
-
steps.times.inject(tm) { |t|
|
38
|
+
steps.to_i.times.inject(tm) { |t| _prev(t) }
|
39
39
|
end
|
40
40
|
|
41
41
|
# fix for too far advance/insufficient decrease:
|
data/lib/time_math/units/week.rb
CHANGED
@@ -6,24 +6,27 @@ module TimeMath
|
|
6
6
|
super(:week)
|
7
7
|
end
|
8
8
|
|
9
|
-
def floor(tm)
|
10
|
-
|
9
|
+
def floor(tm, span = 1)
|
10
|
+
span == 1 or
|
11
|
+
raise NotImplementedError, 'For now, week only can floor to one'
|
12
|
+
|
13
|
+
f = TimeMath.day.floor(tm)
|
11
14
|
extra_days = tm.wday == 0 ? 6 : tm.wday - 1
|
12
|
-
day.decrease(f, extra_days)
|
15
|
+
TimeMath.day.decrease(f, extra_days)
|
13
16
|
end
|
14
17
|
|
15
18
|
def to_seconds(sz = 1)
|
16
|
-
day.to_seconds(sz * 7)
|
19
|
+
TimeMath.day.to_seconds(sz * 7)
|
17
20
|
end
|
18
21
|
|
19
22
|
protected
|
20
23
|
|
21
24
|
def _advance(tm, steps)
|
22
|
-
day.advance(tm, steps * 7)
|
25
|
+
TimeMath.day.advance(tm, steps * 7)
|
23
26
|
end
|
24
27
|
|
25
28
|
def _decrease(tm, steps)
|
26
|
-
day.decrease(tm, steps * 7)
|
29
|
+
TimeMath.day.decrease(tm, steps * 7)
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
data/lib/time_math/units/year.rb
CHANGED
@@ -17,11 +17,11 @@ module TimeMath
|
|
17
17
|
protected
|
18
18
|
|
19
19
|
def _advance(tm, steps)
|
20
|
-
generate(tm, year: tm.year + steps)
|
20
|
+
generate(tm, year: tm.year + steps.to_i)
|
21
21
|
end
|
22
22
|
|
23
23
|
def _decrease(tm, steps)
|
24
|
-
generate(tm, year: tm.year - steps)
|
24
|
+
generate(tm, year: tm.year - steps.to_i)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
data/lib/time_math/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_math2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Shepelev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -123,10 +123,11 @@ files:
|
|
123
123
|
- LICENSE.txt
|
124
124
|
- README.md
|
125
125
|
- lib/time_math.rb
|
126
|
-
- lib/time_math/
|
126
|
+
- lib/time_math/backports.rb
|
127
127
|
- lib/time_math/measure.rb
|
128
|
+
- lib/time_math/op.rb
|
129
|
+
- lib/time_math/resamplers.rb
|
128
130
|
- lib/time_math/sequence.rb
|
129
|
-
- lib/time_math/span.rb
|
130
131
|
- lib/time_math/units.rb
|
131
132
|
- lib/time_math/units/base.rb
|
132
133
|
- lib/time_math/units/day.rb
|
@@ -134,6 +135,7 @@ files:
|
|
134
135
|
- lib/time_math/units/simple.rb
|
135
136
|
- lib/time_math/units/week.rb
|
136
137
|
- lib/time_math/units/year.rb
|
138
|
+
- lib/time_math/util.rb
|
137
139
|
- lib/time_math/version.rb
|
138
140
|
- time_math2.gemspec
|
139
141
|
homepage: https://github.com/zverok/time_math2
|
data/lib/time_math/core_ext.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module TimeMath
|
2
|
-
# This module is included into `Time` and `DateTime`. It is optional
|
3
|
-
# and only included by explicit `require "time_math/core_ext"`.
|
4
|
-
module CoreExt
|
5
|
-
# @!method floor_to(unit)
|
6
|
-
# Shortcut to {Units::Base#floor}
|
7
|
-
# @!method ceil_to(unit)
|
8
|
-
# Shortcut to {Units::Base#ceil}
|
9
|
-
# @!method round_to(unit)
|
10
|
-
# Shortcut to {Units::Base#round}
|
11
|
-
# @!method next_to(unit)
|
12
|
-
# Shortcut to {Units::Base#next}
|
13
|
-
# @!method prev_to(unit)
|
14
|
-
# Shortcut to {Units::Base#prev}
|
15
|
-
[:floor, :ceil, :round, :next, :prev].each do |sym|
|
16
|
-
define_method("#{sym}_to") { |unit| TimeMath[unit].send(sym, self) }
|
17
|
-
end
|
18
|
-
|
19
|
-
# Shortcut to {Units::Base#round?}
|
20
|
-
def round_to?(unit)
|
21
|
-
TimeMath[unit].round?(self)
|
22
|
-
end
|
23
|
-
|
24
|
-
# Shortcut to {Units::Base#advance}
|
25
|
-
def advance_by(unit, amount = 1)
|
26
|
-
TimeMath[unit].advance(self, amount)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Shortcut to {Units::Base#decrease}
|
30
|
-
def decrease_by(unit, amount = 1)
|
31
|
-
TimeMath[unit].decrease(self, amount)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Shortcut to {Units::Base#range}
|
35
|
-
def range_to(unit, amount = 1)
|
36
|
-
TimeMath[unit].range(self, amount)
|
37
|
-
end
|
38
|
-
|
39
|
-
# Shortcut to {Units::Base#range_back}
|
40
|
-
def range_from(unit, amount = 1)
|
41
|
-
TimeMath[unit].range_back(self, amount)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Shortcut to {Units::Base#sequence}. See its docs for possible options.
|
45
|
-
def sequence_to(unit, other, options = {})
|
46
|
-
TimeMath[unit].sequence(self, other, options)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
Time.send :include, CoreExt
|
51
|
-
DateTime.send :include, CoreExt if ::Kernel.const_defined?(:DateTime)
|
52
|
-
end
|
data/lib/time_math/span.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
module TimeMath
|
2
|
-
# Represents time span (amount of units), like "4 years".
|
3
|
-
# Allows to advance or decrease Time or DateTime.
|
4
|
-
#
|
5
|
-
# Use it like this:
|
6
|
-
#
|
7
|
-
# ```ruby
|
8
|
-
# TimeMath.year.span(4).before(Time.now)
|
9
|
-
# ```
|
10
|
-
#
|
11
|
-
class Span
|
12
|
-
attr_reader :unit, :amount
|
13
|
-
|
14
|
-
# Creates Span instance.
|
15
|
-
# Typically, it is easire to use {Units::Base#span} than create
|
16
|
-
# spans directly.
|
17
|
-
#
|
18
|
-
# @param unit [Symbol] one of {Units.names}, unit of span;
|
19
|
-
# @param amount [Integer] amount of units in span.
|
20
|
-
def initialize(unit, amount)
|
21
|
-
@unit, @amount = unit, amount
|
22
|
-
@unit_impl = Units.get(unit)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Decreases `tm` by `amount` of `unit`.
|
26
|
-
#
|
27
|
-
# @param tm [Time,DateTime] time value to decrease;
|
28
|
-
# @return [Time,DateTime] decreased time.
|
29
|
-
def before(tm = Time.now)
|
30
|
-
@unit_impl.decrease(tm, amount)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Increases `tm` by `amount` of `unit`.
|
34
|
-
#
|
35
|
-
# @param tm [Time,DateTime] time value to increase;
|
36
|
-
# @return [Time,DateTime] increased time.
|
37
|
-
def after(tm = Time.now)
|
38
|
-
@unit_impl.advance(tm, amount)
|
39
|
-
end
|
40
|
-
|
41
|
-
alias ago before
|
42
|
-
alias from after
|
43
|
-
|
44
|
-
def ==(other)
|
45
|
-
self.class == other.class &&
|
46
|
-
unit == other.unit && amount == other.amount
|
47
|
-
end
|
48
|
-
|
49
|
-
def inspect
|
50
|
-
'#<%s(%s): %+i>' % [self.class, unit, amount]
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|