Хеш-код заморожен:
"Предотвращает дальнейшие изменения объекта. При попытке изменения будет вызвано RuntimeError. Невозможно разморозить замороженный объект."
Вы можете скопировать options
в новый хеш (будет размораживаться) и изменить его вместо этого.
new_options = options.dup
options = new_options
options.merge!(:a => "this will work now")
Или, если хотите, чтобы он был еще более коротким:
options=options.dup
options.merge!(:a => "this will work now")
Библиотека Thor возвращает замороженный хеш по умолчанию, поэтому другой вариант - изменить библиотеку так, чтобы она возвращала незамерзающие хеши, но я думаю, что первое решение достаточно хорошо.
Ниже приведена ссылка на исходный коддля функции синтаксического анализа Тора вы заметите, что она замораживает возвращаемый хэш «assigns» перед его фактическим возвратом (перейдите к нижней части страницы и в разделе (Object) parse(args)
нажмите «View Source». Замораживание находится на строке 83исходный фрагмент.)
http://rubydoc.info/github/wycats/thor/master/Thor/Options