如何在Ruby中更改已经暴露的模块常量

时间:2019-10-06 06:48:28

标签: ruby-on-rails ruby rubygems

我在模块中定义了一个常量,并且已经向所有客户端和许多直接使用此常量的客户端公开了该常量。

"AzureWebJobs": { "extensions": { "ServiceBus": { "ConnectionStrings": { "Primary": "[your connection string here]" } } } }

现在的问题是,我想根据条件向FRUITS_MAP添加一个哈希。

module MyModule
  module Contants
    FRUITS_MAP = [
      {
        id: 1,
        name: 'Apple'
      },
      {
        id: 2,
        name: 'Coconut'
      }
    ].freeze
  end
end

注意:我无权访问所有客户端,也不想在所有客户端中强制进行更改,但我想有条件地向FRUITS_MAP添加一个元素。

对于启用了“ Mango”功能的客户端X,FRUITS_MAP应该包含3个元素,但是对于禁用了“ Mango”功能的客户端Y,FRUITS_MAP中应该仅包含2个元素。我该如何实现?

1 个答案:

答案 0 :(得分:1)

如果条件为true,则可以通过MyModule::Contants::FRUITS_MAP和所需的其他对象的串联返回一个新数组:

p MyModule::Contants::FRUITS_MAP + [{ id: 5, name: 'Mango' }] if Account.enabled_feature?('Mango')
# [{:id=>1, :name=>"Apple"}, {:id=>2, :name=>"Coconut"}, {:id=>5, :name=>"Mango"}]