From: merch-redmine@... Date: 2018-06-06T18:29:34+00:00 Subject: [ruby-core:87432] [Ruby trunk Feature#14382] Make public access of a private constant call const_missing Issue #14382 has been updated by jeremyevans0 (Jeremy Evans). File 0001-Make-public-access-of-a-private-constant-call-const_.patch added nobu (Nobuyoshi Nakada) wrote: > In the case it is accessed from an inherited class, the receiver class/module may differ from class/module which defines the constant as private. > So I think that the hook method will need another parameter. Attached is an updated patch against current trunk with an additional test showing use with nested constants, where the superclass calls `private_constant` and the subclass accesses the constant publicly. It shows that `const_missing` is still called on the subclass in that case, which I think is the most consistent behavior as that mirrors how `method_missing` works. If this isn't the behavior you would expect in this case, can you please explain what behavior you expect? ---------------------------------------- Feature #14382: Make public access of a private constant call const_missing https://bugs.ruby-lang.org/issues/14382#change-72425 * Author: jeremyevans0 (Jeremy Evans) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- Calling `obj.foo` where `foo` is a private method of `obj` calls `method_missing`. You would expect `klass::FOO` where `FOO` is a private constant of `klass` to call `const_missing`, but currently it doesn't. This makes a small change so that `const_missing` will be called in such cases. In addition to similarity to `method_missing`, the main reason for doing this is it offers a way to deprecate public constants. Currently, if you have a public constant and want to make it a private constant, you can't do it without breaking possible callers. With this patch, you can make it a private constant, then override `const_missing` in the class, and have `const_missing` print a deprecation warning and then return the value of the constant. ---Files-------------------------------- 0001-Make-public-access-of-a-private-constant-call-const_.patch (2.68 KB) 0001-Make-public-access-of-a-private-constant-call-const_.patch (3.29 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: