Issue #16615 has been updated by Dan0042 (Daniel DeLorme).

Description updated

Maybe a more concrete example would be helpful:

```ruby
def defc
  define_method(:c){ }
end
class Foo
  private
  def a; end
  attr_accessor :b
  defc
end
Foo.new.a #=> NoMethodError (private method `a' called)
Foo.new.b #=> NoMethodError (private method `b' called)
Foo.new.c #=> nil
```

Having `c` be declared as private may be desirable... but there's sure to be a compatibility impact.

Is that why you added the condition that this should only happen if the meta-method (bar / defc) returns the instance method name (baz / c) as a symbol?

----------------------------------------
Feature #16615: Group style access scope for macros
https://bugs.ruby-lang.org/issues/16615#change-84556

* Author: ted (Ted Johansson)
* Status: Open
* Priority: Normal
----------------------------------------
Given a method `.bar`, which defines an instance method `#baz` on a class, and returns the defined method's name as a symbol (`:baz`).

```
class Foo

  private

  # On evaluation defines a method and returns its name.
  # In current Ruby, that method will be public. The suggested
  # behaviour is to make it private, since the class method
  # which defines the instance method is in the private scope.
  #
  bar :baz
end
```

it would be neat if the dynamically defined instance method respected the scope in which its definition originated. (In this particular case `private`.)

Essentially the request is to extend the special powers of `attr_*` (being able to define methods that honour visibility scopes) to any method.

Note: I am aware that inline access scopes already work for dynamically defined methods, as they merely accept a symbol as an argument.

Edit: Changed `macro` to `bar` so people don't get hung up on the name of the method (which has no importance to the proposal.)



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>