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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a9bd8f59c8729764a5a1b9876b20bca16dce2670ed477ee64109eda02219f98
4
- data.tar.gz: 566826dcca95d42a34fd5f95581e5dfd1c3d074a3260def10fda5bb3a68c5ce0
3
+ metadata.gz: e4f9379b630e9db00b28614f347d523edb33d63c842d6b5c9fd747be02f1d75d
4
+ data.tar.gz: ffa32ee13faa08781c68870813c15ea7b3dcc15fe65f8c1f2618952251fe870c
5
5
  SHA512:
6
- metadata.gz: 0b37fb6089b687c08b31aad74d24f43c90d65134c9e68e0de2d521a6357f64d0f3778b8aafe60aca9f912f4610d73a42e4e6a2f96f156f66a8c5d154affa8d91
7
- data.tar.gz: 267b78151d2017069f1a3e4836ed0016bbdc524ee9fb2d7ea15ec8148df9359604f9acf9dca886aa073fb289309c5f4f90ce39754d8da80d95794606b0a05087
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[feature_name.to_s]
20
+ feature_data = store[feature_name_str]
17
21
  return nil unless feature_data
18
22
 
19
- value = feature_data[key.to_s]
23
+ value = feature_data[key_str]
20
24
  deserialize_value(value)
21
25
  end
22
26
  end
@@ -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
- # Performance metrics: measure before the check (only if enabled)
40
- perf_metrics = Magick.performance_metrics
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Magick
4
- VERSION = '0.9.19'
4
+ VERSION = '0.9.20'
5
5
  end
data/lib/magick.rb CHANGED
@@ -103,7 +103,9 @@ module Magick
103
103
  end
104
104
 
105
105
  def enabled?(feature_name, context = {})
106
- feature = features[feature_name.to_s] || self[feature_name]
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
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magick-feature-flags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.19
4
+ version: 0.9.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Lobanov