T
Trans
hi--
have a look:
class Hash
def open!
class << self
@_were_public =3D public_instance_methods - ['close!']
@_were_public.each { |m| private m }
def method_missing(s,*a)
if s.to_s[-1,1] =3D=3D '=3D'
self =3D a.first
else
return self
end
end
end
end
def close!
class << self
@_were_public.each { |m| public m }
@_were_public =3D nil
remove_method
method_missing)
end
end
end
usage:
h =3D {a=3D>1, :sort_by=3D>2}
h.a #=3D> NoMethodError
h.sort_by #=3D> LocalJumpError
h.open!
h.a #=3D> 1
h.sort_by #=3D> 2
h.close!
h.a #=3D> NoMethodError
h.sort_by #=3D> LocalJumpError
thoughts? improvements? useful? bad-news?
T
ps. i came across an oddity while messing with this:
irb(main):019:0> q =3D {}
=3D> {}
irb(main):020:0> q.sort_by
=3D> []
irb(main):021:0> q[:a] =3D 1
=3D> 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
have a look:
class Hash
def open!
class << self
@_were_public =3D public_instance_methods - ['close!']
@_were_public.each { |m| private m }
def method_missing(s,*a)
if s.to_s[-1,1] =3D=3D '=3D'
self
else
return self
end
end
end
end
def close!
class << self
@_were_public.each { |m| public m }
@_were_public =3D nil
remove_method
end
end
end
usage:
h =3D {a=3D>1, :sort_by=3D>2}
h.a #=3D> NoMethodError
h.sort_by #=3D> LocalJumpError
h.open!
h.a #=3D> 1
h.sort_by #=3D> 2
h.close!
h.a #=3D> NoMethodError
h.sort_by #=3D> LocalJumpError
thoughts? improvements? useful? bad-news?
T
ps. i came across an oddity while messing with this:
irb(main):019:0> q =3D {}
=3D> {}
irb(main):020:0> q.sort_by
=3D> []
irb(main):021:0> q[:a] =3D 1
=3D> 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