class Kafo::ParamBuilder

Public Class Methods

new(mod, data) click to toggle source
# File lib/kafo/param_builder.rb, line 5
def initialize(mod, data)
  @data   = data
  @module = mod
  @groups = []
end

Public Instance Methods

build(name, data) click to toggle source
# File lib/kafo/param_builder.rb, line 53
def build(name, data)
  param           = get_type(data[:types][name]).new(@module, name)
  param.default   = data[:values][name]
  param.doc       = data[:docs][name]
  param.groups    = data[:groups][name]
  param.condition = data[:conditions][name]
  param
end
build_param_groups(params) click to toggle source
# File lib/kafo/param_builder.rb, line 34
def build_param_groups(params)
  data = Hash[get_parameters_groups_by_param_name]
  data.each do |param_name, param_groups|
    param_groups.each_with_index do |group_name, i|
      param_group = find_or_build_group(group_name)
      if i + 1 < param_groups.size
        param_group.add_child find_or_build_group(param_groups[i + 1])
      end

      param_group = find_or_build_group(param_groups.last)
      param       = params.detect { |p| p.name == param_name }
      param_group.add_param param unless param.nil?
    end
  end

  # top level groups
  data.values.map(&:first).compact.uniq.map { |name| @groups.detect { |g| g.name == name } }
end
build_params() click to toggle source
# File lib/kafo/param_builder.rb, line 27
def build_params
  @data[:parameters].map do |param_name|
    build(param_name, @data)
  end
end
validate() click to toggle source
# File lib/kafo/param_builder.rb, line 11
def validate
  return true if @module.configuration.app[:ignore_undocumented]

  parameters = @data[:parameters].sort
  docs       = @data[:docs].keys.sort
  if parameters == docs
    return true
  else
    undocumented = parameters - docs
    raise ConfigurationException, "undocumented parameters in #{@module.name}: #{undocumented.join(', ')}" unless undocumented.empty?
    deleted = docs - parameters
    raise ConfigurationException, "documentation mentioned unknown parameters in #{@module.name}: #{deleted.join(', ')}" unless deleted.empty?
    raise ConfigurationException, "unknown error in configuration in #{@module.name}"
  end
end

Private Instance Methods

find_or_build_group(name) click to toggle source
# File lib/kafo/param_builder.rb, line 70
def find_or_build_group(name)
  param_group = @groups.detect { |g| g.name == name }
  unless param_group
    param_group        = ParamGroup.new(name)
    param_group.module = @module
    @groups.push param_group
  end
  param_group
end
get_parameters_groups_by_param_name() click to toggle source
# File lib/kafo/param_builder.rb, line 64
def get_parameters_groups_by_param_name
  @data[:groups].map do |name, groups|
    [name, groups.select { |g| g =~ /parameters/i }]
  end
end
get_type(type) click to toggle source
# File lib/kafo/param_builder.rb, line 80
def get_type(type)
  type = (type || 'string').capitalize
  Params.const_defined?(type) ? Params.const_get(type) : raise(TypeError, "undefined parameter type '#{type}'")
end