mongoid_time_field 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mongoid_time_field/time_field.rb +1 -1
- data/lib/mongoid_time_field/value.rb +27 -0
- data/lib/mongoid_time_field/version.rb +1 -1
- data/spec/v2_spec.rb +32 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf1d3359c89fdf7bb3fe0ee40e431e28d1875ab5
|
4
|
+
data.tar.gz: ceb9ba4afc6e5f4f5c72314a16840858d093a6a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3db4fdc546994c28a1cca9db4fa40c4c5f1f4ac664f2c871fc55807caa5c2f55464f882d66caf0f2b069734fea897d895b905263a178cc2a5fdb58b68d848805
|
7
|
+
data.tar.gz: b8c09be48119c85f2039ad02bb3d29fd2d39808f0dfff8d42ce29c354cf225428cf8f4e96b68dcf5441fabe99ff2cf06edd408c67499a2272ed56f1b664760d7
|
@@ -65,7 +65,7 @@ class TimeField
|
|
65
65
|
# Takes any possible object and converts it to how it would be
|
66
66
|
# stored in the database.
|
67
67
|
def mongoize(object)
|
68
|
-
case object
|
68
|
+
case object
|
69
69
|
when Mongoid::TimeField::Value then object.mongoize
|
70
70
|
when String then parse(object).mongoize
|
71
71
|
else object
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module Mongoid::TimeField
|
2
2
|
class Value
|
3
|
+
YEARS_FACTOR = ((365 * 303 + 366 * 97) / 400) * 86400
|
4
|
+
MONTHS_FACTOR = (((365 * 303 + 366 * 97) / 400) * 86400) / 12
|
5
|
+
|
3
6
|
attr_accessor :seconds
|
4
7
|
|
5
8
|
def initialize(seconds, options = {})
|
@@ -65,6 +68,30 @@ module Mongoid::TimeField
|
|
65
68
|
end
|
66
69
|
alias_method :to_str, :to_s
|
67
70
|
|
71
|
+
# source: https://github.com/arnau/ISO8601/blob/master/lib/iso8601/duration.rb (MIT)
|
72
|
+
def iso8601
|
73
|
+
duration = @seconds
|
74
|
+
sign = '-' if (duration < 0)
|
75
|
+
duration = duration.abs
|
76
|
+
years, y_mod = (duration / YEARS_FACTOR).to_i, (duration % YEARS_FACTOR)
|
77
|
+
months, m_mod = (y_mod / MONTHS_FACTOR).to_i, (y_mod % MONTHS_FACTOR)
|
78
|
+
days, d_mod = (m_mod / 86400).to_i, (m_mod % 86400)
|
79
|
+
hours, h_mod = (d_mod / 3600).to_i, (d_mod % 3600)
|
80
|
+
minutes, mi_mod = (h_mod / 60).to_i, (h_mod % 60)
|
81
|
+
seconds = mi_mod.div(1) == mi_mod ? mi_mod.to_i : mi_mod.to_f # Coerce to Integer when needed (`PT1S` instead of `PT1.0S`)
|
82
|
+
|
83
|
+
seconds = (seconds != 0 or (years == 0 and months == 0 and days == 0 and hours == 0 and minutes == 0)) ? "#{seconds}S" : ""
|
84
|
+
minutes = (minutes != 0) ? "#{minutes}M" : ""
|
85
|
+
hours = (hours != 0) ? "#{hours}H" : ""
|
86
|
+
days = (days != 0) ? "#{days}D" : ""
|
87
|
+
months = (months != 0) ? "#{months}M" : ""
|
88
|
+
years = (years != 0) ? "#{years}Y" : ""
|
89
|
+
|
90
|
+
date = %[#{sign}P#{years}#{months}#{days}]
|
91
|
+
time = (hours != "" or minutes != "" or seconds != "") ? %[T#{hours}#{minutes}#{seconds}] : ""
|
92
|
+
date + time
|
93
|
+
end
|
94
|
+
|
68
95
|
def minutes
|
69
96
|
@seconds / 60
|
70
97
|
end
|
data/spec/v2_spec.rb
CHANGED
@@ -13,9 +13,39 @@ describe Mongoid::TimeField do
|
|
13
13
|
dummy.open_minutes.should eq 600
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
16
|
+
describe 'iso8601' do
|
17
|
+
it 'hh:mm' do
|
18
|
+
dummy = DummyV2.new
|
19
|
+
dummy.open = '10:00'
|
20
|
+
dummy.open.iso8601.should eq 'PT10H'
|
21
|
+
end
|
22
|
+
it 'seconds' do
|
23
|
+
dummy = DummyV2.new
|
24
|
+
dummy.open = '10:10'
|
25
|
+
dummy.open.iso8601.should eq 'PT10H10M'
|
26
|
+
end
|
27
|
+
it 'hh:mm' do
|
28
|
+
dummy = DummyV2.new
|
29
|
+
dummy.def = '10:00'
|
30
|
+
dummy.def.iso8601.should eq 'PT10M'
|
31
|
+
end
|
32
|
+
it 'seconds' do
|
33
|
+
dummy = DummyV2.new
|
34
|
+
dummy.def = '10:10'
|
35
|
+
dummy.def.iso8601.should eq 'PT10M10S'
|
36
|
+
end
|
37
|
+
it 'date' do
|
38
|
+
dummy = DummyV2.new
|
39
|
+
dummy.open = '12000:00'
|
40
|
+
dummy.open.iso8601.should eq 'P1Y4M13DT8H'
|
41
|
+
end
|
42
|
+
it 'date' do
|
43
|
+
dummy = DummyV2.new
|
44
|
+
dummy.def = '120:00:00'
|
45
|
+
dummy.def.iso8601.should eq 'P5D'
|
46
|
+
end
|
47
|
+
end
|
17
48
|
describe 'datatype' do
|
18
|
-
|
19
49
|
it 'is persisted normally' do
|
20
50
|
dummy = DummyV2.new
|
21
51
|
dummy.open = '10:00'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_time_field
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebtv
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|