From: Trans Date: 2007-01-18T22:12:59+09:00 Subject: Hash#open! / Hash#close! hi-- have a look: class Hash def open! class << self @_were_public = public_instance_methods - ['close!'] @_were_public.each { |m| private m } def method_missing(s,*a) if s.to_s[-1,1] == '=' self[s] = a.first else return self[s] end end end end def close! class << self @_were_public.each { |m| public m } @_were_public = nil remove_method(:method_missing) end end end usage: h = {a=>1, :sort_by=>2} h.a #=> NoMethodError h.sort_by #=> LocalJumpError h.open! h.a #=> 1 h.sort_by #=> 2 h.close! h.a #=> NoMethodError h.sort_by #=> LocalJumpError thoughts? improvements? useful? bad-news? T ps. i came across an oddity while messing with this: irb(main):019:0> q = {} => {} irb(main):020:0> q.sort_by => [] irb(main):021:0> q[:a] = 1 => 1 irb(main):022:0> q.sort_by LocalJumpError: no block given from (irb):22:in `sort_by' from (irb):22 from :0 ruby 1.8.4 on debian