Sha256: 48f5df8309d40c216defd5fd3d1372c512ff2a1268444625af7af54f9f40e2f6
Contents?: true
Size: 1.62 KB
Versions: 3
Compression:
Stored size: 1.62 KB
Contents
module Kernel def instance_vars InstanceVariables.new(self) end end class InstanceVariables include Enumerable def initialize(delegate) @delegate = delegate end def instance_delegate @delegate end def each @delegate.instance_variables.each do |name| yield(name[1..-1].to_sym, @delegate.instance_variable_get(name)) end end def to_hash h = {} each do |name, value| h[name] = value end h end def [](name) name = atize(name) @delegate.instance_variable_get(name) end def []=(name, value) name = atize(name) @delegate.instance_variable_set(name,value) end def <<(pair) name, value = *pair name = atize(name) @delegate.instance_variable_set(name, value) end # (See also: Kernel#populate, which uses accessor method rather than setting instance variables directly.) def update(hash) hash.each do |pair| self << pair end end def keys @delegate.instance_variables.collect do |name| name[1..-1].to_sym end end def names @delegate.instance_variables.collect do |name| name[1..-1] end end def values @delegate.instance_variables.collect do |name| @delegate.instance_variable_get(name) end end private def atize(name) name !~ /^@/ ? "@#{name}" : name end end =begin demo class Friend attr_accessor :name, :age, :phone def initialize(name, age, phone) @name, @age, @phone = name, age, phone end end f1 = Friend.new("John", 30, "555-1212") p f1.instance_vars f1.instance_vars.update({:name=>'Jerry'}) p f1.instance_vars =end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
facets-2.8.2 | lib/core/facets/kernel/instance_variables.rb |
facets-2.8.1 | lib/core/facets/kernel/instance_variables.rb |
facets-2.8.0 | lib/core/facets/kernel/instance_variables.rb |