# Eiffel's ability to selectively export class methods in Ruby

**URL:** <https://www.ruby-forum.com/t/eiffels-ability-to-selectively-export-class-methods-in-ruby/96863>\
**Category:** Ruby\
**Created:** [July 2, 2006, 9:30pm UTC](https://www.ruby-forum.com/t/eiffels-ability-to-selectively-export-class-methods-in-ruby/96863 "2006-07-02T21:30:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![kevinkusf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/839c29/32.png) [@kevinkusf](https://www.ruby-forum.com/u/kevinkusf)\
**Post date:** [July 2, 2006, 9:30pm UTC](https://www.ruby-forum.com/t/eiffels-ability-to-selectively-export-class-methods-in-ruby/96863/1 "2006-07-02T21:30:04Z")

</div>

I am trying to simulate Eiffel’s ability to make methods in a class only  
available to specific other classes. I know it is probably impossible to  
make methods only visible to certain other classes, but is there a way  
to make a class throw an exception if called by the wrong class?

For instance:

class Foo  
def bar  
if calling\_class.class != some\_other\_class.class  
raise An\_Entry\_Exception.new  
end  
â?¦rest of class  
end  
end

Specifically is there a way to see what the class of whatever is calling  
a method is (like the variable ‘calling\_class’ above)? Or does anyone  
know of a project that simulates this functionality?

---

<div class="post-metadata">

**Author:** ![kevinkusf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/839c29/32.png) [@kevinkusf](https://www.ruby-forum.com/u/kevinkusf)\
**Post date:** [July 2, 2006, 9:44pm UTC](https://www.ruby-forum.com/t/eiffels-ability-to-selectively-export-class-methods-in-ruby/96863/2 "2006-07-02T21:44:44Z")

</div>

On Jul 2, 2006, at 3:30 PM, kevin kinnett wrote:

> def bar  
> know of a project that simulates this functionality?
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

Google Binding.of\_caller. It’s an evil hack. Good luck.

---

<div class="post-metadata">

**Author:** ![kevinkusf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/839c29/32.png) [@kevinkusf](https://www.ruby-forum.com/u/kevinkusf)\
**Post date:** [July 2, 2006, 10:25pm UTC](https://www.ruby-forum.com/t/eiffels-ability-to-selectively-export-class-methods-in-ruby/96863/3 "2006-07-02T22:25:34Z")

</div>

On Mon, 3 Jul 2006, kevin kinnett wrote:

> ```
> raise An_Entry_Exception.new
> end
> â?¦rest of class
> 
> ```
> 
> end  
> end
> 
> Specifically is there a way to see what the class of whatever is calling  
> a method is (like the variable ‘calling\_class’ above)? Or does anyone  
> know of a project that simulates this functionality?

class Foo  
def bar  
unless [One, Two, Three].include? self.class  
raise An\_Entry\_Exception.new  
end  
end  
end

-a

---

<div class="post-metadata">

**Author:** ![kevinkusf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/839c29/32.png) [@kevinkusf](https://www.ruby-forum.com/u/kevinkusf)\
**Post date:** [July 5, 2006, 8:08pm UTC](https://www.ruby-forum.com/t/eiffels-ability-to-selectively-export-class-methods-in-ruby/96863/4 "2006-07-05T20:08:07Z")

</div>

> Or does anyone know of a project that simulates this functionality?

Yes, see:

[http://www.rcrchive.net/rcr/show/198](http://www.rcrchive.net/rcr/show/198)  
[http://raa.ruby-lang.org/project/pubsub](http://raa.ruby-lang.org/project/pubsub)

Dan Amelang
