私がこれで見る2つの問題。1つ目は、Thorのオプションハッシュを実際に変更することはできないということです。それは凍結されており、あなたはを得るでしょう`[]=': can't modify frozen Thor::CoreExt::HashWithIndifferentAccess (RuntimeError)
。
ただし、実際の問題は、作業レベルが低すぎることです。あなたが探しているのはのask
方法ですThor::Actions
。私があなたのコードを正しく理解しているなら、あなたがやりたいことをするために、あなたはこのようなことをするでしょう:
class Test < Thor
include Thor::Actions
desc 'readkeys', 'Read keys'
method_option :password, :type => :string, :desc => 'Password for the key store'
def readkeys
if options[:password].nil?
password = ask "Enter keystore password"
else
password = options[:password]
end
File.open("#{Dir.home}#{File::SEPARATOR}#{ENV['USER']}.p12") do |p12|
pkcs12 = OpenSSL::PKCS12.new(p12.read, password)
end
end
#...
end
または、もっと簡単に言えば、
class Test < Thor
include Thor::Actions
desc 'readkeys', 'Read keys'
method_option :password, :type => :string, :desc => 'Password for the key store'
def readkeys
password = options[:password] || ask("Enter keystore password")
File.open("#{Dir.home}#{File::SEPARATOR}#{ENV['USER']}.p12") do |p12|
pkcs12 = OpenSSL::PKCS12.new(p12.read, password)
end
end
#...
end