[Ruby]オブジェクトの設定情報を保持するパターンの紹介

オブジェクトの設定情報を保持するパターンを紹介します。
このパターンを使えば設定情報を管理するクラスに集約することができ、コードの見通しがよくなります。また、初期設定の定義ができるようになります。

名前空間で区切ってConfigurationモデルに設定を持たせるようにします。
そして、トップにconfigurationとconfigureメソッドを定義します。
クラスメソッドで定義するのがポイントです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Hoge
class Configuration
def initialize
@name = nil
end
attr_accessor :name

end

def self.configuration
@configuration ||= Hoge::Configuration.new
end

def self.configure
yield configuration if block_given?
end
end

configureメソッドは以下のように初期設定したいパラメーターを設定するために使います。

1
2
3
4
5
6
7
Hope.configure do |config|
config.name = 'shoyan'
end

config = Hoge.configuration
config.name
=> "shoyan"

configureメソッドで設定した情報が保持されています。
初期設定はできるようになりました。

次はこの設定情報を内部で参照するようにします。

Hopeクラスのinitializeメソッドで設定情報をインスタンス変数に保存します。

1
2
3
4
5
6
7
8
9
class Hoge
def initialize
@config = Hoge.configuration
end

def greeting
puts "Hello #{@config.name}"
end
end

実行してみます。
Hope::Configurationの値が出力されていますね。

1
2
3
hoge = Hoge.new
hope.greeting
=> Hello shoyan

Hoge.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Hoge
class Configuration
def initialize
@name = nil
end
attr_accessor :name
end

def initialize
@config = Hoge.configuration
end

def greeting
puts "Hello #{@config.name}"
end

def self.configuration
@configuration ||= Hoge::Configuration.new
end

def self.configure
yield configuration if block_given?
end
end