NAME

openobject

SYNOPSIS

a simple property based container that's much more capable than a blankslate
but far less polluted than ruby's built-in OpenStruct.  openobject is a tiny
lib that couples the power of the 'fattr' gem alongside a slightly
enhanced blankslate type object.

INSTALL

gem install openobject

URIS

http://codeforpeople.com/lib/ruby/
http://rubyforge.org/projects/codeforpeople/

HISTORY

1.0.0
  github import

0.0.3
  added support for default values

SAMPLES

<========< sample/a.rb >========>

~ > cat sample/a.rb

  require 'openobject'

  oo = openobject

  oo.foo = 42
  oo.bar 'forty-two'

  p oo.foo
  p oo.bar

~ > ruby sample/a.rb

  42
  "forty-two"

<========< sample/b.rb >========>

~ > cat sample/b.rb

  require 'openobject'

  oo = openobject :foo => 42, :bar => 'forty-two' do
    foobar 42.0
  end

  p oo.to_hash
  p oo.fattrs

~ > ruby sample/b.rb

  {"foobar"=>42.0, "foo"=>42, "bar"=>"forty-two"}
  ["foo", "bar", "foobar"]

<========< sample/c.rb >========>

~ > cat sample/c.rb

  require 'openobject'

  oo = openobject :foo => 42

  oo.bar = 'forty-two' 

  oo.extend do
    fattr :foobar => 42.0

    def barfoo 
      [ foo, bar, foobar ]
    end
  end

  p oo.foobar
  p oo.barfoo

~ > ruby sample/c.rb

  42.0
  [42, "forty-two", 42.0]

<========< sample/d.rb >========>

~ > cat sample/d.rb

  require 'openobject'

  config =
    oo{
      header oo(:width => 42, :height => 42)
      footer oo{ width 42.0; height 42.0 }
    }

  p config.header.width
  p config.footer.height

~ > ruby sample/d.rb

  42
  42.0

<========< sample/e.rb >========>

~ > cat sample/e.rb

  require 'openobject'

  css = oo

  css.class = 'subtle'
  css.style = 'display:none'

~ > ruby sample/e.rb

<========< sample/f.rb >========>

~ > cat sample/f.rb

  require 'openobject'

  # by default you cannot retrive unset values
  #
    o = oo
    begin; o.foo; rescue NameError; p NameError; end

  #=> NameError

  # but you can set anything
  #
    o = oo
    o.foo = 42
    p o.foo

  #=> 42

  # blocks can extend openobjects
  #
    o = oo{ def bar() 42 end }
    p o.bar

  #=> 42

  # you can set a default value which will be returned for anything
  # missing value
  #
    o = oo{ default 42 }
    p o.bar

  #=> 42

  # and the default value itself can be someting block/proc-like
  #
    n = 40
    o = oo{ default{ n += 2 } }
    p o.foo

  #=> 42

~ > ruby sample/f.rb

  NameError
  42
  42
  42
  42

AUTHOR

ara.t.howard@gmail.com