Skip to content

Commit

Permalink
Alias ENV.merge! as ENV.update
Browse files Browse the repository at this point in the history
[Feature #15947]

Closes: ruby#2246
  • Loading branch information
kachick authored and eregon committed Jun 21, 2019
1 parent 3b2d11a commit d01fd82
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 21 deletions.
3 changes: 3 additions & 0 deletions hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
8 changes: 8 additions & 0 deletions spec/ruby/core/env/merge_spec.rb
Original file line number Diff line number Diff line change
@@ -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
21 changes: 21 additions & 0 deletions spec/ruby/core/env/shared/update.rb
Original file line number Diff line number Diff line change
@@ -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
23 changes: 2 additions & 21 deletions spec/ruby/core/env/update_spec.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit d01fd82

Please sign in to comment.