From: Greg Date: 2007-05-08T11:05:04+09:00 Subject: Re: Difference answers from Terminal, TextMate, and BBEdit On 2007-05-07 18:16:38 -0700, Tim Hunter said: > Greg wrote: >> A newbie here trying to develop one of Pine's tutorial scripts. Ruby v1.8.6 >> >> I get different results from my script in Terminal, TextMate, and >> BBEdit. How is this possible? >> >> TextMate seems to be the closest to what I'd expect. I'd buy it if the >> undo's were better. Plus I already own BBEdit. I realize BBEdit doesn't >> profess to support Ruby script running that much, but I expected >> Terminal to be consistent. >> >> I've driven myself crazy trying to debug my script, stalled in BBEdit, >> so went to Terminal, but after putting in all kinds of puts to figure >> out what was going on, tried my demo TextMate and it ran better. In all >> cases exactly the same file. >> >> Thanks for any clues. >> >> > It would help if you'd post your script, what answers you expected, and > what answers you got. Thanks for answering. Here it goes: #!/usr/bin/env ruby class OrangeTree MSG_GROW = "Type \"year\" to grow your tree." MSG_PICK = "Type a number to pick some more fruit. " EXIT_TXT = "Something went wrong." def initialize # we have one tree, does it need a name? @heightInches = 0 # at year zero @age = 0 @fruit = 0 # inches, work out feet and inches later puts "Congratulations, you planted an orange tree. In a few years it will start bearing fruit. #{@age} " # Age only for debugging. Can take it out. puts MSG_GROW end def ageOneYear @heightInches = @heightInches +1 puts 'Height: ' + @height.to_s @age += 1 # @age = @age + 1 puts "Got to ageOneYear. Age: #{@age}" case( @age ) when (1..3) : puts("Your #{@age} year old tree is too young to bear fruit yet. #{MSG_GROW}" ) when (4..29) : puts(" Age: #{@age}. Place holder until get 1..3 working." ) when (30) : puts("Your tree was very fruitful, but it reached old age and died.") else puts( " Something went wrong. #{EXIT_TXT}" ) end end # def ageOneYear def height # returns the height end def pick_an_orange puts 'Got to pick_an_orange, but haven\'t defined yet' # reduce this year count by one end end # class OrangeTree # here we go countLoop = 0 tree = OrangeTree.new # assume we need to initialize it. Does it need a name? while countLoop < 100 countLoop += 1 puts "countLoop = #{countLoop}" # debugging. if gets.to_s=='year' puts 'In the gets.to_s if clause' # debugging. tree.ageOneYear end gets case when 'year' : tree.ageOneYear # , y as shortcut? when (1..100) : tree.pick_an_orange else puts('Don\'t be greedy, don\'t try to pick more than 100 oranges') end end # while TextMate response. I answered 'year' to each request for input: RubyMate r6354 running Ruby r1.8.6 (/usr/local/bin/ruby) >>> OrangeTree.post.rb Congratulations, you planted an orange tree. In a few years it will start bearing fruit. 0 Type "year" to grow your tree. countLoop = 1 Height: Got to ageOneYear. Age: 1 Your 1 year old tree is too young to bear fruit yet. Type "year" to grow your tree. countLoop = 2 Height: Got to ageOneYear. Age: 2 Your 2 year old tree is too young to bear fruit yet. Type "year" to grow your tree. countLoop = 3 Height: Got to ageOneYear. Age: 3 Your 3 year old tree is too young to bear fruit yet. Type "year" to grow your tree. countLoop = 4 Height: Got to ageOneYear. Age: 4 �Age: 4. Place holder until get 1..3 working. NoMethodError: undefined method `+' for nil:NilClass method gets in stdin_dialog.rb at line 6 method gets in stdin_dialog.rb at line 13 at top level in OrangeTree.post.rb at line 58 ==END TextMate response Terminal response. All 'year' are my responses. I stopped after two none reponses. new-host-2:~ xxxxxx$ ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [powerpc-darwin8.9.0] new-host-2:~ xxxxxx$ ruby "/Volumes/share/Greg/Ruby++/OrangeTree.post.rb" Congratulations, you planted an orange tree. In a few years it will start bearing fruit. 0 Type "year" to grow your tree. countLoop = 1 year Height: Got to ageOneYear. Age: 1 Your 1 year old tree is too young to bear fruit yet. Type "year" to grow your tree. year year ===End Terminal BBEdit output. I only Cmd-R to run the script. I was never asked for input. Congratulations, you planted an orange tree. In a few years it will start bearing fruit. 0 Type "year" to grow your tree. countLoop = 1 Height: Got to ageOneYear. Age: 1 Your 1 year old tree is too young to bear fruit yet. Type "year" to grow your tree. countLoop = 2 Height: Got to ageOneYear. Age: 2 Your 2 year old tree is too young to bear fruit yet. Type "year" to grow your tree. countLoop = 3 Height: Got to ageOneYear. Age: 3 Your 3 year old tree is too young to bear fruit yet. Type "year" to grow your tree. countLoop = 4 Height: Got to ageOneYear. Age: 4 Age: 4. Place holder until get 1..3 working. countLoop = 5 Height: Got to ageOneYear. Age: 5 Age: 5. Place holder until get 1..3 working. countLoop = 100 Height: Got to ageOneYear. Age: 100 Something went wrong. Something went wrong. ===END BBEdit TextMate was close, but I expected values for @heightInches to increase with each iteration. I would like it to work in BBEdit, but realize BareBones support for this is weak. But at least Terminal should get it right. I own BBEdit, so am reluctant to buy TextMate, particularly since it has significant features I would like missing. Thanks for any help. I hope this isn't a double posting. My original was via Usenet, then I found the Google Groups and tried to post there, but I am not sure I am a member there. This version may be somewhat different as I had to recreate it after realizing Google Groups wasn't working for me.