Loading lib/labkit/rate_limit/identifier.rb +4 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ module Labkit def initialize(attributes = {}) normalised = {} original_keys = {} attributes.each do |key, value| unless key.respond_to?(:to_sym) Loading @@ -33,9 +34,11 @@ module Labkit # Reject { user: 1, "user" => 2 } (and its reverse order): silently # choosing a value would make the rate-limit bucket insertion-order dependent. raise DuplicateNormalizedKeyError, "Identifier keys normalize to the same key #{normalised_key.inspect}: #{key.inspect}" "Identifier keys normalize to the same key #{normalised_key.inspect}: " \ "#{original_keys[normalised_key].inspect} and #{key.inspect}" end original_keys[normalised_key] = key normalised[normalised_key] = value end Loading spec/labkit/rate_limit/identifier_spec.rb +2 −2 Original line number Diff line number Diff line Loading @@ -22,12 +22,12 @@ RSpec.describe Labkit::RateLimit::Identifier do it "rejects a symbol key followed by its string equivalent" do expect { described_class.new(user: 1, "user" => 2) } .to raise_error(described_class::DuplicateNormalizedKeyError, /:user/) .to raise_error(described_class::DuplicateNormalizedKeyError, /:user and "user"/) end it "rejects a string key followed by its symbol equivalent" do expect { described_class.new("user" => 1, user: 2) } .to raise_error(described_class::DuplicateNormalizedKeyError, /:user/) .to raise_error(described_class::DuplicateNormalizedKeyError, /"user" and :user/) end it "rejects duplicate normalized keys even when their values are equal" do Loading Loading
lib/labkit/rate_limit/identifier.rb +4 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ module Labkit def initialize(attributes = {}) normalised = {} original_keys = {} attributes.each do |key, value| unless key.respond_to?(:to_sym) Loading @@ -33,9 +34,11 @@ module Labkit # Reject { user: 1, "user" => 2 } (and its reverse order): silently # choosing a value would make the rate-limit bucket insertion-order dependent. raise DuplicateNormalizedKeyError, "Identifier keys normalize to the same key #{normalised_key.inspect}: #{key.inspect}" "Identifier keys normalize to the same key #{normalised_key.inspect}: " \ "#{original_keys[normalised_key].inspect} and #{key.inspect}" end original_keys[normalised_key] = key normalised[normalised_key] = value end Loading
spec/labkit/rate_limit/identifier_spec.rb +2 −2 Original line number Diff line number Diff line Loading @@ -22,12 +22,12 @@ RSpec.describe Labkit::RateLimit::Identifier do it "rejects a symbol key followed by its string equivalent" do expect { described_class.new(user: 1, "user" => 2) } .to raise_error(described_class::DuplicateNormalizedKeyError, /:user/) .to raise_error(described_class::DuplicateNormalizedKeyError, /:user and "user"/) end it "rejects a string key followed by its symbol equivalent" do expect { described_class.new("user" => 1, user: 2) } .to raise_error(described_class::DuplicateNormalizedKeyError, /:user/) .to raise_error(described_class::DuplicateNormalizedKeyError, /"user" and :user/) end it "rejects duplicate normalized keys even when their values are equal" do Loading