REPL中的方法调用奇怪地返回

时间:2015-12-02 08:53:43

标签: ruby read-eval-print-loop pry hanami

我最近尝试实现一个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附加到数组中。

1 个答案:

答案 0 :(得分:1)

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

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

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