# Re: metakoans.rb (#67)

**URL:** <https://www.ruby-forum.com/t/re-metakoans-rb-67/72017>\
**Category:** Ruby\
**Created:** [February 22, 2006, 9:10pm UTC](https://www.ruby-forum.com/t/re-metakoans-rb-67/72017 "2006-02-22T21:10:33Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![davidtl](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/35a633/32.png) [@davidtl](https://www.ruby-forum.com/u/davidtl)\
**Post date:** [February 22, 2006, 9:10pm UTC](https://www.ruby-forum.com/t/re-metakoans-rb-67/72017/1 "2006-02-22T21:10:33Z")

</div>

Just coded to pass all koans.  
The program only accepts “one” attribute. (it only accepts the first  
one, others will be ignore)  
There are no koan to say what kind of behavior for multi-attribute  
with hash table and block given at the same time.

class Module  
def attribute(hash, &block)

```
(name, default) = hash.is_a?(Hash) ? [hash.keys[0],

```

hash.values[0]] : [hash, nil]

```
define_method("#{name}?") { instance_eval("@#{name} != nil") }

define_method("#{name}") do
  if !instance_variables.include?( "@#{name}" )
    instance_variable_set("@#{name}", block.nil? ? default :

```

instance\_eval(&block))  
else  
instance\_variable\_get("@#{name}")  
end  
end

```
class_eval <<-METHOD
  def #{name}=(value)
    @#{name} = value
  end
METHOD

```

end  
end
