Search code examples
rubyruby-on-rails-4rake

Rails 4 optparse invalid_option


I have the following code. Using -c 1 works, but using -e 1 results in no output and using --from_date results in an 'invalid_option' error. What am I doing wrong?

require 'optparse'
namespace :schedule do |args|
  desc "Create schedule entries for recurring events"
  task :create_recurring => :environment do 
    options = {}
    optparse = OptionParser.new(args) do |opts|
      opts.on("--from_date {from_date}", "Date to start creating Schedules") do |from_date|
        options[:from_date] = from_date
      end
      opts.on("-e", "--event_id {event_id}", "Event to create Schedules for") do |event_id|
        options[:event_id] = event_id
      end
      opts.on("-c","--calendar_id {calendar_id}", "Calendar to create Schedules for") do |calendar_id|
        options[:calendar_id] = calendar_id
      end
    end
    begin 
      optparse.parse!
    rescue OptionsParser::InvalidOption => e
      puts "invalid option : e.inspect"
    end

    puts "options #{options.inspect}"
  end
end

Solution

  • Using your Rakefile, I've managed to get this to work (I have Rake 0.9.6; apparently newer Rake versions may have issues?):

    rake schedule:create_recurring -- -c1 -e42 --from_date=foo
    

    This outputs:

    options {:calendar_id=>"1", :event_id=>"42", :from_date=>"foo"}