オブジェクトの設定情報を保持するパターンを紹介します。
このパターンを使えば設定情報を管理するクラスに集約することができ、コードの見通しがよくなります。また、初期設定の定義ができるようになります。
名前空間で区切って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
|