在Ruby Gem中使用变量

时间:2015-10-19 16:13:27

标签: ruby-on-rails ruby-on-rails-4 gem initializer

在Rails应用程序中使用Ruby gem中使用可配置变量的正确方法是什么?我们在这个例子中使用时区,它可能是一个常量,但也会使用特定于安装的变量,如home_city等。

  1. 常量
    可以在初始化程序中设置常量:

    config/initializer/mygem.rb
    TIMEZONE = "Eastern Standard"
    

    但是,如果在类变量声明中使用,则不定义变量。

    module Foo
      module Bar
        class TickTock  
          class_attribute :tz  
          self.tz = "#{TIMEZONE} Time zone"  # uninitialized constant Foo::Bar::TickTock::TIMEZONE  
    
  2. 配置变量

    config/initializer/mygem.rb  
    config.x.timezone = "Eastern Standard"  
    
    module Foo
      module Bar
        class TickTock  
          self.tz = "#{Rails.configuration.x.timezone} Time zone" # undefined method `configuration` for Foo::Bar::TickTock:Module
    
  3. 环境变量:我们不希望在gem本身中使用环境变量。我们想避免

    self.tz = "#{ENV['TIMEZONE']} Time zone"
    
  4. 其他

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是使用ActiveSupport::Configurable module

使用此模块,您可以创建如下配置文件:

<强> /config/initializers/my_gem.rb

MyGem.config do |config|
  config.timezone = 'BRT'
end

This answer也很有用。