# \[QUIZ\] #67 metakoans.rb

**URL:** <https://www.ruby-forum.com/t/quiz-67-metakoans-rb/116501>\
**Category:** Ruby\
**Created:** [October 6, 2007, 5:01am UTC](https://www.ruby-forum.com/t/quiz-67-metakoans-rb/116501 "2007-10-06T05:01:37Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ari\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a698b9/32.png) [@Ari\_B](https://www.ruby-forum.com/u/Ari_B)\
**Post date:** [October 6, 2007, 5:01am UTC](https://www.ruby-forum.com/t/quiz-67-metakoans-rb/116501/1 "2007-10-06T05:01:37Z")

</div>

Here is my solution: I got stuck on like 6, so I borrowed a line and  
a half from Adam S…

I understand it looks a lot like his code, but I swear, i only  
borrowed 12 and part of 13 from him!

#!/usr/local/bin/ruby

# 

# Created by me on 2007-10-05.

# Some code (lines 12, and part of 13) borrowed from Adam S.

# Copyright © 2007. All pwnage reserved.

class Object  
def attribute(\*vars, &b)  
vars.each do |var|  
var.each\_pair{|k,v| attribute [k,v] } and next if var.is\_a? Hash  
var, v = var # Idea borrowed [stolen] from Adam S…  
Brilliant, I might add!  
class\_eval “def #{var}; @#{var} = (defined?(@#{var}) ? @#  
{var} : #{var}\_proc); end” # Set up getters  
attr\_writer var.to\_sym #  
setters  
class\_eval “def #{var}?; return (self.#{var}.nil? ? false :  
true ); end” # and queries  
define\_method “#{var}\_proc”, b || Proc.new {v}  
end  
end  
end

Ari B.  
--------------------------------------------|  
If you’re not living on the edge,  
then you’re just wasting space.
