time_math2 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +9 -0
- data/CHANGELOG.md +7 -0
- data/lib/time_math/units/base.rb +3 -3
- data/lib/time_math/units/month.rb +3 -3
- data/lib/time_math/units/simple.rb +3 -3
- data/lib/time_math/units/year.rb +4 -4
- data/lib/time_math/util.rb +18 -4
- data/lib/time_math/version.rb +1 -1
- data/time_math2.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35d2a3523dac20994a38d19862500ce1eae98854
|
4
|
+
data.tar.gz: 82b7664f95fb1879a4911886cd257c41282f9327
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99dc9701481d961e93e9d803e4b943ce390bd03e55e8b23a779456094051d1fce129c5bb2a3900cf7f1d8c64f20be684839e2f1f80234c6a6c79912e78eb7954
|
7
|
+
data.tar.gz: 22dcc1315f78bd1d323ae9faed9b5e8ef6b39267ddd65b7c3be40cfe33b4f4ec217c79eecfc89c49c14b37ce60c92497ac49d5b5fa7b5d69a6afbd947687da8b
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-06-28 17:58:01 +0300 using RuboCop version 0.49.1.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 13
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# TimeMath Changelog
|
2
2
|
|
3
|
+
# 0.0.8 (2017-06-02)
|
4
|
+
|
5
|
+
* Fix `Units::Base#measure` to correctly measure negative distances (e.g. from > to, thanks @kenn for
|
6
|
+
pointing it);
|
7
|
+
* Cleanup the same method to work correctly with sub-second precisions and different Time-y types.
|
8
|
+
* Drop Ruby 2.0 support, finally.
|
9
|
+
|
3
10
|
# 0.0.7 (2017-05-31)
|
4
11
|
|
5
12
|
* Fix month advancing/decreasing. Thanks @dikond for pointing to problem!
|
data/lib/time_math/units/base.rb
CHANGED
@@ -195,9 +195,9 @@ module TimeMath
|
|
195
195
|
#
|
196
196
|
# @return [Integer] how many full units are inside the period.
|
197
197
|
# :nocov:
|
198
|
-
def measure(from, to)
|
199
|
-
|
200
|
-
|
198
|
+
def measure(from, to)
|
199
|
+
from, to = from.to_time, to.to_time unless from.class == to.class
|
200
|
+
from <= to ? _measure(from, to) : -_measure(to, from)
|
201
201
|
end
|
202
202
|
# :nocov:
|
203
203
|
|
@@ -8,15 +8,15 @@ module TimeMath
|
|
8
8
|
super(:month)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
protected
|
12
|
+
|
13
|
+
def _measure(from, to)
|
12
14
|
ydiff = to.year - from.year
|
13
15
|
mdiff = to.month - from.month
|
14
16
|
|
15
17
|
to.day >= from.day ? (ydiff * 12 + mdiff) : (ydiff * 12 + mdiff - 1)
|
16
18
|
end
|
17
19
|
|
18
|
-
protected
|
19
|
-
|
20
20
|
def _advance(tm, steps)
|
21
21
|
target = tm.month + steps.to_i
|
22
22
|
m = (target - 1) % 12 + 1
|
@@ -6,12 +6,12 @@ module TimeMath
|
|
6
6
|
sz * MULTIPLIERS[index..-1].inject(:*)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
9
|
+
protected
|
10
|
+
|
11
|
+
def _measure(from, to)
|
10
12
|
((to.to_time - from.to_time) / to_seconds).to_i
|
11
13
|
end
|
12
14
|
|
13
|
-
protected
|
14
|
-
|
15
15
|
def _advance(tm, steps)
|
16
16
|
_shift(tm, to_seconds(steps))
|
17
17
|
end
|
data/lib/time_math/units/year.rb
CHANGED
@@ -6,16 +6,16 @@ module TimeMath
|
|
6
6
|
super(:year)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
protected
|
10
|
+
|
11
|
+
def _measure(from, to)
|
12
|
+
if Util.merge(from, year: to.year) <= to
|
11
13
|
to.year - from.year
|
12
14
|
else
|
13
15
|
to.year - from.year - 1
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
17
|
-
protected
|
18
|
-
|
19
19
|
def _advance(tm, steps)
|
20
20
|
Util.merge(tm, year: tm.year + steps.to_i)
|
21
21
|
end
|
data/lib/time_math/util.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module TimeMath
|
2
2
|
# @private
|
3
3
|
module Util
|
4
|
-
|
5
|
-
NATURAL_UNITS =
|
4
|
+
COMMON_UNITS = %i[year month day hour min sec].freeze
|
5
|
+
NATURAL_UNITS = [*COMMON_UNITS, :subsec].freeze
|
6
6
|
EMPTY_VALUES = [nil, 1, 1, 0, 0, 0].freeze
|
7
7
|
|
8
8
|
module_function
|
@@ -43,11 +43,12 @@ module TimeMath
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def tm_to_hash(tm)
|
46
|
-
|
46
|
+
NATURAL_UNITS.map { |s| [s, extract_component(tm, s)] }.to_h
|
47
47
|
end
|
48
48
|
|
49
49
|
def hash_to_tm(origin, hash)
|
50
|
-
components = NATURAL_UNITS.map { |s| hash[s] || 0 }
|
50
|
+
components = NATURAL_UNITS[0..-2].map { |s| hash[s] || 0 }
|
51
|
+
components[-1] += (hash[:subsec] || hash[:sec_fraction] || 0)
|
51
52
|
array_to_tm(origin, *components)
|
52
53
|
end
|
53
54
|
|
@@ -63,5 +64,18 @@ module TimeMath
|
|
63
64
|
end
|
64
65
|
components[2] = [components[2], days_in_month].min
|
65
66
|
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
module_function
|
71
|
+
|
72
|
+
def extract_component(tm, component)
|
73
|
+
case component
|
74
|
+
when :subsec, :sec_fraction
|
75
|
+
tm.is_a?(Time) ? tm.subsec : tm.send(:sec_fraction)
|
76
|
+
when *COMMON_UNITS
|
77
|
+
tm.send(component)
|
78
|
+
end
|
79
|
+
end
|
66
80
|
end
|
67
81
|
end
|
data/lib/time_math/version.rb
CHANGED
data/time_math2.gemspec
CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
|
32
32
|
s.add_development_dependency 'rubocop', '>= 0.30'
|
33
33
|
s.add_development_dependency 'rspec', '>= 3'
|
34
|
+
s.add_development_dependency 'rubocop-rspec'
|
34
35
|
s.add_development_dependency 'rspec-its', '~> 1'
|
35
36
|
s.add_development_dependency 'simplecov', '~> 0.9'
|
36
37
|
s.add_development_dependency 'rake'
|
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.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Shepelev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop-rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec-its
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,6 +132,7 @@ executables: []
|
|
118
132
|
extensions: []
|
119
133
|
extra_rdoc_files: []
|
120
134
|
files:
|
135
|
+
- ".rubocop_todo.yml"
|
121
136
|
- ".yardopts"
|
122
137
|
- CHANGELOG.md
|
123
138
|
- LICENSE.txt
|