0

フォームのコードをよく目にします

RSpec.configure do |config|
  config.include ApiHelper

  # ## Mock Framework
  #
  # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
  #
  # config.mock_with :mocha
  # config.mock_with :flexmock
  # config.mock_with :rr

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true

  # If true, the base class of anonymous controllers will be inferred
  # automatically. This will be the default behavior in future versions of
  # rspec-rails.
  config.infer_base_class_for_anonymous_controllers = false

  config.include FactoryGirl::Syntax::Methods

end

Railsに似たようなことをする機能はありますか?config / initializers/my_class.rb内で同様の構文を使用して独自のライブラリを構成できるようにしたい

MyClass.configure do |config|
  # allow configuration here
end
4

5 に答える 5

2

Railsには特別なことは何も必要ありません-それは単純なRubyコードです。方法は次のとおりです。

class MyClass
  def self.configure(&block)
    a_hash = { :car => "Red" }
    puts "Hello"
    yield a_hash
    puts "There"
  end    
end


MyClass.configure do |config|
  puts "In Block"
  puts config[:car]
end

出力:

Hello
In Block
Red
There

私はハッシュを生成していますが、必要なオブジェクトを生成できます。

于 2012-07-24T19:06:57.543 に答える
2

config/initializersRailsは、サーバーの起動時にディレクトリ内のすべてのRubyファイルをロードします。

独自のカスタム構成可能クラスに同じスタイルを使用する場合configureは、ブロックを受け入れ、構成オブジェクトをそのブロックに渡すクラスメソッドを実装する必要があります。例えば

class MyClassConfiguration
  # configuration attributes
end

class MyClass
  def self.configure
    yield configuration if block_given?
  end

  def self.configuration
    @config ||= MyClassConfiguration.new
  end
end

phoetの宝石を使用するとさらに簡単になります。

興味がある場合は、RSpecがどのように機能するかを確認する価値があります。

RSpec.configureメソッドはhttps://github.com/rspec/rspec-core/blob/master/lib/rspec/core.rbにあります

このConfigurationクラスはhttps://github.com/rspec/rspec-core/blob/master/lib/rspec/core/configuration.rbに実装されています

于 2012-07-24T19:13:50.050 に答える
1

Railsがそのためのヘルパーを提供するかどうかはわかりませんが、いくつかの宝石で使用しているこの問題に対する独自の小さな解決策を作成しました:https ://github.com/phoet/confiture

構成を定義しましょう:

module Your
  class Configuration
    include Confiture::Configuration

    confiture_allowed_keys(:secret, :key)
    confiture_defaults(secret: 'SECRET_STUFF', key: 'EVEN_MOAR_SECRET')
  end
end

構成を行うための簡単なAPIがあります。

Your::Configuration.configure do |config|
  config.secret = 'your-secret'
  config.key    = 'your-key'
end

これに加えて、configatronやsimpleconfigのような他の多くの設定ツールがあります。

于 2012-07-24T19:05:50.710 に答える
1

ブロックを介して設定されたグローバル構成。

module VkRobioAPI
  module Configuration

  OPTION_NAMES = [
      :client_id,
      :redirect_uri,
      :display,
      :response_type
    ]

    attr_accessor *OPTION_NAMES

    def configure 
      yield self if block_given?
      self
    end

  end
end


module VkRobioAPI
  extend VkRobioAPI::Configuration

  class << self
    def result
     puts VkRobioAPI.client_id 
    end
  end
end

例:

  VkRobioAPI.configure do |config|
    config.client_id       = '3427211'
    config.redirect_uri   = 'bEWLUZrNLxff1oQpEa6M'
    config.response_type = 'http://localhost:3000/oauth/callback'
    config.display = 'token'
  end

結果:

VkRobioAPI.result
    #3427211
    #=> nil
于 2013-06-04T19:36:53.820 に答える
1

レールを使用している場合はActiveSupport::Configurable、クラスに参加するだけで、すぐに参加できます。レールの外側では、activesuportgemをGemfileまたはgemspecに追加してから、を呼び出す必要がありますrequire 'active_support/configurable'

class MyClass
  include ActiveSupport::Configurable
end

使用法

ブロック付き

MyClass.configure do |config|
  config.key = "something"
  config.key2 = "something else"
end

またはインライン、ブロックなし

MyClass.config.key = "something"
MyClass.config.key2 = "something else"

またはハッシュのように

MyClass.config[:key] = "somehting"
MyClass.config[:key2] = "something else"

注:キーは任意の文字にすることができます。

于 2018-09-18T17:40:06.673 に答える