timeliness 0.4.5 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84ca036a36065acf094c147e896f73f7ed729c36859688bfb1f1e7a68f3617a9
4
- data.tar.gz: 0a30d2da9fd78e795c9fe915ca40918b77f14b4944cf30a7476e8fbe0f6ea9ed
3
+ metadata.gz: 23fc962cb22262464b617a95fc8690f5b94400ee5de69fc110166975bf59fd40
4
+ data.tar.gz: fead9e440fb74611873e5ab1a89747514072602d961f01a3c1d96c9d1b052610
5
5
  SHA512:
6
- metadata.gz: f8b18ee49649d7a1a58abeb8d981929807b37b750b3bd4b2f305ac9df7dac467cb2505fa8f2a9309a6b61f86728d16d7bd32de8a7d99960360f26599aacdd3fc
7
- data.tar.gz: 3567ce98af3d217e3935560e0e924a6a39c083e32dee114bfc717c0a26933e2e3fb88a912444df8bb21c80f2f4633e9043225ff88759a3e52b963e453cd9a80b
6
+ metadata.gz: ee38a67400fbe0b4bb9141eb359f3c8462a0a1d61b8c21b4bed1e7cc655bb4ac91246894abd8a4a25f279d1cfd94c0ef0d03cda034f76cea14adef01af5dba6d
7
+ data.tar.gz: 7310005faf480be6392f5c7838d2ea4e0ad9391a6cedd77a1f65709c6c93963b11131ccc5b2c9ceafa5a5dc3efde90b30fe0b06b61bbe183b8911ede2019f3bf
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,12 @@
1
+ = 0.5.0 - 2024-12-02
2
+ * Reduce allocations through some internal parsing changes
3
+ * Changed parse method arg handling to simple using keyword args
4
+
5
+ = 0.4.5 - 2023-01-19
6
+ * Support case insensitive months
7
+ * Migrated to Github Actions (@petergoldstein)
8
+ * Various doc, spec, and gemspec fixes and updates (@tagliala)
9
+
1
10
  = 0.4.4 - 2019-08-06
2
11
  * Raise compilation error if token with capturing arg is used more than once in a format
3
12
  * Some small internal refactorings in format compilation
@@ -10,7 +19,7 @@
10
19
  = 0.4.2 - 2019-06-15
11
20
  * Fixed thread safe issue that forced you to use one of the date format methods e.g. `use_euro_formats`
12
21
  to initialize the format sets in each new thread. Now a new thread will default to the global default (main thread).
13
- * Add `Timeliness.ambiguous_date_format` config setting (:us or :euro) to control global default for date format sets.
22
+ * Add `Timeliness.ambiguous_date_format` config setting (:us or :euro) to control global default for date format sets.
14
23
 
15
24
  = 0.4.1 - 2019-06-11
16
25
  * Add format for ISO 8601 with usec and 'Z' UTC zone offset (jartek)
@@ -19,7 +28,7 @@
19
28
 
20
29
  = 0.4.0 - 2019-02-09
21
30
  * Add threadsafety for use_euro_formats & use_us_formats to allow runtime
22
- switching (andruby, timdiggins)
31
+ switching (andruby, timdiggins)
23
32
 
24
33
  = 0.3.10 - 2019-02-06
25
34
  * Fixed file permissions in gem build
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Timeliness
2
4
  module Definitions
3
5
 
@@ -80,7 +82,7 @@ module Timeliness
80
82
  'yyyy-mm-ddThh:nn:sszt', # ISO 8601 with 'Zulu time' (i.e. Z) UTC zone designator
81
83
  'yyyy-mm-ddThh:nn:ss.u', # ISO 8601 with usec
82
84
  'yyyy-mm-ddThh:nn:ss.uzo', # ISO 8601 with usec and offset
83
- 'yyyy-mm-ddThh:nn:ss.uzt', # ISO 8601 with usec and 'Zulu time' (i.e. Z) UTC zone designator
85
+ 'yyyy-mm-ddThh:nn:ss.uzt', # ISO 8601 with usec and 'Zulu time' (i.e. Z) UTC zone designator
84
86
  'yyyy-mm-dd hh:nn:ss zo', # Ruby time string in later versions
85
87
  'yyyy-mm-dd hh:nn:ss tz', # Ruby time string for UTC in later versions
86
88
  ]
@@ -46,7 +46,7 @@ module Timeliness
46
46
 
47
47
  define_process_method(token_order.compact)
48
48
  @regexp_string = format
49
- @regexp = Regexp.new("^(#{format})$")
49
+ @regexp = Regexp.new("^(?>#{format})$")
50
50
  self
51
51
  rescue => ex
52
52
  raise CompilationFailed, "The format '#{format_string}' failed to compile using regexp string #{format}. Error message: #{ex.inspect}"
@@ -63,6 +63,7 @@ module Timeliness
63
63
  position, code = Definitions.format_components[component]
64
64
  values[position] = code || "#{component}.to_i" if position
65
65
  end
66
+ components << '*_' # absorb any excess arguments not used by format
66
67
  instance_eval <<-DEF
67
68
  def process(#{components.join(',')})
68
69
  [#{values.map { |i| i || 'nil' }.join(',')}]
@@ -20,8 +20,8 @@ module Timeliness
20
20
  format = Format.new(format_string).compile!
21
21
  @formats_hash[format_string] = format
22
22
  @match_indexes[index] = format
23
- regexp_string = "#{regexp_string}(#{format.regexp_string})|"
24
- index + format.token_count + 1 # add one for wrapper capture
23
+ regexp_string.concat("(?>#{format.regexp_string})|")
24
+ index + format.token_count
25
25
  }
26
26
  @regexp = %r[\A(?:#{regexp_string.chop})\z]
27
27
  self
@@ -31,10 +31,10 @@ module Timeliness
31
31
  format = single_format(format_string) if format_string
32
32
  match_regexp = format && format.regexp || @regexp
33
33
 
34
- if match_data = match_regexp.match(string)
35
- index = match_data.captures.index(string)
36
- start = index + 1
37
- values = match_data.captures[start..(start+7)].compact
34
+ match_regexp.match(string) do |match_data|
35
+ captures = match_data.captures # For a multi-format regexp there are lots of nils
36
+ index = captures.find_index { |e| !e.nil? } # Find the start of captures for matched format
37
+ values = captures.values_at(index..(index+7))
38
38
  format ||= @match_indexes[index]
39
39
  format.process(*values)
40
40
  end
@@ -4,11 +4,14 @@ module Timeliness
4
4
 
5
5
  class << self
6
6
 
7
- def parse(value, *args)
7
+ def parse(value, type=nil, **options)
8
8
  return value if acts_like_temporal?(value)
9
9
  return nil unless parseable?(value)
10
10
 
11
- type, options = type_and_options_from_args(args)
11
+ if type && !type.is_a?(Symbol)
12
+ options[:now] = type if type
13
+ type = nil
14
+ end
12
15
 
13
16
  time_array = _parse(value, type, options)
14
17
  return nil if time_array.nil?
@@ -40,7 +43,7 @@ module Timeliness
40
43
  Definitions.send("#{type}_format_set").match(string, options[:format])
41
44
  else
42
45
  values = nil
43
- Definitions.format_sets(type, string).find { |set| values = set.match(string, options[:format]) }
46
+ Definitions.format_sets(type, string).any? { |set| values = set.match(string, options[:format]) }
44
47
  values
45
48
  end
46
49
  rescue
@@ -95,8 +98,10 @@ module Timeliness
95
98
 
96
99
  def current_time_in_zone(zone)
97
100
  case zone
98
- when :utc, :local
99
- Time.now.send("get#{zone}")
101
+ when :utc
102
+ Time.now.getutc
103
+ when :local
104
+ Time.now.getlocal
100
105
  when :current
101
106
  Time.current
102
107
  else
@@ -107,8 +112,10 @@ module Timeliness
107
112
  def shift_time_to_zone(time, zone=nil)
108
113
  zone ||= Timeliness.configuration.default_timezone
109
114
  case zone
110
- when :utc, :local
111
- time.send("get#{zone}")
115
+ when :utc
116
+ time.getutc
117
+ when :local
118
+ time.getlocal
112
119
  when :current
113
120
  time.in_time_zone
114
121
  else
@@ -1,3 +1,3 @@
1
1
  module Timeliness
2
- VERSION = '0.4.5'
2
+ VERSION = '0.5.0'.freeze
3
3
  end
@@ -12,20 +12,20 @@ module TimelinessHelpers
12
12
  Timeliness::Definitions
13
13
  end
14
14
 
15
- def parse(*args)
16
- Timeliness::Parser.parse(*args)
15
+ def parse(value, type=nil, **args)
16
+ Timeliness::Parser.parse(value, type, **args)
17
17
  end
18
18
 
19
19
  def current_date(options={})
20
20
  Timeliness::Parser.send(:current_date, options)
21
21
  end
22
22
 
23
- def should_parse(*args)
24
- expect(Timeliness::Parser.parse(*args)).not_to be_nil
23
+ def should_parse(value, type=nil, **args)
24
+ expect(Timeliness::Parser.parse(value, type, **args)).not_to be_nil
25
25
  end
26
26
 
27
- def should_not_parse(*args)
28
- expect(Timeliness::Parser.parse(*args)).to be_nil
27
+ def should_not_parse(value, type=nil, **args)
28
+ expect(Timeliness::Parser.parse(value, type, **args)).to be_nil
29
29
  end
30
30
  end
31
31
 
@@ -38,4 +38,4 @@ RSpec.configure do |c|
38
38
  c.after do
39
39
  Timeliness.configuration = Timeliness::Configuration.new
40
40
  end
41
- end
41
+ 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.5
4
+ version: 0.5.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: 2023-01-18 00:00:00.000000000 Z
11
+ date: 2024-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  requirements: []
135
- rubygems_version: 3.1.6
135
+ rubygems_version: 3.3.27
136
136
  signing_key:
137
137
  specification_version: 4
138
138
  summary: Date/time parsing for the control freak.