time_of_day_attr 0.0.8 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/time_of_day_attr.rb +11 -1
- data/lib/time_of_day_attr/active_record_ext.rb +5 -1
- data/lib/time_of_day_attr/version.rb +1 -1
- data/test/time_of_day_attr_test.rb +16 -2
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eada9ab6b9945f028e72aa4335e1bcfbf6227238
|
4
|
+
data.tar.gz: f5f0071ce565c37812395a7bd055c8d2b223ed0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9ce89c3c480c445091ae538c7426cf417d70a7d1bcb2c02a17d4c861af6d946a593e91262567eec414319cf8185268ede8c14a32bf8b3881ceabaddf533ce59
|
7
|
+
data.tar.gz: 18cd51daf9d5c0f90f86c6f6b3c6ee5987738aa6a8b54d56a9a7d1c6af859715744c65685c0add7c6ac5c0ff157de624b996baf37ae763be8019eb310785cff2
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
#
|
1
|
+
# Time of day attributes for your Rails model
|
2
2
|
[](http://badge.fury.io/rb/time_of_day_attr) [](https://codeclimate.com/github/clemenst/time_of_day_attr) [](http://clemenst.mit-license.org)
|
3
3
|
|
4
|
-
|
4
|
+
This ruby gem converts time of day to seconds since midnight and back. The seconds value is stored in the database and can be used for calculations and validations.
|
5
5
|
|
6
6
|
## Installation
|
7
7
|
|
@@ -43,7 +43,7 @@ TimeOfDayAttr.l(business_hour.opening, omit_minutes_at_full_hour: true)
|
|
43
43
|
|
44
44
|
### Formats
|
45
45
|
|
46
|
-
The standard formats for
|
46
|
+
The standard formats for conversion are 'default' and 'hour'.
|
47
47
|
```yml
|
48
48
|
en:
|
49
49
|
time_of_day:
|
@@ -60,7 +60,7 @@ en:
|
|
60
60
|
custom: '%H-%M'
|
61
61
|
```
|
62
62
|
|
63
|
-
Pass the formats you want for
|
63
|
+
Pass the formats you want for conversion:
|
64
64
|
```ruby
|
65
65
|
class BusinessHour < ActiveRecord::Base
|
66
66
|
time_of_day_attr :opening, formats: [:custom]
|
data/lib/time_of_day_attr.rb
CHANGED
@@ -13,15 +13,25 @@ module TimeOfDayAttr
|
|
13
13
|
format = options[:format] || :default
|
14
14
|
format = translate_format(format) if format.is_a?(Symbol)
|
15
15
|
time = Time.strptime(value, format).change(month: 1, day: 1)
|
16
|
-
time.seconds_since_midnight.to_i
|
16
|
+
seconds = time.seconds_since_midnight.to_i
|
17
|
+
if seconds.zero? && value.starts_with?('24')
|
18
|
+
24.hours.to_i
|
19
|
+
else
|
20
|
+
seconds
|
21
|
+
end
|
17
22
|
end
|
18
23
|
|
19
24
|
def localize(value, options = {})
|
20
25
|
return value unless value.respond_to?(:seconds)
|
21
26
|
format = options[:format] || :default
|
22
27
|
format = translate_format(format) if format.is_a?(Symbol)
|
28
|
+
# Switch to beginning of year to prevent wrong time on the day of time change
|
29
|
+
# see https://en.wikipedia.org/wiki/Daylight_saving_time
|
23
30
|
time = Time.now.beginning_of_year.at_midnight + value.seconds
|
24
31
|
time_of_day = time.strftime(format)
|
32
|
+
if 24.hours.to_i == value
|
33
|
+
time_of_day.gsub!(' 0', '24')
|
34
|
+
end
|
25
35
|
if options[:omit_minutes_at_full_hour]
|
26
36
|
if time_of_day.end_with?('00')
|
27
37
|
time_of_day = time_of_day[0...-3]
|
@@ -13,7 +13,11 @@ module TimeOfDayAttr
|
|
13
13
|
delocalized_values = options[:formats].map do |format|
|
14
14
|
begin
|
15
15
|
TimeOfDayAttr.delocalize(value, format: format)
|
16
|
-
rescue ArgumentError
|
16
|
+
rescue ArgumentError => e
|
17
|
+
if 'argument out of range' == e.message
|
18
|
+
super(nil)
|
19
|
+
return
|
20
|
+
end
|
17
21
|
nil
|
18
22
|
end
|
19
23
|
end
|
@@ -14,14 +14,12 @@ class TimeOfDayAttrTest < ActiveSupport::TestCase
|
|
14
14
|
test 'localize time of day' do
|
15
15
|
assert_equal ' 9:00', TimeOfDayAttr.localize(32400)
|
16
16
|
assert_equal '14:45', TimeOfDayAttr.localize(53100)
|
17
|
-
assert_equal ' 0:00', TimeOfDayAttr.localize(86400)
|
18
17
|
end
|
19
18
|
|
20
19
|
test 'localize time of day and omit minutes at full hour' do
|
21
20
|
assert_equal ' 9', TimeOfDayAttr.localize(32400, omit_minutes_at_full_hour: true)
|
22
21
|
assert_equal '14', TimeOfDayAttr.localize(50400, omit_minutes_at_full_hour: true)
|
23
22
|
assert_equal '14:45', TimeOfDayAttr.localize(53100, omit_minutes_at_full_hour: true)
|
24
|
-
assert_equal ' 0', TimeOfDayAttr.localize(86400, omit_minutes_at_full_hour: true)
|
25
23
|
end
|
26
24
|
|
27
25
|
test 'localizing nil should return nil' do
|
@@ -54,5 +52,21 @@ class TimeOfDayAttrTest < ActiveSupport::TestCase
|
|
54
52
|
assert_equal 55800, business_hour.opening
|
55
53
|
business_hour.opening = nil
|
56
54
|
assert_nil business_hour.opening
|
55
|
+
business_hour.opening = '25:00'
|
56
|
+
assert_nil business_hour.opening
|
57
|
+
business_hour.opening = '24:30'
|
58
|
+
assert_nil business_hour.opening
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
test '24 should be usable' do
|
63
|
+
business_hour = BusinessHour.new(opening: '0', closing: '24')
|
64
|
+
assert_equal 0, business_hour.opening
|
65
|
+
assert_equal 86400, business_hour.closing
|
66
|
+
assert_equal ' 0:00', TimeOfDayAttr.localize(business_hour.opening)
|
67
|
+
assert_equal '24:00', TimeOfDayAttr.localize(business_hour.closing)
|
68
|
+
assert_equal ' 0', TimeOfDayAttr.localize(business_hour.opening, omit_minutes_at_full_hour: true)
|
69
|
+
assert_equal '24', TimeOfDayAttr.localize(business_hour.closing, omit_minutes_at_full_hour: true)
|
57
70
|
end
|
71
|
+
|
58
72
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_of_day_attr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clemens Teichmann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -38,10 +38,9 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
description:
|
42
|
-
|
43
|
-
|
44
|
-
since midnight back to time of day.
|
41
|
+
description: This ruby gem converts time of day to seconds since midnight and back.
|
42
|
+
The seconds value is stored in the database and can be used for calculations and
|
43
|
+
validations.
|
45
44
|
email:
|
46
45
|
- clemens_t@web.de
|
47
46
|
executables: []
|
@@ -79,12 +78,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
78
|
version: '0'
|
80
79
|
requirements: []
|
81
80
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
81
|
+
rubygems_version: 2.4.5.1
|
83
82
|
signing_key:
|
84
83
|
specification_version: 4
|
85
|
-
summary:
|
84
|
+
summary: Time of day attributes for your Rails model
|
86
85
|
test_files:
|
86
|
+
- test/time_of_day_attr_test.rb
|
87
87
|
- test/models/business_hour.rb
|
88
|
-
- test/schema.rb
|
89
88
|
- test/test_helper.rb
|
90
|
-
- test/
|
89
|
+
- test/schema.rb
|