timeliness 0.3.10 → 0.4.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/.travis.yml +19 -4
- data/CHANGELOG.rdoc +17 -0
- data/README.rdoc +2 -2
- data/benchmark.rb +0 -1
- data/lib/timeliness.rb +1 -0
- data/lib/timeliness/definitions.rb +16 -15
- data/lib/timeliness/threadsafe_attr.rb +24 -0
- data/lib/timeliness/version.rb +1 -1
- data/spec/timeliness/definitions_spec.rb +12 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9692d6a370b0240cc872d67dbc79deaf5429b276ba3a8aa45049f9b77a70456c
|
4
|
+
data.tar.gz: c63f8a093f2e85909a7ecd4a894bc59d6929da07c3fd3ed445932a9e8474f535
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff9b6afda36bd0829dca9b8133e4db5f2a6eeff6d076cec28a12c8a83fd5e1c2b0973cdb7b1b328bf6556755232a4d8c82ecaa362d5224806f8eefd185d5bee5
|
7
|
+
data.tar.gz: ffa9fd84e51518e61e4689ddb31bda87f4d297d6ed56a99e20e34563ba18a97412d6e95af2d2c5843498fa75fd3a26d7a82357405e56bfc99cfe314a3b5d67d3
|
data/.travis.yml
CHANGED
@@ -1,7 +1,22 @@
|
|
1
1
|
language: ruby
|
2
|
+
before_install:
|
3
|
+
- gem install bundler
|
4
|
+
cache: bundler
|
5
|
+
|
2
6
|
rvm:
|
3
|
-
-
|
4
|
-
-
|
5
|
-
-
|
6
|
-
-
|
7
|
+
# - jruby
|
8
|
+
# - truffleruby
|
9
|
+
# - rbx-3
|
10
|
+
- "2.3.8"
|
11
|
+
- "2.4.5"
|
12
|
+
- "2.5.3"
|
13
|
+
- "2.6.1"
|
14
|
+
|
7
15
|
script: 'bundle exec rspec'
|
16
|
+
|
17
|
+
notifications:
|
18
|
+
email:
|
19
|
+
recipients:
|
20
|
+
- adam.meehan@gmail.com
|
21
|
+
on_failure: change
|
22
|
+
on_success: never
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
= 0.4.0 - 2019-02-09
|
2
|
+
* Add threadsafety for use_euro_formats & use_us_formats to allow runtime
|
3
|
+
switching (andruby, timdiggins)
|
4
|
+
|
5
|
+
= 0.3.10 - 2019-02-06
|
6
|
+
* Fixed file permissions in gem build
|
7
|
+
|
8
|
+
= 0.3.9 - 2019-02-03 [YANKED]
|
9
|
+
* Fix for parsing invalid datetime string with valid timezone raising exception (lni_T)
|
10
|
+
* Add license name in gemspec (Robert Reiz)
|
11
|
+
* Fix typo in README format example
|
12
|
+
|
13
|
+
= 0.3.8 - 2016-01-06
|
14
|
+
* Add formats for standard Ruby string representations of Time
|
15
|
+
* Updated specs to RSpec v3
|
16
|
+
* Added some gem specific exception classes
|
17
|
+
|
1
18
|
= 0.3.7 - 2012-10-03
|
2
19
|
* Change to a hot switch between US and Euro formats without a compile.
|
3
20
|
* Fix date parsing with bad month name defaulting to 1 if year and day present.
|
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Timeliness
|
1
|
+
= Timeliness {<img src="https://travis-ci.org/adzap/timeliness.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/adzap/timeliness]
|
2
2
|
|
3
3
|
* Source: http://github.com/adzap/timeliness
|
4
4
|
* Bugs: http://github.com/adzap/timeliness/issues
|
@@ -14,7 +14,7 @@ Date/time parser for Ruby with the following features:
|
|
14
14
|
* I18n support (for months), if I18n gem loaded.
|
15
15
|
* Fewer WTFs than Time/Date parse method.
|
16
16
|
* Has no dependencies.
|
17
|
-
* Works with Ruby MRI
|
17
|
+
* Works with Ruby MRI >= 2.2
|
18
18
|
|
19
19
|
Extracted from the {validates_timeliness gem}[http://github.com/adzap/validates_timeliness], it has been rewritten cleaner and much faster. It's most suitable for when
|
20
20
|
you need to control the parsing behaviour. It's faster than the Time/Date class parse methods, so it
|
data/benchmark.rb
CHANGED
data/lib/timeliness.rb
CHANGED
@@ -151,8 +151,9 @@ module Timeliness
|
|
151
151
|
DuplicateFormat = Class.new(StandardError)
|
152
152
|
|
153
153
|
class << self
|
154
|
+
extend ThreadsafeAttr
|
154
155
|
attr_accessor :time_formats, :date_formats, :datetime_formats, :format_tokens, :format_components, :timezone_mapping
|
155
|
-
|
156
|
+
threadsafe_attr_accessor :date_format_set, :time_format_set, :datetime_format_set
|
156
157
|
|
157
158
|
# Adds new formats. Must specify format type and can specify a :before
|
158
159
|
# option to nominate which format the new formats should be inserted in
|
@@ -189,28 +190,28 @@ module Timeliness
|
|
189
190
|
# Removes US date formats so that ambiguous dates are parsed as European format
|
190
191
|
#
|
191
192
|
def use_euro_formats
|
192
|
-
|
193
|
-
|
193
|
+
self.date_format_set = @euro_date_format_set
|
194
|
+
self.datetime_format_set = @euro_datetime_format_set
|
194
195
|
end
|
195
196
|
|
196
197
|
# Restores default to parse ambiguous dates as US format
|
197
198
|
#
|
198
199
|
def use_us_formats
|
199
|
-
|
200
|
-
|
200
|
+
self.date_format_set = @us_date_format_set
|
201
|
+
self.datetime_format_set = @us_datetime_format_set
|
201
202
|
end
|
202
203
|
|
203
204
|
def compile_formats
|
204
205
|
@sorted_token_keys = nil
|
205
|
-
|
206
|
+
self.time_format_set = FormatSet.compile(time_formats)
|
206
207
|
|
207
208
|
@us_date_format_set = FormatSet.compile(date_formats)
|
208
209
|
@us_datetime_format_set = FormatSet.compile(datetime_formats)
|
209
210
|
@euro_date_format_set = FormatSet.compile(date_formats.select { |format| US_FORMAT_REGEXP !~ format })
|
210
211
|
@euro_datetime_format_set = FormatSet.compile(datetime_formats.select { |format| US_FORMAT_REGEXP !~ format })
|
211
212
|
|
212
|
-
|
213
|
-
|
213
|
+
self.date_format_set = @us_date_format_set
|
214
|
+
self.datetime_format_set = @us_datetime_format_set
|
214
215
|
end
|
215
216
|
|
216
217
|
def sorted_token_keys
|
@@ -223,24 +224,24 @@ module Timeliness
|
|
223
224
|
def format_sets(type, string)
|
224
225
|
case type
|
225
226
|
when :date
|
226
|
-
[
|
227
|
+
[ date_format_set, datetime_format_set ]
|
227
228
|
when :datetime
|
228
229
|
if string.length < 11
|
229
|
-
[
|
230
|
+
[ date_format_set, datetime_format_set ]
|
230
231
|
else
|
231
|
-
[
|
232
|
+
[ datetime_format_set, date_format_set ]
|
232
233
|
end
|
233
234
|
when :time
|
234
235
|
if string.length < 11
|
235
|
-
[
|
236
|
+
[ time_format_set ]
|
236
237
|
else
|
237
|
-
[
|
238
|
+
[ datetime_format_set, time_format_set ]
|
238
239
|
end
|
239
240
|
else
|
240
241
|
if string.length < 11
|
241
|
-
[
|
242
|
+
[ date_format_set, time_format_set, datetime_format_set ]
|
242
243
|
else
|
243
|
-
[
|
244
|
+
[ datetime_format_set, date_format_set, time_format_set ]
|
244
245
|
end
|
245
246
|
end
|
246
247
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Timeliness
|
2
|
+
module ThreadsafeAttr
|
3
|
+
def threadsafe_attr_accessor(*attrs)
|
4
|
+
attrs.each do |attr|
|
5
|
+
storage_name = "#{name}.#{attr}".freeze
|
6
|
+
reader attr, storage_name
|
7
|
+
writer attr, storage_name
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def reader(attr, storage_name)
|
13
|
+
define_method(attr) do
|
14
|
+
Thread.current[storage_name]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def writer(attr, storage_name)
|
19
|
+
define_method("#{attr}=") do |value|
|
20
|
+
Thread.current[storage_name] = value
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/timeliness/version.rb
CHANGED
@@ -101,4 +101,16 @@ describe Timeliness::Definitions do
|
|
101
101
|
definitions.use_us_formats
|
102
102
|
end
|
103
103
|
end
|
104
|
+
|
105
|
+
context "threadsafety" do
|
106
|
+
it "should allow threadsafe use of regional formats" do
|
107
|
+
eu_date = "30/06/2016"
|
108
|
+
us_date = "06/30/2016"
|
109
|
+
threads = []
|
110
|
+
threads << Thread.new { Timeliness.use_euro_formats; sleep(0.005); Timeliness.parse(eu_date) }
|
111
|
+
threads << Thread.new { sleep(0.001); Timeliness.use_us_formats; Timeliness.parse(us_date) }
|
112
|
+
threads.each { |t| t.join }
|
113
|
+
threads.each { |t| expect(t.value).to eql(Time.new(2016,06,30)) }
|
114
|
+
end
|
115
|
+
end
|
104
116
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timeliness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Meehan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- lib/timeliness/format_set.rb
|
103
103
|
- lib/timeliness/helpers.rb
|
104
104
|
- lib/timeliness/parser.rb
|
105
|
+
- lib/timeliness/threadsafe_attr.rb
|
105
106
|
- lib/timeliness/version.rb
|
106
107
|
- spec/spec_helper.rb
|
107
108
|
- spec/timeliness/core_ext/string_spec.rb
|