Hi!
Ruby n00b here, but experienced in Perl and Python and many others, looking for guidance in my first program.
I want to build a class mirroring a flat file record that uses column names as accessor methods, I want to dynamically assign an attribute from a parsed string and assign it from the postitional list of symbols.
rec = QlbRecord.new(file_line)
rec.dpend += 5
puts rec.address
First, I Set up the class attributes in the class.
@@cols = [ :address, :classes, :status, :dpend, :cremote ]
@@cols.each { |a| attr a,true }
Next, I would populate the fields as such....
arec = record_string.split(/\t/)
@@cols.each { |c| self.c = arec.shift }
where c is the sumbol of the attribute to set. This is wrong.
Am I going in the right direction? It is like using a hash
data[c] = arec.shift
though I want to access the columns through methods (rec.address, etc.)
Is there a class in the library I should be using instead? Or do I really just need to replicate code (ick!) for each data field?
address = arec.shift
classes = arec.shift
... etc. ...
Also, I don't completely understand how symbols work or why they are needed.
Following is my class for your inspection. I can kludge something that works, but I want to learn the *best* method. Thanks!
···
########################
class QlbRecord
@@cols = [ :address, :classes, :status, :dpend, :cremote ]
@@cols.each { |a| attr a,true }
def initialize(record_string=nil)
from_s(record_string) if record_string
end
def from_s(record_string)
arec = record_string.split(/\t/)
@@cols.each { |c| self.c = arec.shift }
##---------------------> I want it to go to @address, @classes, etc
end
def to_s
str=''
@@cols.each { |c| str += (str>'' ? "\t" : '') + self.c }
##--------------------------------------------> from @address, etc.
str
end
end