From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.9 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 459BE1F4B4 for ; Fri, 2 Apr 2021 19:34:40 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 4D0E21209C9; Sat, 3 Apr 2021 04:33:34 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id D31491209B7 for ; Sat, 3 Apr 2021 04:33:31 +0900 (JST) Received: by filterdrecv-p3iad2-7d7c446bd4-jqfwg with SMTP id filterdrecv-p3iad2-7d7c446bd4-jqfwg-19-606771C2-1E 2021-04-02 19:34:26.330248589 +0000 UTC m=+867691.955004411 Received: from herokuapp.com (unknown) by ismtpd0151p1mdw1.sendgrid.net (SG) with ESMTP id NUGnNSW8TjKpbjWOUi-wIA for ; Fri, 02 Apr 2021 19:34:26.222 +0000 (UTC) Date: Fri, 02 Apr 2021 19:34:26 +0000 (UTC) From: lamont@scriptkiddie.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 79232 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 17472 X-Redmine-Issue-Author: naruse X-Redmine-Sender: lamont X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?4Kn0dANS2V8yOnn1ZPtv+=2FZkTLjL6a8xnPqkRegpFALHTBoFSZLyuwNnwEvC3c?= =?us-ascii?Q?o7sked7yd52ANd8SSoXq3wMac+XwGnWSGRk8kit?= =?us-ascii?Q?oZoNDEHlaDewTrfEo8CK6aG0vorsrvBfogJWbv7?= =?us-ascii?Q?Sxw5sb=2Fjll9M4OVsSL0Hyqzfoc03YC8Hvy35FkB?= =?us-ascii?Q?YpBd=2FXpnTeTncxZOF=2FOHSxJTMtj0f6ePITOGgVZ?= =?us-ascii?Q?mr8YAx09PVEyBqsoA=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 103189 Subject: [ruby-core:103189] [Ruby master Feature#17472] HashWithIndifferentAccess like Hash extension X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #17472 has been updated by lamont (Lamont Granquist). Any implementation should probably consider recursive structures under arrays and all the mutator methods on Array: ``` ruby % pry [1] pry(main)> require 'active_support/hash_with_indifferent_access' => true [2] pry(main)> test = ActiveSupport::HashWithIndifferentAccess.new => {} [3] pry(main)> test['foo'] = [] => [] [4] pry(main)> test['foo'] << { bar: "baz" } => [{:bar=>"baz"}] [5] pry(main)> test.class => ActiveSupport::HashWithIndifferentAccess [6] pry(main)> test['foo'][0].class => Hash [7] pry(main)> test['foo'] = [ { bar: "baz" } ] NoMethodError: undefined method `nested_under_indifferent_access' for {:bar=>"baz"}:Hash from /Users/lamont/.asdf/installs/ruby/3.0.0/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/hash_with_indifferent_access.rb:381:in `convert_value' [8] pry(main)> ``` ---------------------------------------- Feature #17472: HashWithIndifferentAccess like Hash extension https://bugs.ruby-lang.org/issues/17472#change-91264 * Author: naruse (Yui NARUSE) * Status: Open * Priority: Normal * Target version: 3.1 ---------------------------------------- Rails has [ActiveSupport::HashWithIndifferentAccess](https://api.rubyonrails.org/classes/ActiveSupport/HashWithIndifferentAccess.html), which is widely used in Rails to handle Request, Session, ActionView's form construction, ActiveRecord's DB communication, and so on. It receives String or Symbol and normalize them to fetch the value. But it is implemented with Ruby. If we provide C implementation of that, Rails will gain the performance improvement. summary of previous discussion: https://github.com/rails/rails/pull/40182#issuecomment-687607812 -- https://bugs.ruby-lang.org/