# Doodle 0.2.3 Released

**URL:** <https://www.ruby-forum.com/t/doodle-0-2-3-released/162863>\
**Category:** Ruby\
**Created:** [March 14, 2009, 6:01pm UTC](https://www.ruby-forum.com/t/doodle-0-2-3-released/162863 "2009-03-14T18:01:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![sean](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f0a364/32.png) [@sean](https://www.ruby-forum.com/u/sean)\
**Post date:** [March 14, 2009, 6:01pm UTC](https://www.ruby-forum.com/t/doodle-0-2-3-released/162863/1 "2009-03-14T18:01:00Z")

</div>

doodle version 0.2.3 has been released!

- [http://doodle.rubyforge.org](http://doodle.rubyforge.org)

Doodle is a gem for simplifying the definition of Ruby classes by  
making attributes and their properties more declarative. Doodle is  
eco-friendly: it does not globally modify Object, Class or Module.

Changes:

## 0.2.3 / 2009-03-06

- Features:
  - collect can now take multiple types, e.g.  
has :shapes, :collect =\> [Circle, Square]  
or  
has :shapes, :collect =\> {:circle =\> Circle, :square =\> Square}
  - to\_json and from\_json - see  
http:://doodle.rubyforge.org/doodle-json.html for details
  - can now specify :must and :from directly in #has params hash, e.g.  
has :answer, :from =\> { String =\> proc {|c| c.to\_i } },  
:must =\> { “be 42” =\> proc {|c| c == 42 } }
  - added #assigned? for attributes, e.g.  
if obj.assigned?(:name) # =\> true if @name exists
  - added key\_values:  
class Foo \< Doodle  
has :name  
has :count  
end  
Foo.new(‘a’, 1).doodle.key\_values # =\> [[:name, “a”], [:count, 1]]
  - and key\_values\_without\_defaults
  - added :expand =\> [false|true] to Doodle::App::Filename - expands  
path if set to true. Default = false
  - all specs pass on jruby-1.2.0RC2 and ruby 1.8.7p72
  - plus more docs + specs

- [http://doodle.rubyforge.org](http://doodle.rubyforge.org)
