Getting property list from both Ruby and .Net objects


#1

Hello.

I need some tools to get property names of both Ruby objects and .Net
objects. First I thought that there’ll be no problem with it. I tried to
do it like:

def GetPropertyList(obj)
return obj.instance_variables
end

But it turned out that when “obj” is a .Net object
obj.instance_variables returns nothing. Well, it returns an array but
array is empty.

For example:

require “Foo”
include FooModule

foo = Foo.new
foo.NetVal1 = “Hello”
foo.NetVal2 = 100

puts foo.class # => FooModule::Foo
puts foo.NetVal1 # => Hello
puts doo.NetVal2 # => 100

puts foo.instance_variables # => #it’s blank here
puts foo.instance_variables.class # => Array

Well, then I thought that I can use reflection to get property list for
.Net objects:

def GetPropertyList(obj)
array = Array.new
obj.GetType().GetProperties.each do |prop|
array.push prop.name
end
array
end

But it didn’t work for a ruby object. I tried to somehow find out
weather object is from ruby or .Net and depending on it parse objects,
but I couldn’t think of any working solution.

So my question is:
Give me a hint on how I can parse both ruby and .net objects using one
algorithm.

Thanks in advance,
Alex.


#2

Hi Alex:

Try:

obj.methods
obj.public_methods
obj.private_methods

it will give you the list of all the methods available

(From the point of view of IronRuby, a .net object shows the methods

you would find

two methods for, one for set another for get of a variable,

for example, saying that you have a propety of the object called “name”

obj.name (would return the actual setting for the variable (get) )

obj.name = “test”.to_clr_string (would set the name in the .net object)

Note:
.to_clr_string is important to convert the ruby string object to the
corresponding clr object (System::String)

Regards,

Eduardo


#3

Alex:
A quick way of finding all the properties that you can set of a .net
object would be:

obj.methods.grep(/=/)

(filter by all the properties that you can set)