我最近尝试实现一个mixin,它根据执行点的命名空间访问configuration
- 对象。我的mixin中的以下片段提取了namespace-part并将其缓存在mixin-target的实例变量中:
if @asset_uri_helpers_config_ref.nil? == true then # initialize configuration-cache
application_name = self.class.name.split('::').first # extract app-name from class-name
@asset_uri_helpers_config_ref = Object.const_get("#{application_name}::Application").configuration
end
binding.pry # start the repl-session here
之后我访问最初在@asset_uri_helpers_config_ref.assets()
定义的方法<<namespace>>::Application.configuration.assets()
。上瘾的单元测试(我将configuration
- 对象存根)运行(当然)很好。
随后的集成测试失败并找出发生了什么,我添加了上面概述的repl-invokation。现在,在调查返回值时,我得到以下输出:
[1] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> @asset_uri_helpers_config_ref.assets
=>
[2] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> defined? @asset_uri_helpers_config_ref.assets()
=> "method"
[3] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> @asset_uri_helpers_config_ref.assets.pretty_inspect
=> [[:object_id, [], nil],
[:pretty_print,
[#<Pry::ColorPrinter:0x007fb47b971058
@buffer=[],
...
[4] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> @asset_uri_helpers_config_ref.assets.nil?
=> [[:object_id, [], nil],
[:pretty_print,
[#<Pry::ColorPrinter:0x007fb47b971058
@buffer=[],
...
我不知道我在这里得到什么 - 再次尝试检查返回值f.e. nil?
(命令#4)失败。它看起来像是一个例外 - 但是即使我直接调用.assets()
(命令#1)也应该抛出错误。
有人可以解释我在这里得到什么吗?
BasicObject
我正在访问错误的类,因此获得BasicObject
- 派生,将所有method_missing-invokations附加到数组中。
答案 0 :(得分:1)
@florian您选择了错误的配置。
您应该参考Web::Assets.configuration.prefix
,而不是Web::Application.configuration.assets
。
后者是一个“累积”所有命令然后将它们应用于目标配置的代理。