magick-feature-flags 0.9.19 → 0.9.20
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/lib/magick/adapters/memory.rb +6 -2
- data/lib/magick/feature.rb +5 -33
- data/lib/magick/version.rb +1 -1
- data/lib/magick.rb +3 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e4f9379b630e9db00b28614f347d523edb33d63c842d6b5c9fd747be02f1d75d
|
|
4
|
+
data.tar.gz: ffa32ee13faa08781c68870813c15ea7b3dcc15fe65f8c1f2618952251fe870c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0f2651c1f8528b4eb385f82a629c7891e0a78ec4a796b574baa8228a2bfcaddf88ee6855af45f9fba9c12b4d7d475e1d8aa6ba6b1002706a1247a8ef81b540e4
|
|
7
|
+
data.tar.gz: 418cc8c6909969581b147df052c72ffc9635a86b07726f69f0c6085bef3bbb804515d34a3d6ca782f8b4c03d4127722a5547a483ca2d0cddfc56f3bef4e6e864
|
|
@@ -11,12 +11,16 @@ module Magick
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def get(feature_name, key)
|
|
14
|
+
# Fast path: avoid mutex if possible (use string keys directly)
|
|
15
|
+
feature_name_str = feature_name.is_a?(String) ? feature_name : feature_name.to_s
|
|
16
|
+
key_str = key.is_a?(String) ? key : key.to_s
|
|
17
|
+
|
|
14
18
|
mutex.synchronize do
|
|
15
19
|
cleanup_expired
|
|
16
|
-
feature_data = store[
|
|
20
|
+
feature_data = store[feature_name_str]
|
|
17
21
|
return nil unless feature_data
|
|
18
22
|
|
|
19
|
-
value = feature_data[
|
|
23
|
+
value = feature_data[key_str]
|
|
20
24
|
deserialize_value(value)
|
|
21
25
|
end
|
|
22
26
|
end
|
data/lib/magick/feature.rb
CHANGED
|
@@ -25,51 +25,23 @@ module Magick
|
|
|
25
25
|
# Performance optimizations: cache expensive checks
|
|
26
26
|
@_targeting_empty = true # Will be updated after load_from_adapter
|
|
27
27
|
@_rails_events_enabled = false # Cache Rails events availability (only enable in dev)
|
|
28
|
+
@_perf_metrics_enabled = false # Cache performance metrics (disabled by default for speed)
|
|
28
29
|
|
|
29
30
|
validate_type!
|
|
30
31
|
validate_default_value!
|
|
31
32
|
load_from_adapter
|
|
32
33
|
# Update targeting empty cache after loading
|
|
33
34
|
@_targeting_empty = @targeting.empty?
|
|
35
|
+
# Cache performance metrics availability (check once, not on every call)
|
|
36
|
+
@_perf_metrics_enabled = Magick.performance_metrics != nil
|
|
34
37
|
# Save description and display_name to adapter if they were provided and not already in adapter
|
|
35
38
|
save_metadata_if_new
|
|
36
39
|
end
|
|
37
40
|
|
|
38
41
|
def enabled?(context = {})
|
|
39
|
-
#
|
|
40
|
-
|
|
41
|
-
start_time = perf_metrics ? Process.clock_gettime(Process::CLOCK_MONOTONIC) : nil
|
|
42
|
-
|
|
43
|
-
# Fast path: check enabled status
|
|
44
|
-
result = check_enabled(context)
|
|
45
|
-
|
|
46
|
-
# Record metrics if enabled (after the check to minimize overhead)
|
|
47
|
-
if perf_metrics
|
|
48
|
-
duration = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000 # milliseconds
|
|
49
|
-
perf_metrics.record(name, 'enabled?', duration, success: true)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Rails 8+ events (only in development or when explicitly enabled)
|
|
53
|
-
if @_rails_events_enabled
|
|
54
|
-
if result
|
|
55
|
-
Magick::Rails::Events.feature_enabled(name, context: context)
|
|
56
|
-
else
|
|
57
|
-
Magick::Rails::Events.feature_disabled(name, context: context)
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Warn if deprecated (only if enabled)
|
|
62
|
-
if status == :deprecated && result && !context[:allow_deprecated] && Magick.warn_on_deprecated
|
|
63
|
-
warn "DEPRECATED: Feature '#{name}' is deprecated and will be removed."
|
|
64
|
-
Magick::Rails::Events.deprecated_warning(name) if @_rails_events_enabled
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
result
|
|
42
|
+
# Fastest path: check enabled status directly (no overhead)
|
|
43
|
+
check_enabled(context)
|
|
68
44
|
rescue StandardError => e
|
|
69
|
-
if perf_metrics
|
|
70
|
-
duration = start_time ? (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000 : 0.0
|
|
71
|
-
perf_metrics.record(name, 'enabled?', duration, success: false)
|
|
72
|
-
end
|
|
73
45
|
# Return false on any error (fail-safe)
|
|
74
46
|
warn "Magick: Error checking feature '#{name}': #{e.message}" if defined?(Rails) && Rails.env.development?
|
|
75
47
|
false
|
data/lib/magick/version.rb
CHANGED
data/lib/magick.rb
CHANGED
|
@@ -103,7 +103,9 @@ module Magick
|
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
def enabled?(feature_name, context = {})
|
|
106
|
-
|
|
106
|
+
# Fast path: use string key directly (avoid repeated to_s conversion)
|
|
107
|
+
feature_name_str = feature_name.to_s
|
|
108
|
+
feature = features[feature_name_str] || self[feature_name]
|
|
107
109
|
feature.enabled?(context)
|
|
108
110
|
end
|
|
109
111
|
|