module Tengine::Support::Config::Definition::ClassMethods

Public Instance Methods

depends(*definition_reference_names) click to toggle source
# File lib/tengine/support/config/definition.rb, line 81
def depends(*definition_reference_names)
  if superclass.is_a?(Tengine::Support::Config::Definition) &&
      (self.definition_reference_names == self.superclass.definition_reference_names)
    self.definition_reference_names = self.superclass.definition_reference_names.dup
  end
  self.class_eval do
    definition_reference_names.each do |ref_name|
      attr_accessor ref_name
    end
  end
  self.definition_reference_names += definition_reference_names
end
field(__name__, *args, &block) click to toggle source
# File lib/tengine/support/config/definition.rb, line 25
def field(__name__, *args, &block)
  attrs = args.last.is_a?(Hash) ? args.pop : {}
  attrs[:description] = args.first unless args.empty?
  attrs[:__name__] = __name__
  attrs[:__parent__] = self
  attrs[:convertor] = block

  if (superclass < Tengine::Support::Config::Definition) &&
      (self.children == self.superclass.children)
    self.children = self.superclass.children.dup
  end
  if field = children.detect{|child| child.__name__ == __name__}
    new_field = field.dup
    new_field.update(attrs)
    idx = self.children.index(field)
    self.children[idx] = new_field
    field = new_field
  else
    field = Field.new(attrs)
    self.children << field
  end
  (class << self; self; end).module_eval do
    define_method(field.__name__){ field }
  end
  self.class_eval do
    field_name = field.__name__
    ivar_name = :"@#{field_name}"

    define_method(field_name) do
      if result = instance_variable_get(ivar_name)
        result
      else
        field = child_by_name(field_name)
        result = field ? field.default_value : nil
        instance_variable_set(ivar_name, result)
        result
      end
    end

    define_method("#{field.__name__}=") do |value|
      instance_variable_set("@#{field.__name__}", field.convert(value, self))
    end
  end
end
parameter(parameter_name) click to toggle source
# File lib/tengine/support/config/definition.rb, line 74
def parameter(parameter_name)
  parameters << parameter_name
  self.class_eval do
    attr_accessor parameter_name
  end
end
parameters() click to toggle source
# File lib/tengine/support/config/definition.rb, line 70
def parameters
  @parameters ||= []
end