simple_oauth 0.5.3 → 0.5.4

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: bd2a5227ccf41a180c48803278ab10caa9348f38e6a4009d9e3faad9eac6218e
4
- data.tar.gz: 6e30b74dfb49f761430105c0fff030e40aaefea1682cf6101d8b168430e41445
3
+ metadata.gz: 8245692f23124570c69c39922493673741d0b63805aa68bad6bc36a10dfc873d
4
+ data.tar.gz: 371f536fbc9ce63a659b359887800b44aca7736f91720a3a17d1688c4afd9132
5
5
  SHA512:
6
- metadata.gz: a6880bc574c06b6b4b20975ae4ee3ee29db0dd65b2ccec9bda5c59bc966c8ceebe355c2413e71aafc3ce141c5aaebd7f78b8262b701833134f16175886de0fd5
7
- data.tar.gz: 6c2699ea118ed0d57c1987a691b0ddc7fb8d2264bee1527f14b9c621725adb8aaf5359971cbee43de3fe105bf7a8dac11439e1b8c592fa57e471412e1f43df48
6
+ metadata.gz: 73639dcce60dff2674874af945f5c8f710475b6a18c5842fb14dd4ac0eb180659e885a8e4e2f3c7593b4de0d6aa7c46ce951f22f2af8ca23358e4580f2150383
7
+ data.tar.gz: 4dacc0d32fa47802f531c1f2b25ab6ec4d669ce1d6e3f31973194f05e8f1ea45982a380b52ae78e0d8cd6c523df94ad855aef781d08529728a332ae6c4876cdd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.5.4] - 2026-11-14
2
+
3
+ ### Changed
4
+
5
+ * Look up a signature method by the name it was registered under without allocating, so signing a request allocates at least 4 fewer objects and verifying one at least 6 fewer. Verifying without a `signature_method` now allocates fewer objects than in 0.5.1
6
+
1
7
  ## [0.5.3] - 2026-11-14
2
8
 
3
9
  ### Fixed
@@ -26,6 +26,10 @@ module SimpleOAuth
26
26
  # Registry of signature method implementations
27
27
  @registry = {}
28
28
 
29
+ # The registry key of each name a signature method was registered under, so a lookup by that
30
+ # name, as nearly every lookup is, needs no normalizing and allocates nothing
31
+ @names = {}
32
+
29
33
  class << self
30
34
  # Registers a custom signature method
31
35
  #
@@ -47,7 +51,9 @@ module SimpleOAuth
47
51
  # )
48
52
  # end
49
53
  def register(name, rsa: false, verify: nil, digest: DEFAULT_DIGEST, &block)
50
- @registry[normalize_name(name)] = {implementation: block, rsa: rsa, verifier: verify, digest: digest}
54
+ key = normalize_name(name)
55
+ @names[name] = key
56
+ @registry[key] = {implementation: block, rsa: rsa, verifier: verify, digest: digest}
51
57
  end
52
58
 
53
59
  # Checks if a signature method is registered
@@ -58,7 +64,7 @@ module SimpleOAuth
58
64
  # @example
59
65
  # SimpleOAuth::Signature.registered?("HMAC-SHA1") # => true
60
66
  def registered?(name)
61
- @registry.key?(normalize_name(name))
67
+ @registry.key?(registry_key(name))
62
68
  end
63
69
 
64
70
  # Returns list of registered signature method names
@@ -80,7 +86,7 @@ module SimpleOAuth
80
86
  # SimpleOAuth::Signature.rsa?("RSA-SHA1") # => true
81
87
  # SimpleOAuth::Signature.rsa?("HMAC-SHA1") # => false
82
88
  def rsa?(name)
83
- @registry.dig(normalize_name(name), :rsa) || false
89
+ @registry.dig(registry_key(name), :rsa) || false
84
90
  end
85
91
 
86
92
  # Returns the hash algorithm a signature method signs with
@@ -136,7 +142,9 @@ module SimpleOAuth
136
142
  # @example
137
143
  # SimpleOAuth::Signature.unregister("HMAC-SHA512")
138
144
  def unregister(name)
139
- @registry.delete(normalize_name(name))
145
+ key = registry_key(name)
146
+ @names.delete_if { |_, registered| registered.eql?(key) }
147
+ @registry.delete(key)
140
148
  end
141
149
 
142
150
  # Resets the registry to only built-in methods (useful for testing)
@@ -147,6 +155,7 @@ module SimpleOAuth
147
155
  # SimpleOAuth::Signature.reset!
148
156
  def reset!
149
157
  @registry.clear
158
+ @names.clear
150
159
  register_builtin_methods
151
160
  end
152
161
 
@@ -183,12 +192,25 @@ module SimpleOAuth
183
192
  # @return [Hash] the registry entry
184
193
  # @raise [ArgumentError] if the signature method is not registered
185
194
  def fetch(name)
186
- @registry.fetch(normalize_name(name)) do
195
+ @registry.fetch(registry_key(name)) do
187
196
  raise ArgumentError, "Unknown signature method: #{name}. " \
188
197
  "Registered methods: #{@registry.keys.join(", ")}"
189
198
  end
190
199
  end
191
200
 
201
+ # Finds the registry key for a signature method name
202
+ #
203
+ # A name a method was registered under is found in the index of those names. Any other
204
+ # spelling is normalized, without being added to the index, so names from received headers
205
+ # cannot grow it.
206
+ #
207
+ # @api private
208
+ # @param name [String] the signature method name
209
+ # @return [String] the registry key (lowercase, dashes to underscores)
210
+ def registry_key(name)
211
+ @names[name] || normalize_name(name)
212
+ end
213
+
192
214
  # Normalizes signature method name for registry lookup
193
215
  #
194
216
  # @api private
@@ -1,5 +1,5 @@
1
1
  # OAuth 1.0 header generation library
2
2
  module SimpleOauth
3
3
  # The current version of the SimpleOAuth gem
4
- VERSION = "0.5.3".freeze
4
+ VERSION = "0.5.4".freeze
5
5
  end
@@ -19,6 +19,9 @@ module SimpleOAuth
19
19
  # Registry of signature method implementations (class-level instance variable)
20
20
  self.@registry: Hash[String, registry_entry]
21
21
 
22
+ # The registry key of each name a signature method was registered under
23
+ self.@names: Hash[String | Symbol, String]
24
+
22
25
  # Registers a custom signature method
23
26
  def self.register: (String | Symbol name, ?rsa: bool, ?verify: verifier_block?, ?digest: String) { (untyped, String) -> String } -> void
24
27
 
@@ -57,6 +60,9 @@ module SimpleOAuth
57
60
  # Looks up a registered signature method
58
61
  def self.fetch: (String | Symbol name) -> registry_entry
59
62
 
63
+ # Finds the registry key for a signature method name
64
+ def self.registry_key: (String | Symbol name) -> String
65
+
60
66
  # Normalizes signature method name for registry lookup
61
67
  def self.normalize_name: (String | Symbol name) -> String
62
68
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_oauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Richert