env_parser 1.3.0 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +1 -1
- data/.rubocop.yml +25 -30
- data/.ruby-version +1 -1
- data/Gemfile.lock +51 -43
- data/README.md +1 -1
- data/docs/EnvParser/AutoregisterFileNotFound.html +9 -10
- data/docs/EnvParser/Error.html +8 -9
- data/docs/EnvParser/TypeAlreadyDefinedError.html +8 -9
- data/docs/EnvParser/Types/BaseTypes.html +12 -11
- data/docs/EnvParser/Types/ChronologyTypes.html +10 -9
- data/docs/EnvParser/Types/InternetTypes.html +10 -9
- data/docs/EnvParser/Types.html +9 -10
- data/docs/EnvParser/UnknownTypeError.html +8 -9
- data/docs/EnvParser/UnparseableAutoregisterSpec.html +9 -10
- data/docs/EnvParser/ValueNotAllowedError.html +10 -11
- data/docs/EnvParser/ValueNotConvertibleError.html +8 -10
- data/docs/EnvParser.html +123 -186
- data/docs/_index.html +8 -10
- data/docs/class_list.html +2 -2
- data/docs/css/style.css +3 -2
- data/docs/file.README.html +254 -284
- data/docs/file_list.html +2 -2
- data/docs/frames.html +2 -2
- data/docs/index.html +254 -284
- data/docs/js/app.js +14 -3
- data/docs/method_list.html +3 -11
- data/docs/top-level-namespace.html +7 -85
- data/env_parser.gemspec +14 -14
- data/lib/env_parser/errors.rb +18 -18
- data/lib/env_parser/types/base_types.rb +69 -69
- data/lib/env_parser/types/chronology_types.rb +54 -54
- data/lib/env_parser/types/internet_types.rb +51 -51
- data/lib/env_parser/types.rb +2 -2
- data/lib/env_parser/version.rb +1 -1
- data/lib/env_parser.rb +206 -217
- data/spec/env_parser/types/base_types_spec.rb +98 -0
- data/spec/env_parser/types/chronology_types_spec.rb +49 -0
- data/spec/env_parser/types/internet_types_spec.rb +45 -0
- data/spec/env_parser_spec.rb +192 -0
- data/spec/spec_helper.rb +14 -0
- metadata +54 -50
- data/.travis.yml +0 -5
data/docs/js/app.js
CHANGED
@@ -171,6 +171,7 @@ function generateTOC() {
|
|
171
171
|
var counter = 0;
|
172
172
|
var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
|
173
173
|
var i;
|
174
|
+
var curli;
|
174
175
|
if ($('#filecontents h1').length > 1) tags.unshift('h1');
|
175
176
|
for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
|
176
177
|
var lastTag = parseInt(tags[0][1], 10);
|
@@ -190,15 +191,25 @@ function generateTOC() {
|
|
190
191
|
}
|
191
192
|
if (thisTag > lastTag) {
|
192
193
|
for (i = 0; i < thisTag - lastTag; i++) {
|
193
|
-
|
194
|
+
if ( typeof(curli) == "undefined" ) {
|
195
|
+
curli = $('<li/>');
|
196
|
+
toc.append(curli);
|
197
|
+
}
|
198
|
+
toc = $('<ol/>');
|
199
|
+
curli.append(toc);
|
200
|
+
curli = undefined;
|
194
201
|
}
|
195
202
|
}
|
196
203
|
if (thisTag < lastTag) {
|
197
|
-
for (i = 0; i < lastTag - thisTag; i++)
|
204
|
+
for (i = 0; i < lastTag - thisTag; i++) {
|
205
|
+
toc = toc.parent();
|
206
|
+
toc = toc.parent();
|
207
|
+
}
|
198
208
|
}
|
199
209
|
var title = $(this).attr('toc-title');
|
200
210
|
if (typeof(title) == "undefined") title = $(this).text();
|
201
|
-
|
211
|
+
curli =$('<li><a href="#' + this.id + '">' + title + '</a></li>');
|
212
|
+
toc.append(curli);
|
202
213
|
lastTag = thisTag;
|
203
214
|
});
|
204
215
|
if (!show) return;
|
data/docs/method_list.html
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
5
5
|
<meta charset="utf-8" />
|
6
6
|
|
7
|
-
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen"
|
7
|
+
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
|
8
8
|
|
9
|
-
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen"
|
9
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
|
10
10
|
|
11
11
|
|
12
12
|
|
@@ -69,14 +69,6 @@
|
|
69
69
|
|
70
70
|
|
71
71
|
<li class="even ">
|
72
|
-
<div class="item">
|
73
|
-
<span class='object_link'><a href="top-level-namespace.html#filename-instance_method" title="#filename (method)">#filename</a></span>
|
74
|
-
<small>Top Level Namespace</small>
|
75
|
-
</div>
|
76
|
-
</li>
|
77
|
-
|
78
|
-
|
79
|
-
<li class="odd ">
|
80
72
|
<div class="item">
|
81
73
|
<span class='object_link'><a href="EnvParser.html#parse-class_method" title="EnvParser.parse (method)">parse</a></span>
|
82
74
|
<small>EnvParser</small>
|
@@ -84,7 +76,7 @@
|
|
84
76
|
</li>
|
85
77
|
|
86
78
|
|
87
|
-
<li class="
|
79
|
+
<li class="odd ">
|
88
80
|
<div class="item">
|
89
81
|
<span class='object_link'><a href="EnvParser.html#register-class_method" title="EnvParser.register (method)">register</a></span>
|
90
82
|
<small>EnvParser</small>
|
@@ -6,15 +6,15 @@
|
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.28
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
13
|
-
<link rel="stylesheet" href="css/style.css" type="text/css"
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
14
14
|
|
15
|
-
<link rel="stylesheet" href="css/common.css" type="text/css"
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" />
|
16
16
|
|
17
|
-
<script type="text/javascript"
|
17
|
+
<script type="text/javascript">
|
18
18
|
pathId = "";
|
19
19
|
relpath = '';
|
20
20
|
</script>
|
@@ -95,92 +95,14 @@
|
|
95
95
|
|
96
96
|
|
97
97
|
|
98
|
-
|
99
|
-
<h2>
|
100
|
-
Instance Method Summary
|
101
|
-
<small><a href="#" class="summary_toggle">collapse</a></small>
|
102
|
-
</h2>
|
103
|
-
|
104
|
-
<ul class="summary">
|
105
|
-
|
106
|
-
<li class="public ">
|
107
|
-
<span class="summary_signature">
|
108
|
-
|
109
|
-
<a href="top-level-namespace.html#filename-instance_method" title="#filename (instance method)">#<strong>filename</strong> ⇒ Object </a>
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
</span>
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
<span class="summary_desc"><div class='inline'>
|
124
|
-
<p>Load all files listed in “/lib/env_parser/types”.</p>
|
125
|
-
</div></span>
|
126
|
-
|
127
|
-
</li>
|
128
|
-
|
129
|
-
|
130
|
-
</ul>
|
131
|
-
|
132
|
-
|
133
|
-
|
134
98
|
|
135
|
-
<div id="instance_method_details" class="method_details_list">
|
136
|
-
<h2>Instance Method Details</h2>
|
137
|
-
|
138
|
-
|
139
|
-
<div class="method_details first">
|
140
|
-
<h3 class="signature first" id="filename-instance_method">
|
141
|
-
|
142
|
-
#<strong>filename</strong> ⇒ <tt>Object</tt>
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
</h3><div class="docstring">
|
149
|
-
<div class="discussion">
|
150
|
-
|
151
|
-
<p>Load all files listed in “/lib/env_parser/types”.</p>
|
152
|
-
|
153
|
-
|
154
|
-
</div>
|
155
|
-
</div>
|
156
|
-
<div class="tags">
|
157
|
-
|
158
|
-
|
159
|
-
</div><table class="source_code">
|
160
|
-
<tr>
|
161
|
-
<td>
|
162
|
-
<pre class="lines">
|
163
|
-
|
164
|
-
|
165
|
-
3</pre>
|
166
|
-
</td>
|
167
|
-
<td>
|
168
|
-
<pre class="code"><span class="info file"># File 'lib/env_parser/types.rb', line 3</span>
|
169
|
-
|
170
|
-
<span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_glob'>glob</span><span class='lparen'>(</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid___dir__'>__dir__</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>types</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>*.rb</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_filename'>filename</span><span class='op'>|</span> <span class='id identifier rubyid_require_relative'>require_relative</span> <span class='id identifier rubyid_filename'>filename</span> <span class='rbrace'>}</span></pre>
|
171
|
-
</td>
|
172
|
-
</tr>
|
173
|
-
</table>
|
174
|
-
</div>
|
175
|
-
|
176
|
-
</div>
|
177
99
|
|
178
100
|
</div>
|
179
101
|
|
180
102
|
<div id="footer">
|
181
|
-
Generated on Sun
|
182
|
-
<a href="
|
183
|
-
0.9.
|
103
|
+
Generated on Sun Dec 25 19:19:23 2022 by
|
104
|
+
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
|
+
0.9.28 (ruby-3.0.4).
|
184
106
|
</div>
|
185
107
|
|
186
108
|
</div>
|
data/env_parser.gemspec
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'env_parser/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
6
|
+
spec.required_ruby_version = '~> 3.0'
|
7
|
+
|
7
8
|
spec.name = 'env_parser'
|
8
9
|
spec.version = EnvParser::VERSION
|
9
10
|
spec.authors = ['Nestor Custodio']
|
@@ -13,21 +14,20 @@ Gem::Specification.new do |spec|
|
|
13
14
|
spec.homepage = 'https://github.com/nestor-custodio/env_parser'
|
14
15
|
spec.license = 'MIT'
|
15
16
|
|
16
|
-
spec.files = `git ls-files -z`.split("\x0").reject
|
17
|
-
|
18
|
-
end
|
19
|
-
spec.bindir = 'exe'
|
20
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |filename| filename.start_with? 'test/' }
|
18
|
+
spec.executables = []
|
21
19
|
spec.require_paths = ['lib']
|
22
20
|
|
23
|
-
spec.
|
24
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
26
|
-
spec.add_development_dependency 'rspec_junit_formatter'
|
27
|
-
spec.add_development_dependency 'rubocop'
|
28
|
-
spec.add_development_dependency 'yard'
|
21
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
29
22
|
|
30
|
-
spec.add_dependency 'activesupport', '>=
|
23
|
+
spec.add_dependency 'activesupport', '>= 6.1.0'
|
31
24
|
spec.add_dependency 'chronic'
|
32
25
|
spec.add_dependency 'chronic_duration'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 2'
|
28
|
+
spec.add_development_dependency 'rake'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
30
|
+
spec.add_development_dependency 'rspec_junit_formatter'
|
31
|
+
spec.add_development_dependency 'rubocop'
|
32
|
+
spec.add_development_dependency 'yard'
|
33
33
|
end
|
data/lib/env_parser/errors.rb
CHANGED
@@ -1,40 +1,40 @@
|
|
1
1
|
class EnvParser
|
2
|
-
|
3
|
-
|
2
|
+
# Base error class for EnvParser.
|
3
|
+
#
|
4
4
|
class Error < ::StandardError
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
# Error class used to indicate a type has already been defined.
|
8
|
+
#
|
9
9
|
class TypeAlreadyDefinedError < Error
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
# Error class used to indicate the requested "as" type has not been defined.
|
13
|
+
#
|
14
14
|
class UnknownTypeError < Error
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
# Error class used to indicate value given is not convertible to the requested type.
|
18
|
+
#
|
19
19
|
class ValueNotConvertibleError < Error
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
# Error class used to indicate parsed values that do not pass user-validation, either by not
|
23
|
+
# being part of the given "from_set" list, or by failing the "validated_by" Proc or yield-block
|
24
|
+
# check.
|
25
|
+
#
|
26
26
|
class ValueNotAllowedError < Error
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
# Error class used to indicate a missing auto-registration spec file (used by the "autoregister"
|
30
|
+
# feature).
|
31
|
+
#
|
32
32
|
class AutoregisterFileNotFound < Error
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
# Error class used to indicate an unparseable auto-registration spec (used by the "autoregister"
|
36
|
+
# feature).
|
37
|
+
#
|
38
38
|
class UnparseableAutoregisterSpec < Error
|
39
39
|
end
|
40
40
|
end
|
@@ -1,75 +1,75 @@
|
|
1
1
|
require 'env_parser'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
# The parent module for all EnvParser type definition modules.
|
4
|
+
# Exists only for documentation's sake.
|
5
|
+
#
|
6
6
|
module EnvParser::Types
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
7
|
+
# Defines types for primitive classes, adding the following:
|
8
|
+
#
|
9
|
+
# <table>
|
10
|
+
# <tbody>
|
11
|
+
# <tr>
|
12
|
+
# <th><code>:as</code> value</th>
|
13
|
+
# <th>type returned</th>
|
14
|
+
# <th>default</th>
|
15
|
+
# <th>notes</th>
|
16
|
+
# </tr>
|
17
|
+
# </tbody>
|
18
|
+
# <tbody>
|
19
|
+
# <tr>
|
20
|
+
# <td>:string</td>
|
21
|
+
# <td>String</td>
|
22
|
+
# <td><code>''</code></td>
|
23
|
+
# <td></td>
|
24
|
+
# </tr>
|
25
|
+
# <tr>
|
26
|
+
# <td>:symbol</td>
|
27
|
+
# <td>Symbol</td>
|
28
|
+
# <td><code>:''</code></td>
|
29
|
+
# <td></td>
|
30
|
+
# </tr>
|
31
|
+
# <tr>
|
32
|
+
# <td>:boolean</td>
|
33
|
+
# <td>TrueValue / FalseValue</td>
|
34
|
+
# <td><code>false</code></td>
|
35
|
+
# <td></td>
|
36
|
+
# </tr>
|
37
|
+
# <tr>
|
38
|
+
# <td>:int / :integer</td>
|
39
|
+
# <td>Integer</td>
|
40
|
+
# <td><code>0</code></td>
|
41
|
+
# <td></td>
|
42
|
+
# </tr>
|
43
|
+
# <tr>
|
44
|
+
# <td>:float / :decimal / :number</td>
|
45
|
+
# <td>Float</td>
|
46
|
+
# <td><code>0.0</code></td>
|
47
|
+
# <td></td>
|
48
|
+
# </tr>
|
49
|
+
# <tr>
|
50
|
+
# <td>:json</td>
|
51
|
+
# <td>< depends on JSON given ></td>
|
52
|
+
# <td><code>nil</code></td>
|
53
|
+
# <td></td>
|
54
|
+
# </tr>
|
55
|
+
# <tr>
|
56
|
+
# <td>:array</td>
|
57
|
+
# <td>Array</td>
|
58
|
+
# <td><code>[]</code></td>
|
59
|
+
# <td></td>
|
60
|
+
# </tr>
|
61
|
+
# <tr>
|
62
|
+
# <td>:hash</td>
|
63
|
+
# <td>Hash</td>
|
64
|
+
# <td><code>{}</code></td>
|
65
|
+
# <td></td>
|
66
|
+
# </tr>
|
67
|
+
# </tbody>
|
68
|
+
# </table>
|
69
|
+
#
|
70
|
+
# Note JSON is parsed using *quirks-mode* (meaning 'true', '25', and 'null' are all considered
|
71
|
+
# valid, parseable JSON).
|
72
|
+
#
|
73
73
|
module BaseTypes
|
74
74
|
EnvParser.define_type(:string, if_unset: '') do |value|
|
75
75
|
value
|
@@ -1,56 +1,56 @@
|
|
1
1
|
require 'env_parser'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
# The parent module for all EnvParser type definition modules.
|
4
|
+
# Exists only for documentation's sake.
|
5
|
+
#
|
6
6
|
module EnvParser::Types
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
7
|
+
# Defines types for date/time-related values, adding the following:
|
8
|
+
#
|
9
|
+
# <table>
|
10
|
+
# <tbody>
|
11
|
+
# <tr>
|
12
|
+
# <th><code>:as</code> value</th>
|
13
|
+
# <th>type returned</th>
|
14
|
+
# <th>default</th>
|
15
|
+
# <th>notes</th>
|
16
|
+
# </tr>
|
17
|
+
# </tbody>
|
18
|
+
# <tbody>
|
19
|
+
# <tr>
|
20
|
+
# <td>:date</td>
|
21
|
+
# <td>Date</td>
|
22
|
+
# <td><code>nil</code></td>
|
23
|
+
# <td>
|
24
|
+
# A natural language or ISO8601-parseable date.
|
25
|
+
# <br />
|
26
|
+
# Actual interpretation of the value is handled by the *chronic* gem.
|
27
|
+
# </td>
|
28
|
+
# </tr>
|
29
|
+
# <tr>
|
30
|
+
# <td>:time / :datetime</td>
|
31
|
+
# <td>Time</td>
|
32
|
+
# <td><code>nil</code></td>
|
33
|
+
# <td>
|
34
|
+
# A natural language or ISO8601-parseable date and time.
|
35
|
+
# <br />
|
36
|
+
# Actual interpretation of the value is handled by the *chronic* gem.
|
37
|
+
# </td>
|
38
|
+
# </tr>
|
39
|
+
# <tr>
|
40
|
+
# <td>:duration</td>
|
41
|
+
# <td>Numeric</td>
|
42
|
+
# <td><code>nil</code></td>
|
43
|
+
# <td>
|
44
|
+
# A natural language or ISO8601-parseable period.
|
45
|
+
# <br />
|
46
|
+
# Value returned is the number of seconds in the given period.
|
47
|
+
# <br />
|
48
|
+
# Actual interpretation of the value is handled by the *chronic_duration* gem.
|
49
|
+
# </td>
|
50
|
+
# </tr>
|
51
|
+
# </tbody>
|
52
|
+
# </table>
|
53
|
+
#
|
54
54
|
module ChronologyTypes
|
55
55
|
EnvParser.define_type(:date, if_unset: nil) do |value|
|
56
56
|
require 'chronic'
|
@@ -85,10 +85,10 @@ module EnvParser::Types
|
|
85
85
|
original_raise_setting = ChronicDuration.raise_exceptions
|
86
86
|
ChronicDuration.raise_exceptions = true
|
87
87
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
iso_period = %r{^\s*P(?:[0-9.]Y)?(?:[0-9.]M)?(?:[0-9.]W)?(?:[0-9.]D)?(?:T(?:[0-9.]H)?(?:[0-9.]M)?(?:[0-9.]S)?)?\s*$}
|
88
|
+
# With `raise_exceptions` set, ChronicDuration will fail on the "P" and "T" in ISO8601
|
89
|
+
# periods, so we have to check for and remove them.
|
90
|
+
#
|
91
|
+
iso_period = %r{^\s*P(?:[0-9.]Y)?(?:[0-9.]M)?(?:[0-9.]W)?(?:[0-9.]D)?(?:T(?:[0-9.]H)?(?:[0-9.]M)?(?:[0-9.]S)?)?\s*$}
|
92
92
|
value = value.delete 'PT' if value =~ iso_period
|
93
93
|
|
94
94
|
value = ChronicDuration.parse value, keep_zero: true
|