如何在Rails初始化程序中配置库

时间:2017-08-24 07:22:42

标签: ruby-on-rails ruby

我正在编写一个与AWS Kinesis交互的库(包装器)。我希望库可以配置为Rollbar和许多其他库。

我也在研究the code,并尝试了解他们是如何做到的。不过,我认为我并不完全理解。我认为他们正在使用中间件来处理这个,但不知道如何为我的用例配置它。

我想要一个文件.../initializers/firehose.rb,内容可能如下所示:

Firehose.configure do |config|
  config.stream_name = ENV['AWS_KINESIS_FIREHOSE_STREAM']
  config.region = ENV['AWS_KINESIS_FIREHOSE_REGION']
  #.. more config here
end

以前有人这样做过吗?

1 个答案:

答案 0 :(得分:2)

  

我认为他们正在使用中间件来处理这个

不,没有中间件。它只是一个普通的红宝石block usage

以下是最小/准分子实现的外观。

class Configuration
  attr_accessor :host, :port
end

class MyService
  attr_reader :configuration

  def initialize
    @configuration = Configuration.new
  end

  def configure(&block)
    block.call(configuration)
  end
end

service = MyService.new

service.configuration # => #<Configuration:0x007fefa9084530>
service.configuration.host # => nil


service.configure do |config|
  config.host = 'http://example.com'
  config.port = 8080
end

service.configuration # => #<Configuration:0x007fefa9084530 @host="http://example.com", @port=8080>
service.configuration.host # => "http://example.com"

正如你所看到的,这里没什么复杂的。只是传递物体。