Highline and Chronic

I just heard of Chronic and wanted to integrate it with Highline so i
could get natural language dates like “yesterday”, “tomorrow” etc.

I find that I get a nil returned if I do:

dob1 = ask("DOB? ", Chronic)

However, if i try this it works:

class NameClass
def self.parse( string )
Chronic.parse(string)
end

end

dob = ask("Date? ", NameClass)

Looking thru source reveals that :

  elsif [Date, DateTime].include?(@answer_type) or

@answer_type.is_a?(Class)
@answer_type.parse(answer_string)

Now Chronic is a module not a class. So i guess in this case no part of
the “case” was called.
Now my question is:

  1. Should there be a respond_to in the Highline case, or perhaps a check
    for module also ?

  2. Is there anyway i can do this in one line without modifying highline,
    and without creating a separate class. Is there some block method or
    param i could use to invoke Chronic.parse ?

thanks.

On Aug 12, 2010, at 2:42 AM, R… Kumar 1.9.1 OSX wrote:

  1. Should there be a respond_to in the Highline case, or perhaps a check
    for module also ?

That may be a better approach. If you have the time, fork the project
on Github and work out a patch for it so we can see how that looks.

James Edward G. II

On Thu, Aug 12, 2010 at 2:42 AM, R… Kumar 1.9.1 OSX
<[email protected]

wrote:

def self.parse( string )
@answer_type.is_a?(Class)
param i could use to invoke Chronic.parse ?

You could use a proc object

test.rb

require ‘rubygems’
require ‘highline’
require ‘chronic’

hl = HighLine.new

dob1 = hl.ask("DOB? ", proc{|x| Chronic.parse(x)} )

p dob1

#######

ruby test.rb
DOB? Last Tuesday
Tue Aug 10 12:00:00 -0500 2010