Forum: Ruby user defined instance variables

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
508861510639b56d61eb30e6a28b01d9?d=identicon&s=25 John Maclean (Guest)
on 2006-01-06 00:37
(Received via mailing list)
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
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-01-06 02:16
(Received via mailing list)
Hi --

On Fri, 6 Jan 2006, John Maclean wrote:

> 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
dblack@wobblini.net

"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-01-06 02:58
(Received via mailing list)
On Jan 5, 2006, at 5:35 PM, John Maclean wrote:

> 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
This topic is locked and can not be replied to.