Add #except under Ruby 3
Ruby 3 adds the Hash#except method, which should return the correct Hashie object instance when called on a Mash or object using the Hashie::Extensions::IndifferentAccess mixin.
This commit is contained in:
parent
16eb591205
commit
9ba96e03a8
|
@ -54,6 +54,7 @@ Any violations of this scheme are considered to be bugs.
|
|||
|
||||
### Added
|
||||
|
||||
* [#545](https://github.com/hashie/hashie/pull/545): Add `Hashie::Mash#except` and `Hashie::Extensions::IndifferentAccess#except` when running under Ruby 3 to match newly added Ruby stdlib method - [@jackjennings](https://github.com/jackjennings).
|
||||
* [#499](https://github.com/hashie/hashie/pull/499): Add `Hashie::Extensions::Mash::PermissiveRespondTo` to make specific subclasses of Mash fully respond to messages for use with `SimpleDelegator` - [@michaelherold](https://github.com/michaelherold).
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -162,6 +162,13 @@ module Hashie
|
|||
end
|
||||
end
|
||||
|
||||
with_minimum_ruby('3.0.0') do
|
||||
def except(*keys)
|
||||
string_keys = keys.map { |key| convert_key(key) }
|
||||
super(*string_keys)
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def hash_lacking_indifference?(other)
|
||||
|
|
|
@ -351,6 +351,13 @@ module Hashie
|
|||
end
|
||||
end
|
||||
|
||||
with_minimum_ruby('3.0.0') do
|
||||
def except(*keys)
|
||||
string_keys = keys.map { |key| convert_key(key) }
|
||||
self.class.new(super(*string_keys))
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def method_name_and_suffix(method_name)
|
||||
|
|
|
@ -357,6 +357,18 @@ describe Hashie::Extensions::IndifferentAccess do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
with_minimum_ruby('3.0.0') do
|
||||
describe '#except' do
|
||||
let(:h) { subject.build(foo: 'bar', baz: 'qux') }
|
||||
|
||||
it 'indifferently excepts keys from the hash' do
|
||||
sliced_h = { 'baz' => 'qux' }
|
||||
expect(h.except('foo')).to eq sliced_h
|
||||
expect(h.except(:foo)).to eq sliced_h
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'with merge initializer' do
|
||||
|
|
|
@ -1097,4 +1097,17 @@ describe Hashie::Mash do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
with_minimum_ruby('3.0.0') do
|
||||
context '#except' do
|
||||
subject(:mash) { described_class.new(a: 'A', b: 'B') }
|
||||
it 'return a Hashie::Mash' do
|
||||
expect(mash.except(:b)).to be_kind_of(described_class)
|
||||
end
|
||||
|
||||
it 'excludes keys' do
|
||||
expect(mash.except(:b)).to eq('a' => 'A')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue