Module: Fuguta::Configuration::ConfigurationMethods::ClassMethods
- Defined in:
- lib/fuguta.rb
Instance Method Summary collapse
- #configuration_class ⇒ Object
-
#def_configuration(&blk) ⇒ Object
Helper method to define class specific configuration class.
Instance Method Details
#configuration_class ⇒ Object
197 198 199 |
# File 'lib/fuguta.rb', line 197 def configuration_class ConfigurationMethods.find_configuration_class(self) end |
#def_configuration(&blk) ⇒ Object
Helper method to define class specific configuration class.
def_configuration(&blk) is available when you include this module
# Example: class Base
include Fuguta::Configuration::ConfigurationMethods
def_configuration do
param :xxxx
param :yyyy
end
end
Above example does exactly same thing as below:
class Base
class Configuration < Fuguta::Configuration
param :xxxx
param :yyyy
end
@configuration_class = Configuration
end
# Examples for new classes of Base inheritance. class A < Base
def_configuration do
param :zzzz
end
def_configuration do
param :xyxy
end
p Configuration # => A::Configuration
p Configuration.superclass # => Base::Configuration
p @configuration_class # => A::Configuration
end
class B < A
p self.configuration_class # => A::Configuration
end
182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/fuguta.rb', line 182 def def_configuration(&blk) # create new configuration class if not exist. if self.const_defined?(:Configuration, false) unless self.const_get(:Configuration, false) < Fuguta::Configuration raise TypeError, "#{self}::Configuration constant is defined already for another purpose." end else self.const_set(:Configuration, Class.new(self.configuration_class || Fuguta::Configuration)) @configuration_class = self.const_get(:Configuration, false) end if blk @configuration_class.module_eval(&blk) end end |