Да, извините, но, на мой взгляд, этот взлом смешно . :)
Прежде всего, я предполагаю, что ваш метод api_command
фактически вызывает методы для модуля APINamespace
, как подразумевается в этой строке: Module::api_command('APINamespace.NamespaceMethod')
Учитывая вышесказанное, почему бы просто не установить константу, равную APINamespace
в вашем модуле?
MyModule::APINamespace = ::APINamespace
MyModule::APINamespace.NamespaceMethod()
UPDATE: * ** 1015 1016 *
Я все еще не совсем понимаю вашу ситуацию, но, возможно, это:
module MyModule
def self.const_missing(c)
Object.const_get(c)
end
end
Теперь вы можете вызывать любую константу верхнего уровня, как если бы она была определена в вашем модуле; скажем, на верхнем уровне был модуль с именем StrangeAPI
, если вы используете хак выше, вы можете теперь вызывать его методы следующим образом:
MyModule::StrangeAPI.Blah()
Это то, что вы хотите?