Singleton public methods

I would like retrieve a full list of singleton public methos for a `Foo`
module and `Foo::Bar` class.

The best thing I was able to come up with was this:

Foo.singleton_methods(false) & Foo.public_methods
Foo::Bar.singleton_methods(false) & Foo::Bar.public_methods

It feels to me that we should have a better way of doing it.

Any ideas?

Maybe you’d better spell out exactly what you mean by “singleton methods”. It’s not a term I tend to use because people use it in different ways, I think?

I suspect that from the Ruby documentation point of view, methods on module included in a class aren’t singleton. Methods on a module included in an *object*, inside a “class << self” block, are.

···

From: ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org] On Behalf Of Daniel Ferreira
Sent: 12 December 2016 9:34 am
To: ruby-talk@ruby-lang.org
Subject: Singleton public methods

I would like retrieve a full list of singleton public methos for a `Foo` module and `Foo::Bar` class.

The best thing I was able to come up with was this:

Foo.singleton_methods(false) & Foo.public_methods
Foo::Bar.singleton_methods(false) & Foo::Bar.public_methods

It feels to me that we should have a better way of doing it.

Any ideas?

Click here to view Company Information and Confidentiality Notice.<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer>

Andy, http://ruby-doc.org/core-2.3.0/Object.html#method-i-singleton_methods
returns public and protected methods.
I'm only interested in the public ones.

The definition of singleton method I believe can be inferred by looking at
the behaviour of this particular method.

If you keep struggling with it please say so and I will try to explain you.

···

On Mon, 12 Dec 2016 at 09:49, Andy Jones <Andy.Jones@jameshall.co.uk> wrote:

Maybe you’d better spell out exactly what you mean by “singleton methods”.
It’s not a term I tend to use because people use it in different ways, I
think?

I suspect that from the Ruby documentation point of view, methods on module
included in a class aren’t singleton. Methods on a module included in an *
*object**,

inside a “class << self” block, are.

*From:* ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org]

*On Behalf Of *Daniel Ferreira

*Sent:* 12 December 2016 9:34 am

*To:* ruby-talk@ruby-lang.org

*Subject:* Singleton public methods

I would like retrieve a full list of singleton public methos for a `Foo`
module and `Foo::Bar` class.

The best thing I was able to come up with was this:


Foo.singleton_methods(false) & Foo.public_methods

Foo::Bar.singleton_methods(false) & Foo::Bar.public_methods

It feels to me that we should have a better way of doing it.

Any ideas?

Click here to view Company Information and Confidentiality Notice.
<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer>

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org?subject=unsubscribe>

<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk>

I was just looking at that. I’m not “struggling” with anything (although the example clearly shows four very different types of method, with either two or three of them being singleton, depending… room for confusion there in my opinion).
I think, perhaps and in general, most people shy away from using protected methods. Which is perhaps why your use case isn’t well supported.

It also looks as if you want the singleton methods on a module which contains the class? As I was trying to say in my previous post, I don’t think you are going to get a single call that treats those as singleton methods on the class; as the example we are both looking at shows, Ruby doesn’t categorise them as such.

···

From: ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org] On Behalf Of Daniel Ferreira
Sent: 12 December 2016 10:03 am
To: Ruby users
Subject: Re: Singleton public methods

Andy, http://ruby-doc.org/core-2.3.0/Object.html#method-i-singleton_methods returns public and protected methods.
I'm only interested in the public ones.

The definition of singleton method I believe can be inferred by looking at the behaviour of this particular method.

If you keep struggling with it please say so and I will try to explain you.

On Mon, 12 Dec 2016 at 09:49, Andy Jones <Andy.Jones@jameshall.co.uk<mailto:Andy.Jones@jameshall.co.uk>> wrote:

Maybe you’d better spell out exactly what you mean by “singleton methods”. It’s not a term I tend to use because people use it in different ways, I think?

I suspect that from the Ruby documentation point of view, methods on module included in a class aren’t singleton. Methods on a module included in an *object*,

inside a “class << self” block, are.

From: ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org<mailto:ruby-talk-bounces@ruby-lang.org>]

On Behalf Of Daniel Ferreira

Sent: 12 December 2016 9:34 am

To: ruby-talk@ruby-lang.org<mailto:ruby-talk@ruby-lang.org>

Subject: Singleton public methods

I would like retrieve a full list of singleton public methos for a `Foo` module and `Foo::Bar` class.

The best thing I was able to come up with was this:


Foo.singleton_methods(false) & Foo.public_methods

Foo::Bar.singleton_methods(false) & Foo::Bar.public_methods

It feels to me that we should have a better way of doing it.

Any ideas?

Click here to view Company Information and Confidentiality Notice.<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer>

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org<mailto:ruby-talk-request@ruby-lang.org>?subject=unsubscribe>

<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk>

Click here to view Company Information and Confidentiality Notice.<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer>

Maybe there is a space for a new feature request then?
I tend to use protected a lot.
The definition of the public interface is very important in my point of
view.
I try to keep it as simple as possible.
Documentation is another component that I believe is very important.
When I want a private method to be documented I make it protected to
emphasise that its importance.
A private method can be discarded at any time.
A protected method implies a contract in my way of looking at things.
It is what I call the *internal interface*

···

On Mon, 12 Dec 2016 at 10:20, Andy Jones <Andy.Jones@jameshall.co.uk> wrote:

I was just looking at that. I’m not “struggling” with anything (although
the example clearly shows four very different types of method, with either
two or

three of them being singleton, depending… room for confusion there in my
opinion).

I think, perhaps and in general, most people shy away from using protected
methods. Which is perhaps why your use case isn’t well supported.

It also looks as if you want the singleton methods on a module which
contains the class? As I was trying to say in my previous post, I don’t
think you are

going to get a single call that treats those as singleton methods on the
class; as the example we are both looking at shows, Ruby doesn’t categorise
them as such.

*From:* ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org]

*On Behalf Of *Daniel Ferreira

*Sent:* 12 December 2016 10:03 am

*To:* Ruby users

*Subject:* Re: Singleton public methods

Andy,

Class: Object (Ruby 2.3.0)
returns public and protected methods.

I'm only interested in the public ones.

The definition of singleton method I believe can be inferred by looking at
the behaviour of this particular method.

If you keep struggling with it please say so and I will try to explain you.

On Mon, 12 Dec 2016 at 09:49, Andy Jones <Andy.Jones@jameshall.co.uk> > wrote:

Maybe you’d better spell out exactly what you mean by “singleton methods”.

It’s not a term I tend to use because people use it in different ways, I
think?

I suspect that from the Ruby documentation point of view, methods on module

included in a class aren’t singleton. Methods on a module included in an *
*object**,

inside a “class << self” block, are.

*From:*

ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org]

*On Behalf Of *Daniel Ferreira

*Sent:* 12 December 2016 9:34 am

*To:*

ruby-talk@ruby-lang.org

*Subject:* Singleton public methods

I would like retrieve a full list of singleton public methos for a `Foo`
module and `Foo::Bar` class.

The best thing I was able to come up with was this:


Foo.singleton_methods(false) & Foo.public_methods

Foo::Bar.singleton_methods(false) & Foo::Bar.public_methods

It feels to me that we should have a better way of doing it.

Any ideas?

Click here to view Company Information and Confidentiality Notice.
<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer&gt;

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org?subject=unsubscribe>

<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk&gt;

Click here to view Company Information and Confidentiality Notice.
<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer&gt;

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org?subject=unsubscribe>

<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk&gt;

I’m completely with you on the idea of contracts. Technically, I suppose you are right that protected methods are exposed to other objects and therefore part of the contract.

But I confess I’ve never found a use for a method that can only be accessed by other objects of the same class. The idea seems fundamentally non-OOP to me; my objects should not care where their incoming messages came from, or what sort of object they are sending messages to.

I think Matz is on-record as saying that protected is something he would do very differently now – not that that really matters.

···

From: ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org] On Behalf Of Daniel Ferreira
Sent: 12 December 2016 10:29 am
To: Ruby users
Subject: Re: Singleton public methods

Maybe there is a space for a new feature request then?
I tend to use protected a lot.
The definition of the public interface is very important in my point of view.
I try to keep it as simple as possible.
Documentation is another component that I believe is very important.
When I want a private method to be documented I make it protected to emphasise that its importance.
A private method can be discarded at any time.
A protected method implies a contract in my way of looking at things.
It is what I call the *internal interface*

On Mon, 12 Dec 2016 at 10:20, Andy Jones <Andy.Jones@jameshall.co.uk<mailto:Andy.Jones@jameshall.co.uk>> wrote:

I was just looking at that. I’m not “struggling” with anything (although the example clearly shows four very different types of method, with either two or

three of them being singleton, depending… room for confusion there in my opinion).

I think, perhaps and in general, most people shy away from using protected methods. Which is perhaps why your use case isn’t well supported.

It also looks as if you want the singleton methods on a module which contains the class? As I was trying to say in my previous post, I don’t think you are

going to get a single call that treats those as singleton methods on the class; as the example we are both looking at shows, Ruby doesn’t categorise them as such.

From: ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org<mailto:ruby-talk-bounces@ruby-lang.org>]

On Behalf Of Daniel Ferreira

Sent: 12 December 2016 10:03 am

To: Ruby users

Subject: Re: Singleton public methods

Andy,

http://ruby-doc.org/core-2.3.0/Object.html#method-i-singleton_methods returns public and protected methods.

I'm only interested in the public ones.

The definition of singleton method I believe can be inferred by looking at the behaviour of this particular method.

If you keep struggling with it please say so and I will try to explain you.

On Mon, 12 Dec 2016 at 09:49, Andy Jones <Andy.Jones@jameshall.co.uk<mailto:Andy.Jones@jameshall.co.uk>> wrote:

Maybe you’d better spell out exactly what you mean by “singleton methods”.

It’s not a term I tend to use because people use it in different ways, I think?

I suspect that from the Ruby documentation point of view, methods on module

included in a class aren’t singleton. Methods on a module included in an *object*,

inside a “class << self” block, are.

From:

ruby-talk [mailto:ruby-talk-bounces@ruby-lang.org<mailto:ruby-talk-bounces@ruby-lang.org>]

On Behalf Of Daniel Ferreira

Sent: 12 December 2016 9:34 am

To:

ruby-talk@ruby-lang.org<mailto:ruby-talk@ruby-lang.org>

Subject: Singleton public methods

I would like retrieve a full list of singleton public methos for a `Foo` module and `Foo::Bar` class.

The best thing I was able to come up with was this:


Foo.singleton_methods(false) & Foo.public_methods

Foo::Bar.singleton_methods(false) & Foo::Bar.public_methods

It feels to me that we should have a better way of doing it.

Any ideas?

Click here to view Company Information and Confidentiality Notice.<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer>

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org<mailto:ruby-talk-request@ruby-lang.org>?subject=unsubscribe>

<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk>

Click here to view Company Information and Confidentiality Notice.<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer>

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org<mailto:ruby-talk-request@ruby-lang.org>?subject=unsubscribe>

<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk>

Click here to view Company Information and Confidentiality Notice.<http://www.jameshall.co.uk/index.php/small-print/email-disclaimer>