I'm such a nice guy...

   class Entity
     def initialize
       @opts = {:left_handed => false, :red_haired => true}
     end

     def method_missing(name, *args)
       key = name.to_s[0..-2].to_sym
       case name.to_s
       when /\?$/
         value = @opts[key]
         if value.respond_to? :to_sym
           if value.to_s =~ /!$/
             !@opts[value.to_s[0..-2].to_sym]
           else
             @opts[value.to_sym]
           end
         elsif value.respond_to? :to_proc
           instance_eval(&value)
         else
           value
         end
       when /=$/
         @opts[key] = args.first
       when /!$/
         @opts[key] = !@opts[key]
       else
         super
       end
     end
   end

   entity = Entity.new
   entity.likes_hendrix = true
   entity.long_haired = true
   entity.hippie = proc{long_haired? and likes_hendrix?}
   entity.hippie?  => true


Cheers,
Daniel