ttl_memoizeable 0.4.0 → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b581b14f0f85cb39ade5f62d67f65406da66b93c781949df441d29f0674a109
4
- data.tar.gz: 18c9172f7a764aefd95372bfc7b4d2ed2d44b110bd1dfc3aff306bcec37be9b3
3
+ metadata.gz: c5d04e1b3ea5834552d353149bdecbe3e34e665ff81309cf2ec235c0a1948b0d
4
+ data.tar.gz: 10f4a41c7671cb6ed3b8a82006b9f21610d9e6a74b22a4808e2ae99e60ed9704
5
5
  SHA512:
6
- metadata.gz: fa200db2d8e1c62773f338a8496a17e169717a1581b7922c96ce2b45359f702920aff7f9ae724cdabf9124161bbecc38c844f1233ab596afa91bb7dc3243565f
7
- data.tar.gz: 9ed75c14082a23065875df1beee159725806f895f8da147b96c3cbd13e9ac2b5b1b230fafd47b4c169eba6f190a6e8e59bd924be3a9f2d6ba9150b30edbb9517
6
+ metadata.gz: 773703b9c7190e19474cef1b049a26ec0458c9a9ab4393e72364b96ec2fb913d3e3efdb19885f02eed2ca1ece6bebb42614b6edf297551d4b36ce48247c9ff6b
7
+ data.tar.gz: 709f01839f542b3c7c82ad828d0ffd5533286840bc0769c2e113be739ab9843a5b737a5ed346b3944722faaea4ebf494dea14401bb1a3cae4f0a78c765555083
data/CHANGELOG.md CHANGED
@@ -1,4 +1,6 @@
1
1
  ## [Unreleased]
2
+ ## [0.4.1] - 2026-09-25
3
+ - Calculate TTL using monotonic time, which is much more performant (#16) @kbennoune
2
4
  ## [0.4.0] - 2024-09-18
3
5
  - Add support for globally disabling TTLMemoizeable (#15) @danielwestendorf
4
6
  - Add support for globally resetting all ttls (#13) @danielwestendorf
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TTLMemoizeable
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
@@ -8,6 +8,7 @@ require_relative "ttl_memoizeable/version"
8
8
  module TTLMemoizeable
9
9
  TTLMemoizationError = Class.new(StandardError)
10
10
  SetupMutex = Mutex.new
11
+ EXPIRED_MONOTONIC_TIME = -365.0 * 24 * 60 * 60 # one year before the monotonic clock origin
11
12
 
12
13
  @ttl_index = 0
13
14
  @disabled = false
@@ -25,7 +26,8 @@ module TTLMemoizeable
25
26
 
26
27
  ivar_name = method_name.to_s.gsub(/\??/, "") # remove trailing question marks
27
28
  time_based_ttl = ttl.is_a?(ActiveSupport::Duration)
28
- expired_ttl = time_based_ttl ? 1.year.ago : 1
29
+ ttl_seconds = ttl.to_f if time_based_ttl
30
+ expired_ttl = time_based_ttl ? EXPIRED_MONOTONIC_TIME : 1
29
31
 
30
32
  ttl_variable_name = :"@_ttl_for_#{ivar_name}"
31
33
  ttl_index_variable_name = :"@_ttl_index_for_#{ivar_name}"
@@ -76,13 +78,16 @@ module TTLMemoizeable
76
78
  return true if TTLMemoizeable.instance_variable_get(:@ttl_index) != instance_variable_get(ttl_index_variable_name)
77
79
  return true unless instance_variable_defined?(value_variable_name)
78
80
 
79
- compared_to = time_based_ttl ? ttl.ago : 0
80
- instance_variable_get(ttl_variable_name) <= compared_to
81
+ if time_based_ttl
82
+ Process.clock_gettime(Process::CLOCK_MONOTONIC) - instance_variable_get(ttl_variable_name) >= ttl_seconds
83
+ else
84
+ instance_variable_get(ttl_variable_name) <= 0
85
+ end
81
86
  end
82
87
 
83
88
  define_method extend_ttl_method_name do
84
89
  if time_based_ttl
85
- instance_variable_set(ttl_variable_name, Time.current)
90
+ instance_variable_set(ttl_variable_name, Process.clock_gettime(Process::CLOCK_MONOTONIC))
86
91
  else
87
92
  instance_variable_set(ttl_variable_name, ttl)
88
93
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ttl_memoizeable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Westendorf
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-09-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -61,7 +60,6 @@ licenses:
61
60
  metadata:
62
61
  homepage_uri: https://github.com/huntresslabs/ttl_memoizeable
63
62
  source_code_uri: https://github.com/huntresslabs/ttl_memoizeable
64
- post_install_message:
65
63
  rdoc_options: []
66
64
  require_paths:
67
65
  - lib
@@ -76,8 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
74
  - !ruby/object:Gem::Version
77
75
  version: '0'
78
76
  requirements: []
79
- rubygems_version: 3.5.11
80
- signing_key:
77
+ rubygems_version: 4.0.16
81
78
  specification_version: 4
82
79
  summary: Cross-thread memoization in ruby with eventual consistency.
83
80
  test_files: []