From: Dave Fayram Date: 2003-08-28T02:46:38+09:00 Subject: Design help? Mixins and duck-typing Hi folks, My understanding of proper Ruby and duck-typing idoms is still pretty raw, so I decided to ask you folks for help. I'm making a binding to libpcap and libnet for Ruby, which will allow you to do non-time-critical network traffic analysis in Ruby. Part of my design was that Packet representations will "mix in" their protocols. For instance, a packet could be of many different protocols, but still be an IP packet (TCP, UDP, custom protocol). Likewise, a packet could be a TCP or UDP packet, but not be transmitted via IP. To me, this seems to be an ideal case for mix-ins. However, this brings up the problem. Sometimes, people will want to know what kind of packet a relatively broad filter is spitting back. Is it TCP or UDP? Is it IP or ICMP? My first instinct was to just let them check the inclusion history. However, recent reading has revealed to me that relying on the class and inheritance hierarchy is not the best way to go about doing things in Ruby, since things are so dynamic. What then is the right way to let users of the library I am writing check packet type? A method to include symbols seems to me to be a duplication of information, which should be avoided. I suppose is_tcp? and is_ip? would be viable, but seems inelegant to me. Am I just being picky, or what? Any suggestions are welcome. Thanks for your time! -- Dave Fayram kirindave@lensmen.net Developer / Idealist --