What is This Construct?

I’m messing with a gem called eve-api. I have a Perl and PHP
background. I’m messing with Ruby for the first time, and I’ve not read
any manual cover to cover. I’m crashing into this.

I’ve looked in Ruby Essentials and a few other places returned from a
Google query. In the gem is a file defining:

def account_transactions(character_id, type, account_key)
transactions = []
doc = @transport.call("#{type.to_s}/WalletTransactions.xml.aspx",
:characterID => character_id, :accountKey => account_key)
doc.each_element(’//rowset[@name=“transactions”]/row’) do |row|
transaction = {
:date => DateTime.parse(row.attributes[‘transactionDateTime’]),
:item => {
:id => row.attributes[‘typeID’].to_i,
:name => row.attributes[‘typeName’]
}
}
transactions << transaction
end
return transactions
end

I’ve truncated that a bit.

In my code, when I call this, I can

myAccount.transactions.each do |trx|
puts “#{trx.date}”
end

I can’t get to the ID or Name of the item. I’ve tried trx.item.id and
trx.item[0].id and a few other things. What is that? How can I access
it? The thing that really confuses me is trx.date works.

I can’t get to the ID or Name of the item. I’ve tried trx.item.id and
trx.item[0].id and a few other things. What is that? How can I access
it? The thing that really confuses me is trx.date works.

It’s a hash. Try this:

myAccount.transactions.each do |trx|
puts “#{trx[:item][:id]}: #{trx[:item][:name} (on
#{trx[:item][:date]})”
end

On Oct 18, 2010, at 18:40 , Travis T. wrote:

I can’t get to the ID or Name of the item. I’ve tried trx.item.id and
trx.item[0].id and a few other things. What is that? How can I access
it? The thing that really confuses me is trx.date works.

transaction = {
:date => DateTime.parse(row.attributes[‘transactionDateTime’]),
:item => {
:id => row.attributes[‘typeID’].to_i,
:name => row.attributes[‘typeName’]
}
}

that’s a nested hash, just like you’d use in perl.

myAccount.transactions.each do |trx|
puts “#{trx.date}”
end

that shouldn’t work… are you loading something magical? Eve-api might
be doing it. I’ve never used that… Ah. Looking at the code I see:

class Base # omg I hate that name for class hierarchies. DHH be
damned.
def method_missing(method, *args)
return(@options[method]) if @options.has_key?(method)
raise(Exceptions::AttributeException,“unknown attribute
#{method}”)
end
end

class Transaction < Base; end

So, yeah. that’s why date works… and item. But since it probably isn’t
recursively creating the objects, the sub-sub items won’t work the same
way. You’ll have to use hash syntax for those (I’d file a bug too):

trx.item[:id] and trx.item[:name]

should both work fine.

Thanks. After Steve’s comment, I tried the exact thing that Ryan
recommends. But thanks for the explanation, Ryan. I’m new to Ruby and
I couldn’t figure out why it worked one way and not another.

It is all working now.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs