From d01fd821875b989affc36e54e98f5dd67f47062e Mon Sep 17 00:00:00 2001 From: Kenichi Kamiya Date: Fri, 21 Jun 2019 12:28:28 +0900 Subject: [PATCH] Alias ENV.merge! as ENV.update [Feature #15947] Closes: https://github.com/ruby/ruby/pull/2246 --- hash.c | 3 +++ spec/ruby/core/env/merge_spec.rb | 8 ++++++++ spec/ruby/core/env/shared/update.rb | 21 +++++++++++++++++++++ spec/ruby/core/env/update_spec.rb | 23 ++--------------------- 4 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 spec/ruby/core/env/merge_spec.rb create mode 100644 spec/ruby/core/env/shared/update.rb diff --git a/hash.c b/hash.c index 2982afad9d030f..8af5be688e12e8 100644 --- a/hash.c +++ b/hash.c @@ -5788,6 +5788,8 @@ env_update_i(VALUE key, VALUE val) * call-seq: * ENV.update(hash) -> Hash * ENV.update(hash) { |name, old_value, new_value| block } -> Hash + * ENV.merge!(hash) -> Hash + * ENV.merge!(hash) { |name, old_value, new_value| block } -> Hash * * Adds the contents of +hash+ to the environment variables. If no block is * specified entries with duplicate keys are overwritten, otherwise the value @@ -6059,6 +6061,7 @@ Init_Hash(void) rb_define_singleton_method(envtbl, "invert", env_invert, 0); rb_define_singleton_method(envtbl, "replace", env_replace, 1); rb_define_singleton_method(envtbl, "update", env_update, 1); + rb_define_singleton_method(envtbl, "merge!", env_update, 1); rb_define_singleton_method(envtbl, "inspect", env_inspect, 0); rb_define_singleton_method(envtbl, "rehash", env_none, 0); rb_define_singleton_method(envtbl, "to_a", env_to_a, 0); diff --git a/spec/ruby/core/env/merge_spec.rb b/spec/ruby/core/env/merge_spec.rb new file mode 100644 index 00000000000000..b418cd11f45d5d --- /dev/null +++ b/spec/ruby/core/env/merge_spec.rb @@ -0,0 +1,8 @@ +require_relative '../../spec_helper' +require_relative 'shared/update' + +ruby_version_is "2.7" do + describe "ENV.merge!" do + it_behaves_like :env_update, :merge! + end +end diff --git a/spec/ruby/core/env/shared/update.rb b/spec/ruby/core/env/shared/update.rb new file mode 100644 index 00000000000000..cd0987724308ca --- /dev/null +++ b/spec/ruby/core/env/shared/update.rb @@ -0,0 +1,21 @@ +describe :env_update, shared: true do + it "adds the parameter hash to ENV" do + ENV["foo"].should == nil + ENV.send @method, "foo" => "bar" + ENV["foo"].should == "bar" + ENV.delete "foo" + end + + it "yields key, the old value and the new value when replacing entries" do + ENV.send @method, "foo" => "bar" + ENV["foo"].should == "bar" + ENV.send(@method, "foo" => "boo") do |key, old, new| + key.should == "foo" + old.should == "bar" + new.should == "boo" + "rab" + end + ENV["foo"].should == "rab" + ENV.delete "foo" + end +end diff --git a/spec/ruby/core/env/update_spec.rb b/spec/ruby/core/env/update_spec.rb index 9f8775138a5d90..95a8a2eb4954e1 100644 --- a/spec/ruby/core/env/update_spec.rb +++ b/spec/ruby/core/env/update_spec.rb @@ -1,25 +1,6 @@ require_relative '../../spec_helper' +require_relative 'shared/update' describe "ENV.update" do - - it "adds the parameter hash to ENV" do - ENV["foo"].should == nil - ENV.update "foo" => "bar" - ENV["foo"].should == "bar" - ENV.delete "foo" - end - - it "yields key, the old value and the new value when replacing entries" do - ENV.update "foo" => "bar" - ENV["foo"].should == "bar" - ENV.update("foo" => "boo") do |key, old, new| - key.should == "foo" - old.should == "bar" - new.should == "boo" - "rab" - end - ENV["foo"].should == "rab" - ENV.delete "foo" - end - + it_behaves_like :env_update, :update end