There is a longer text down there separated by some dashes that I wrote but it helped me to realize something: maybe `.each` is better. I like the attr_reader for the reasons mentioned below but going back to the class it already behaves like a class implementing add/remove itself. The thing is that with the attr_reader one would get hold of the buttons and maybe expect that they could remove a button there and it would work. But that would mess up the whole working with the selection listeners.

So I guess in this case `.each`/Enumerable is a superior solution. I'd kind of like it to also support empty? and .length then as well. 

There is an easy way to do this (and to support each).

to the top of the class:

```ruby
extend Forwardable
def_delegators :@radio_buttons, :each, :length, :empty?
```

(see the [forwardable docs](http://www.ruby-doc.org/stdlib-2.0.0/libdoc/forwardable/rdoc/Forwardable.html#method-i-def_delegators) - we already require and use it)

Thanks for having this discussion!
Tobi

-----------------------------------------------------------------------
You are right it is a very subtle difference and probably not that important. For me from an OOD perspective it is just the question of what that tells me, e.g. each and Enumerable tell me: "Hi I hold a collection over which you can easily iterate and do all kind of fancy pancy stuff with and I expect you to do that." Whereas the attr_reader says: "Hi I manage some collection of things, here is that collection so you can do with it what you want."

From the stand point of encapsulation the attr_reader is inferior (as we expose internal structure) but I like it more here. It's also less code to maintain and it gives one the sort of introspection that might be good for testing/building something with it. Whereas an each/Enumerable makes it part of the interface of that object that people might start using but isn't used in the implementation yet at all. Also to be consistent we would have to implement `.empty?` and `.length`. The object returned by attr_reader already supports those. (and break with sudden realization when studying the code once again)