0

我最近正在尝试实现一个 mixin,它configuration根据执行点的命名空间访问一个 -object。我的 mixin 中的以下代码段提取了该命名空间部分并将其缓存在 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-object)(当然)运行良好。

随后的集成测试失败并找出发生了什么,我添加了上面概述的 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=[],
...

我不知道我在这里得到了什么 - 任何检查返回值的尝试 fe nil?(命令#4)都失败了。它以某种方式看起来像一个异常 - 但是即使我.assets()直接调用(命令#1)也应该抛出一个错误。

谁能解释我在这里得到什么?

上面的输出来自BasicObject

我访问了错误的类,因此得到了一个BasicObject-derivation,它将所有 method_missing-invokations 附加到一个数组中。

4

1 回答 1

1

@florian您选择了错误的配置。

您应该参考Web::Assets.configuration.prefix, 而不是Web::Application.configuration.assets.

后者是“累积”所有命令然后将它们应用到目标配置的代理。

于 2015-12-02T09:51:55.583 回答