Я пишу поваренную книгу повара для развертывания и применения и создания пользователей. Он не имеет API и использует нечетный метод хэширования, поэтому я написал для него короткий библиотечный модуль. Для краткости я включил только метод makeSalt()
.Невозможно вызвать метод модуля
module Foo_packagist
module Password
def makeSalt(len=31)
require 'securerandom'
return Digest.hexencode(SecureRandom.random_bytes((len*6/8.0).ceil)).to_i(16).to_s(36)[0..len-1]
end
end
end
Беда в том, что в каждом периоде Поваром я получаю:
NoMethodError
-------------
undefined method `makeSalt' for Foo_packagist::Password:Module
и отладка в chef-shell
я получаю:
chef (12.4.0)> puts ::Foo_packagist::Password.instance_methods()
makeSalt
encodePassword
chef (12.4.0)> puts ::Foo_packagist::Password.makeSalt()
NoMethodError: undefined method `makeSalt' for Foo_packagist::Password:Module
chef (12.4.0)> puts ::Foo_packagist::Password::makeSalt()
NoMethodError: undefined method `makeSalt' for Foo_packagist::Password:Module
Что такое право способ вызвать этот метод ?
Ваш 'require' должен быть в верхней части файла, не застрявшей внутри метода. – tadman
Это образец, который мы рекомендуем для шеф-повара, где некоторые драгоценные камни могут быть недоступны во время загрузки библиотеки. 'securerandom' находится в stdlib, но его рекомендуется рекомендовать как шаблон для покрытия, чем объяснять, что есть и что не включено. – coderanger