On Fri, Mar 18, 2011 at 7:06 AM, Shangz B. <shangbaby / gmail.com> wrote:
> Hello and warm wishes to everyone who reads my post :)
>
> I am a newbie to Ruby (That Rhymes!). I am attempting to complete the
> "10 Minutes to YOur First Ruby Application" tutorial and I am stuck
> about the syntax of the example they are using. I get this error
> message:
>
> You must pass in the path to the file to launch.
>
>  ¨Âóáçåìáõîãèåò®òôáòçåôßæéìå¢
>
> The above message is what the last piece of Ruby code in this
> application told it to return - - I got that part, but ....
>
> I'm getting frustrated with the code because of the
> 'placeholders'-- if that what they are -- and my confusion as if I leave
> them as is or plug-in the name of the *.rb (launcher.rb) & the file_type
> (rb) etc. etc. etc. (Yule Brenner ref) in place of them:
>
> What is app_map? Is app the keyword or is app_map the keyword or do I
> stick notepad (my text editor) or ruby in its place. Same goes for
> reference to 'select_app,' or 'file_type,' 'file_name,' 'app_map...'
> What do I do with those?
>
> The attached file is the 'after' following my attempt at filling in what
> I
> assume file_name' means.  ¨Âèå ãïäå âåìïéó ôè§â´§
>
> Any help would be great. I am enthusiastic about learning it, but need a
> more thorough explanation of the code snippets they provide in this
> tutorial. I am used to reading TSQL and MSSQL.
>
> Thanks in advance, you've been lovely :)
>
>
> ############################################################
> #!/usr/local/bin/ruby
>
> # Example application to demonstrate some basic Ruby features
> # This code loads a given file into an associated application
>
>  ¨Âìáóó Ìáõîãèåò
>  ¨Âîä
>
> launcher = Launcher.new
>
> def initialize( app_map )
>  ¨Âáððßíá ¨Âððßíáð
>  ¨Âîä
>
> # Execute the given file using the associate app
>  ¨Âåæ òõî¨ æéìåßîáí>  ¨Âððìéãáôéïî óåìåãôßáððæéìåßîáí>  ¨Âùóôåí¨ ¢£ûáððìéãáôéïî£ûæéìåßîáíåý>  ¨Âîä
>
>  Given a file, look up the matching application
>  ¨Âåæ óåìåãôßáððæéìåßîáíå©
>  ¨Âôùðå æéìåßôùðå¨ æéìåßîáíå©
>  ¨ÂáððßíáðÛ æôùð>  ¨Âîä
>
>  Return the part of the file name string after the last '.'
>  ¨Âåæ æéìåßôùðå¨ æéìåßîáí>  ¨Âéìå®åøôîáíå¨ æéìåßîáí©®çóõâ¯ÞÜ®¯¬ §§ ©®äï÷îãáóå
>  ¨Âîä
>
> def help
>  ¨Âòéîô >  ¨Âïõ íõóô ðáóó éî ôèðáôè ôï ôèæéìå ôï ìáõîãè>
>  ¨Âóáçå£ûß߯ÉÌÅßßôáòçåôßæéì> "
> end
>
> if ARGV.empty?
>  ¨Âåì>  ¨Âøé> else
>  ¨Âððßíáð> 'html' => 'firefox',
> 'rb' => 'gvim',
> 'jpg' => 'gimp'
>  ¨Â
>
>  ¨Â Ìáõîãèåò®îå÷áððßíá>  ¨ÂáòçåÁÒÇÖ®êïéî¨ >  ¨Â®òõîôáòçåô > end
>
>
> #####################################################
>
> Attachments:
> http://www.ruby-forum.com/attachment/6039/RubyForum.txt

I see some strange things:

First of all: initialize, run, select_launcher and file_type
definitions should be inside class Launcher ... end, because they
should be instance methods of class Launcher.
You can remove the launcher = Launcher.new, since you are not using it.
After that, I think the application should work, if you call it like:

ruby launcher.rb test.html

it should launch firefox with test.html as a parameter. Also, the
parameter name launcher in the methods run and select_launcher is
confusing, since you are not passing the launcher, but the target. So,
this is how it would look like (I change other minor things):

#!/usr/bin/env ruby

class Launcher
  def initialize(launcher_map)
    @app_map = launcher_map
  end

  # Execute the given file using the associate app
  def run(file)
    application = select_launcher(file)
    system ("#{application} #{file}")
  end

  # Given a file, look up the matching application
  def select_launcher(file)
    ftype = file_type(file)
    @app_map [ftype]
  end

  # Return the part of the file name string after the last '.'
  def file_type(file)
    File.extname(file)[1..-1].downcase
  end
end

def help
  puts "You must pass in the path to the file to launch."
  puts
  puts "Usage: #{__FILE__} target_file"
end

if ARGV.empty?
  help
  exit
end

app_map= {'html' => 'firefox', 'rb' => 'notepad', 'jpg' => 'gimp'}
l = Launcher.new( app_map)
target = ARGV.join( ' ' )
l.run( target )

Jesus.