From: "edufcarvalho (Eduardo Carvalho) via ruby-core" Date: 2023-05-30T20:07:28+00:00 Subject: [ruby-core:113708] [Ruby master Feature#19699] Need a way to store values like dig Issue #19699 has been updated by edufcarvalho (Eduardo Carvalho). Currently, there is no way to perform a `.store` operation on nested hashes in Ruby as there is for accessing them using `.dig`, so I would like to propose something like: Hash#dig_store(*args, **kwargs), which fills the value at *args with **kwargs if the value at *args is a hash, or with the args.last if the value is something else. Here are some examples: ```ruby a = {} a.dig_store(:a, :b, :c, :d, 10) => {:a=>{:b=>{:c=>{:d=>10}}}} ``` ```ruby a = {} a.dig_store(:a, :b, :c, :d, a: 10, b: 20, c: 30) => {:a=>{:b=>{:c=>{:d=>{:a=>10, :b=>20, :c=>30}}}}} ``` ```ruby a = {a: {b: {c: "test"}}} a.dig_store(:a, :b, :c, "123") => {:a=>{:b=>{:c=>"123"}}} ``` ```ruby a = {a: {b: {c: {}}} a.dig_store(:a, :b, :c, a: 10, b: 20) => {:a=>{:b=>{:c=>{:a=>10, :b=>20}}}} ``` I'm not that skilled on Ruby (actually a Junior developer), but i'm looking forward to implementing it if the core team approves ---------------------------------------- Feature #19699: Need a way to store values like dig https://bugs.ruby-lang.org/issues/19699#change-103353 * Author: edufcarvalho (Eduardo Carvalho) * Status: Open * Priority: Normal ---------------------------------------- Currently, there is no way to perform a `.store` operation on nested hashes in Ruby as there is for accessing them using `.dig`, so I would like to propose something like: Hash#dig_store(*args, **kwargs, arg = nil), which fills the value at *args with **kwargs if the value at *args is a hash, or with arg if the value is something else. Here are some examples: ```ruby a = {} a.dig_store(:a, :b, :c, :d, 10) => {:a=>{:b=>{:c=>{:d=>10}}}} ``` ```ruby a = {} a.dig_store(:a, :b, :c, :d, a: 10, b: 20, c: 30) => {:a=>{:b=>{:c=>{:d=>{:a=>10, :b=>20, :c=>30}}}}} ``` ```ruby a = {a: {b: {c: "test"}}} a.dig_store(:a, :b, :c, "123") => {:a=>{:b=>{:c=>"123"}}} ``` ```ruby a = {a: {b: {c: {}}} a.dig_store(:a, :b, :c, a: 10, b: 20) => {:a=>{:b=>{:c=>{:a=>10, :b=>20}}}} ``` I'm not that skilled on Ruby (actually a Junior developer), but i'm looking forward to implementing it if the core team approves it -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/