Module: Fuguta::Configuration::ConfigurationMethods::ClassMethods

Defined in:
lib/fuguta.rb

Instance Method Summary collapse

Instance Method Details

#configuration_classObject



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