user defined instance variables

J

John Maclean

Hey Chaps,
So far so good. I've a menu as shown below. So far by following the "pick axe" I've been able to "hard code" all of my instance variables. I'd like a user to enter his/her details and let his entry specify that variable? Make sense?

#!/usr/bin/ruby
# Thu Jan 5 20:41:45 GMT 2006
# defining a new class for inspectors
class Inpsector
def welcome_inspector
puts "Welcome to the inspector screen"
puts "~~~~~~~ ~~ ~~~ ~~~~~~~~~ ~~~~~~"
print "0:- Inspectors, ready to enter your details?\nq:- quit!\n"
# all we want to do here is collect the inspector's details
end

def initialize(fname, sname, company, dept, team, empno, mobileno)
# these are the instance variables
@fname = fname
@sname = sname
@company = company
@dept = dept
@team = team
@empno = empno
@mobileno = mobileno
end

def insp_choice
print "enter your choice (0,q) : "
ip = $stdin.gets

if ip.chomp! =~ /^[0q]/
case ip
when "0"
print "Entering details capturing session\n"
when "q"
print "about to quit!\n"
end
else
print "poor choice!\n"
end
end

def to_s
"Inpsector: #@fname #@sname #@company, #@dept, #@team, #@empno, #@mobileno\n"
end
end

# todo:- replace this "hard-coded" way of enteringinstance variables
# with those that the user has entered
inspector = Inpsector.new("John", "Mac", "t4m", "insp", "bcv", "666", "07666") #<--------- here
inspector.inspect
inspector.welcome_inspector
inspector.insp_choice
puts inspector
 
D

dblack

Hi --

Hey Chaps,
So far so good. I've a menu as shown below. So far by following the
"pick axe" I've been able to "hard code" all of my instance
variables. I'd like a user to enter his/her details and let his
entry specify that variable? Make sense?

Can't you just get keyboard input and initialize the object with that?

print "First name: "
fname = gets.chomp

etc.
print "Entering details capturing session\n"

Don't forget about puts :)


David

--
David A. Black
(e-mail address removed)

"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black
 
J

James Edward Gray II

Hey Chaps,
So far so good. I've a menu as shown below. So far by following the
"pick axe" I've been able to "hard code" all of my instance
variables. I'd like a user to enter his/her details and let his
entry specify that variable? Make sense?

Some idea, in code:

class Inspector
WELCOME = <<-END_WELCOME.gsub(/^\s+/, "").chomp
Welcome to the inspector screen
~~~~~~~ ~~ ~~~ ~~~~~~~~~ ~~~~~~
0:- Inspectors, ready to enter your details?
q:- quit!
enter your choice (0,q) :
END_WELCOME
DETAILS = %w{fname sname company dept team empno mobileno}

def initialize
DETAILS.each { |var| instance_variable_set("@#{var}", nil) }
end

def enter?( input )
case input
when "0"
true
else
false
end
end

def build
DETAILS.each do |var|
answer = yield var
instance_variable_set("@#{var}", answer) unless answer.empty?
end
end
end

if __FILE__ == $0
inspector = Inspector.new
p inspector

print Inspector::WELCOME
if inspector.enter? $stdin.gets.to_s.chomp
puts "Entering details capturing session"
inspector.build do |var|
print "#{var}: "
$stdin.gets.to_s.chomp
end
else
puts "about to quit!"
end

p inspector
end

Hopefully that gets you going.

James Edward Gray II
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top