Forum: Ruby GetoptLong Accessing the values with out looping

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.
Paul D. Kraus (Guest)
on 2006-05-16 17:23
(Received via mailing list)
Simple question but for the life of me I can't figure it out.
I am converting some of my basic perl scripts that I use daily as an
excersice in learning ruby.

I need to grab a date from the command line that will eventually be
converted into a filename.

no I want to call my script like such ...
./myscript.rb -d 2006-08-06

I then want to validate what is being set in -d.
Here is the code I have that works but it just seems excessive to have
to
loop through the options...

def getopts
  opts = GetoptLong.new([ '-d', '--date',
GetoptLong::REQUIRED_ARGUMENT])
  opts.each do |opt,arg|
    if opt =~ /-d|--date/ && arg =~ /(\d{4})-(\d{2})-(\d{2})/
        date = arg.gsub('-','')
        return date
    else
      puts "Date needs to be set to YYYY-MM-DD using -d or --date"
      exit
    end
  end
end

I thought I would just be able to do...
if opt['-d'] =~ <rxhere> || opt['--date'] =~ <rxhere>
  <code here>
end


Thanks.
Paul Kraus
unknown (Guest)
on 2006-05-16 18:07
(Received via mailing list)
On Tue, 16 May 2006, Paul D. Kraus wrote:

> I then want to validate what is being set in -d.
>     puts "Date needs to be set to YYYY-MM-DD using -d or --date"
>     exit
>   end
> end
> end
>
> I thought I would just be able to do...
> if opt['-d'] =~ <rxhere> || opt['--date'] =~ <rxhere>
> <code here>
> end

it's not that bad is it?

     harp:~ > cat a.rb
     require 'getoptlong'
     require 'time'

     def getdate
       gl = GetoptLong.new ['-d', '--date',
GetoptLong::REQUIRED_ARGUMENT]
       opts = {} and gl.each{|k,v| opts[k.delete('-')] = v}

       if((date = opts['d']))
         raise 'date needs to be set to YYYY-MM-DD using -d or --date'
unless
           date =~ %r/^ \d{4} - \d{2} - \d{2} $/iox
         return Time.parse(date)
       end
     end

     p getdate


     harp:~ > ruby a.rb --date=2006-05-01
     Mon May 01 00:00:00 MDT 2006



regards.

-a
Paul D. Kraus (Guest)
on 2006-05-16 18:14
(Received via mailing list)
>
>        opts = {} and gl.each{|k,v| opts[k.delete('-')] = v}
>
Makes perfect sense in this example you are still looping through the
options.
All though this is better on the eyes.

I was hoping that the instance of getoptlong had some kind of method to
get
the value of one of the command line options.

Paul
Jim F. (Guest)
on 2006-05-17 19:06
(Received via mailing list)
On May 16, 2006, at 8:22 AM, Paul D. Kraus wrote:

> no I want to call my script like such ...
> ./myscript.rb -d 2006-08-06

Have you tried CommandLine?


>    if opt =~ /-d|--date/ && arg =~ /(\d{4})-(\d{2})-(\d{2})/
> if opt['-d'] =~ <rxhere> || opt['--date'] =~ <rxhere>
>  <code here>
> end
>
>
> Thanks.
> Paul Kraus

Jim F.
This topic is locked and can not be replied to.