DOS
DOS

Reputation: 557

Ruby String to access an object attribute

I have a text file (objects.txt) which contains Objects and its attributes. The content of the file is something like:

Object.attribute = "data"

On a different file, I am Loading the objects.txt file and if I type:

puts object.attribute it prints out data

The issue comes when I am trying to access the object and/or the attribute with a string. What I am doing is:

var = "object" + "." + "access" puts var

It prints out object.access and not the content of it "data".

I have already tried with instance_variable_get and it works, but I have to modify the object.txt and append an @ at the beginning to make it an instance variable, but I cannot do this, because I am not the owner of the object.txt file.

As a workaround I can parse the object.txt file and get the data that I need but I don't want to do this, as I want take advantage of what is already there.

Any suggestions?

Upvotes: 0

Views: 622

Answers (1)

Taryn East
Taryn East

Reputation: 27747

Yes, puts is correctly spitting out "object.access" because you are creating that string exactly.

In order to evaluate a string as if it were ruby code, you need to use eval()

eg:

var = "object"  +    "."  + "access"
puts eval(var)
=> "data"

Be aware that doing this is quite dangerous if you are evaluating anything that potentially comes from another user.

Upvotes: 2

Related Questions