summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenichi Kamiya <kachick1@gmail.com>2019-06-21 12:28:28 +0900
committerBenoit Daloze <eregontp@gmail.com>2019-06-21 18:25:01 +0200
commitd01fd821875b989affc36e54e98f5dd67f47062e (patch)
treee34d7777ea878d7a5cc78d3429b3014dcccdf937
parent3b2d11ad90fcb64b41acc9006dfd1e40b4bd9000 (diff)
Alias ENV.merge! as ENV.update
[Feature #15947] Closes: https://github.com/ruby/ruby/pull/2246
-rw-r--r--hash.c3
-rw-r--r--spec/ruby/core/env/merge_spec.rb8
-rw-r--r--spec/ruby/core/env/shared/update.rb21
-rw-r--r--spec/ruby/core/env/update_spec.rb23
4 files changed, 34 insertions, 21 deletions
diff --git a/hash.c b/hash.c
index 2982afad9d..8af5be688e 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 0000000000..b418cd11f4
--- /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 0000000000..cd09877243
--- /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 9f8775138a..95a8a2eb49 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