date-formats 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +1 -0
- data/README.md +3 -3
- data/Rakefile +1 -3
- data/lib/date-formats.rb +14 -3
- data/lib/date-formats/formats.rb +22 -2
- data/lib/date-formats/parser.rb +3 -1
- data/lib/date-formats/version.rb +1 -1
- data/test/test_parse_de.rb +9 -1
- data/test/test_week.rb +114 -0
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c4e4577d590d899b2f5215e548913bb4d090e49
|
4
|
+
data.tar.gz: a6ad7a9d7d735f74e27f9759cb4c66463e68152c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47922e36f4ff6414d6b776c83c446465961d127a2ae34494d78da520515b5877fd840e0862418bbdf91b70a35c8fac766f6ad806fc406783b3f5324a9c65c97f
|
7
|
+
data.tar.gz: f7c8932114c7f75b2fd8725f970a4f084bd66f914a1cdcff371bdadab8492ba236ccf70cc2a8c353b0779fa44e29bbb56efb890a6353d29b810c4902b6402b07
|
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -103,7 +103,7 @@ For example, the Spanish date `1 Ene` gets matched by:
|
|
103
103
|
```ruby
|
104
104
|
/\b
|
105
105
|
(?<day>\d{1,2})
|
106
|
-
|
106
|
+
[ ]
|
107
107
|
(?<month_name>#{MONTH_ES})
|
108
108
|
\b/x
|
109
109
|
```
|
@@ -130,10 +130,10 @@ And the French date `Lundi 1 Janvier` gets matched by:
|
|
130
130
|
```ruby
|
131
131
|
/\b
|
132
132
|
(?<day_name>#{DAY_FR})
|
133
|
-
|
133
|
+
[ ]+
|
134
134
|
(?<day>\d{1,2})
|
135
135
|
\.? # note: make dot optional
|
136
|
-
|
136
|
+
[ ]+
|
137
137
|
(?<month_name>#{MONTH_FR})
|
138
138
|
\b/x
|
139
139
|
```
|
data/Rakefile
CHANGED
data/lib/date-formats.rb
CHANGED
@@ -4,17 +4,28 @@ require 'pp'
|
|
4
4
|
require 'time'
|
5
5
|
require 'date'
|
6
6
|
|
7
|
-
## 3rd party libs/gems
|
8
|
-
require 'logutils'
|
9
|
-
|
10
7
|
|
11
8
|
###
|
12
9
|
# our own code
|
13
10
|
require 'date-formats/version' # let version always go first
|
11
|
+
|
12
|
+
## todo/fix: make logging class configurable - lets you use logutils etc.
|
13
|
+
module DateFormats
|
14
|
+
module Logging
|
15
|
+
def logger() @logger ||= Logger.new; end
|
16
|
+
|
17
|
+
class Logger ## for now use quick "dummy" logger to
|
18
|
+
def debug( msg ) puts "[debug] #{msg}"; end
|
19
|
+
end # class Logger
|
20
|
+
end # module Logging
|
21
|
+
end # module DateFormats
|
22
|
+
|
23
|
+
|
14
24
|
require 'date-formats/reader'
|
15
25
|
require 'date-formats/names' ## month and day names (e.g. January,.. Monday,...)
|
16
26
|
|
17
27
|
|
28
|
+
|
18
29
|
module DateFormats
|
19
30
|
|
20
31
|
#############
|
data/lib/date-formats/formats.rb
CHANGED
@@ -304,6 +304,26 @@ PT__DAY_DD_MM__DATE_RE = /\b
|
|
304
304
|
|
305
305
|
|
306
306
|
|
307
|
+
# e.g. Sa., 16.5., 18.00 Uhr or Mo., 18.5., 20.30 Uhr
|
308
|
+
# Sa 16.5. 18.00 or Mo 18.5. 20.30
|
309
|
+
DE__DAY_MM_DD__DATE_TIME_RE = /\b
|
310
|
+
(?<day_name>#{DAY_DE})
|
311
|
+
\.? # note: make dot optional
|
312
|
+
,? # note: allow optional comma too
|
313
|
+
[ ]*
|
314
|
+
(?<day>\d{1,2})
|
315
|
+
\.
|
316
|
+
(?<month>\d{1,2})
|
317
|
+
\.
|
318
|
+
,? # note: allow optional comma too
|
319
|
+
[ ]*
|
320
|
+
(?<hours>\d{1,2})
|
321
|
+
\.
|
322
|
+
(?<minutes>\d{2})
|
323
|
+
(?:[ ]*
|
324
|
+
uhr
|
325
|
+
)? ## note: allow optional Uhr
|
326
|
+
(?=[ \]]|$)/ix ## note: allow end-of-string/line too/x
|
307
327
|
|
308
328
|
# e.g. Fr. 26.7. or Sa. 27.7.
|
309
329
|
# or Fr 26.7. or Sa 27.7.
|
@@ -317,8 +337,7 @@ DE__DAY_MM_DD__DATE_RE = /\b
|
|
317
337
|
\.
|
318
338
|
(?<month>\d{1,2})
|
319
339
|
\.
|
320
|
-
(
|
321
|
-
|
340
|
+
(?=[ \]]|$)/x ## note: allow end-of-string/line too/x
|
322
341
|
|
323
342
|
|
324
343
|
#############################################
|
@@ -363,6 +382,7 @@ FORMATS_PT = [
|
|
363
382
|
]
|
364
383
|
|
365
384
|
FORMATS_DE = [
|
385
|
+
[ DE__DAY_MM_DD__DATE_TIME_RE, '[DE_DAY_MM_DD_hh_mm]' ],
|
366
386
|
[ DE__DAY_MM_DD__DATE_RE, '[DE_DAY_MM_DD]' ],
|
367
387
|
]
|
368
388
|
|
data/lib/date-formats/parser.rb
CHANGED
data/lib/date-formats/version.rb
CHANGED
data/test/test_parse_de.rb
CHANGED
@@ -17,9 +17,17 @@ class TestParseDe < MiniTest::Test
|
|
17
17
|
[ 'Fr., 26.07.', '2019-07-26', '[DE_DAY_MM_DD]' ],
|
18
18
|
[ 'Fr, 26.7.', '2019-07-26', '[DE_DAY_MM_DD]' ],
|
19
19
|
[ '[Fr. 26.7.]', '2019-07-26', '[[DE_DAY_MM_DD]]' ],
|
20
|
+
|
21
|
+
[ 'Sa., 16.5., 18.00 Uhr', '2019-05-16 18:00', '[DE_DAY_MM_DD_hh_mm]' ],
|
22
|
+
[ 'Sa 16.5. 18.00', '2019-05-16 18:00', '[DE_DAY_MM_DD_hh_mm]' ],
|
23
|
+
[ '[Sa., 16.5., 18.00 Uhr]', '2019-05-16 18:00', '[[DE_DAY_MM_DD_hh_mm]]' ],
|
24
|
+
[ '[Sa 16.5. 18.00]', '2019-05-16 18:00', '[[DE_DAY_MM_DD_hh_mm]]' ],
|
25
|
+
|
26
|
+
[ 'Mo., 18.5., 20.30 Uhr', '2019-05-18 20:30', '[DE_DAY_MM_DD_hh_mm]' ],
|
27
|
+
[ 'Mo 18.5. 20.30', '2019-05-18 20:30', '[DE_DAY_MM_DD_hh_mm]' ],
|
20
28
|
]
|
21
29
|
|
22
|
-
assert_dates( data, start: Date.new( 2019,
|
30
|
+
assert_dates( data, start: Date.new( 2019, 1, 1 ), lang: 'de' )
|
23
31
|
end
|
24
32
|
|
25
33
|
end # class TestParseDe
|
data/test/test_week.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_week.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestWeek < MiniTest::Test
|
11
|
+
|
12
|
+
def test_2016_17
|
13
|
+
assert_equal 51, Date.parse( '2016-12-25').cweek # Sun Dec 25
|
14
|
+
assert_equal 52, Date.parse( '2016-12-26').cweek # Mon Dec 26
|
15
|
+
assert_equal 52, Date.parse( '2016-12-31').cweek # Sat Dec 31
|
16
|
+
|
17
|
+
assert_equal 52, Date.parse( '2017-01-01').cweek # Sun Jan 1
|
18
|
+
assert_equal 1, Date.parse( '2017-01-02').cweek # Mon Jan 2
|
19
|
+
assert_equal 1, Date.parse( '2017-01-03').cweek # Tue Jan 3
|
20
|
+
assert_equal 1, Date.parse( '2017-01-08').cweek # Sun Jan 8
|
21
|
+
assert_equal 2, Date.parse( '2017-01-09').cweek # Mon Jan 9
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_2017_18
|
25
|
+
assert_equal 51, Date.parse( '2017-12-24').cweek # Sun Dec 24
|
26
|
+
assert_equal 52, Date.parse( '2017-12-25').cweek # Mon Dec 25
|
27
|
+
assert_equal 52, Date.parse( '2017-12-31').cweek # Sun Dec 31
|
28
|
+
|
29
|
+
assert_equal 1, Date.parse( '2018-01-01').cweek # Mon Jan 1
|
30
|
+
assert_equal 1, Date.parse( '2018-01-02').cweek # Tue Jan 2
|
31
|
+
assert_equal 1, Date.parse( '2018-01-07').cweek # Sun Jan 7
|
32
|
+
assert_equal 2, Date.parse( '2018-01-09').cweek # Mon Jan 8
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_2018_19
|
36
|
+
assert_equal 52, Date.parse( '2018-12-29').cweek # Sat Dec 29
|
37
|
+
assert_equal 52, Date.parse( '2018-12-30').cweek # Sun Dec 30
|
38
|
+
assert_equal 1, Date.parse( '2018-12-31').cweek # Mon Dec 31
|
39
|
+
|
40
|
+
assert_equal 1, Date.parse( '2019-01-01').cweek # Tue Jan 1
|
41
|
+
assert_equal 1, Date.parse( '2019-01-02').cweek # Wed Jan 2
|
42
|
+
assert_equal 1, Date.parse( '2019-01-06').cweek # Sun Jan 6
|
43
|
+
assert_equal 2, Date.parse( '2019-01-07').cweek # Mon Jan 7
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_2019_20
|
47
|
+
assert_equal 52, Date.parse( '2019-12-29').cweek
|
48
|
+
assert_equal 1, Date.parse( '2019-12-30').cweek
|
49
|
+
|
50
|
+
assert_equal 1, Date.parse( '2020-01-01').cweek
|
51
|
+
assert_equal 1, Date.parse( '2020-01-05').cweek
|
52
|
+
assert_equal 2, Date.parse( '2020-01-06').cweek
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_2020_21 ## note: 2020 has 53 (!) weeks
|
56
|
+
assert_equal 52, Date.parse( '2020-12-27').cweek
|
57
|
+
assert_equal 53, Date.parse( '2020-12-28').cweek # 1/7-Mon
|
58
|
+
assert_equal 53, Date.parse( '2020-12-29').cweek # 2/7-Tue
|
59
|
+
assert_equal 53, Date.parse( '2020-12-30').cweek # 3/7-Wed
|
60
|
+
assert_equal 53, Date.parse( '2020-12-31').cweek # 4/7-Thu
|
61
|
+
|
62
|
+
assert_equal 53, Date.parse( '2021-01-01').cweek # 5/7-Fri
|
63
|
+
assert_equal 53, Date.parse( '2021-01-02').cweek # 6/7-Sat
|
64
|
+
assert_equal 53, Date.parse( '2021-01-03').cweek # 7/7-Sun
|
65
|
+
assert_equal 1, Date.parse( '2021-01-04').cweek
|
66
|
+
assert_equal 1, Date.parse( '2021-01-10').cweek
|
67
|
+
assert_equal 2, Date.parse( '2021-01-11').cweek
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def test_more_weeks
|
72
|
+
assert_equal 53, Date.parse('2004-12-31').cweek ## note: 2004 has 53(!) weeks
|
73
|
+
assert_equal 53, Date.parse('2005-01-01').cweek
|
74
|
+
assert_equal 53, Date.parse('2005-01-02').cweek
|
75
|
+
assert_equal 1, Date.parse('2005-01-03').cweek
|
76
|
+
|
77
|
+
assert_equal 52, Date.parse('2005-12-31').cweek
|
78
|
+
assert_equal 52, Date.parse('2006-01-01').cweek
|
79
|
+
assert_equal 1, Date.parse('2006-01-02').cweek
|
80
|
+
|
81
|
+
assert_equal 52, Date.parse('2006-12-31').cweek
|
82
|
+
assert_equal 1, Date.parse('2007-01-01').cweek
|
83
|
+
|
84
|
+
assert_equal 52, Date.parse('2007-12-30').cweek
|
85
|
+
assert_equal 1, Date.parse('2007-12-31').cweek
|
86
|
+
assert_equal 1, Date.parse('2008-01-01').cweek
|
87
|
+
|
88
|
+
assert_equal 52, Date.parse('2008-12-28').cweek
|
89
|
+
assert_equal 1, Date.parse('2008-12-29').cweek
|
90
|
+
assert_equal 1, Date.parse('2008-12-30').cweek
|
91
|
+
assert_equal 1, Date.parse('2008-12-31').cweek
|
92
|
+
assert_equal 1, Date.parse('2009-01-01').cweek
|
93
|
+
|
94
|
+
assert_equal 53, Date.parse('2009-12-31').cweek ## note: 2009 has 53(!) weeks
|
95
|
+
assert_equal 53, Date.parse('2010-01-01').cweek
|
96
|
+
assert_equal 53, Date.parse('2010-01-02').cweek
|
97
|
+
assert_equal 53, Date.parse('2010-01-03').cweek
|
98
|
+
assert_equal 1, Date.parse('2010-01-04').cweek
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
assert_equal 52, Date.parse('2012-01-01').cweek
|
103
|
+
assert_equal 1, Date.parse('2012-12-31').cweek
|
104
|
+
assert_equal 1, Date.parse('2014-12-29').cweek
|
105
|
+
assert_equal 53, Date.parse('2015-12-31').cweek ## note: 2015 has 53(!) weeks
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
def test_today
|
110
|
+
assert_equal 31, Date.parse('2018-07-30').cweek # Mon Jul 30
|
111
|
+
assert_equal 31, Date.parse('2018-08-01').cweek
|
112
|
+
assert_equal 31, Date.parse('2018-08-05').cweek # Sun Aug 5
|
113
|
+
end
|
114
|
+
end # class TestWeek
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: date-formats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: logutils
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.6.1
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.6.1
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rdoc
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +69,7 @@ files:
|
|
83
69
|
- test/test_parse_it.rb
|
84
70
|
- test/test_parse_pt.rb
|
85
71
|
- test/test_version.rb
|
72
|
+
- test/test_week.rb
|
86
73
|
homepage: https://github.com/sportdb/sport.db
|
87
74
|
licenses:
|
88
75
|
- Public Domain
|