class CFA::AugeasReader

A class responsible for reading {AugeasTree} from Augeas

Public Class Methods

read(aug, prefix) click to toggle source

Creates tree from prefix in aug. @param aug [::Augeas] @param prefix [String] Augeas path prefix @return [AugeasTree]

# File lib/cfa/augeas_parser/reader.rb, line 14
def read(aug, prefix)
  keys_cache = AugeasKeysCache.new(aug, prefix)

  tree = AugeasTree.new
  load_tree(aug, prefix, tree, keys_cache)

  tree
end

Private Class Methods

load_key(prefix, aug_key) click to toggle source

loads a key in a format that AugeasTree expects

# File lib/cfa/augeas_parser/reader.rb, line 41
def load_key(prefix, aug_key)
  # clean from key prefix and for collection remove number inside []
  key = stripped_path(prefix, aug_key)
  key.end_with?("]") ? key.sub(/\[\d+\]$/, "[]") : key
end
load_tree(aug, prefix, tree, keys_cache) click to toggle source

fills tree with data

# File lib/cfa/augeas_parser/reader.rb, line 26
def load_tree(aug, prefix, tree, keys_cache)
  data = keys_cache.keys_for_prefix(prefix).map do |key|
    aug_key = prefix + "/" + key
    {
      key:       load_key(prefix, aug_key),
      value:     load_value(aug, aug_key, keys_cache),
      orig_key:  stripped_path(prefix, aug_key),
      operation: :keep
    }
  end

  tree.all_data.concat(data)
end
load_value(aug, aug_key, keys_cache) click to toggle source

loads value from auges. If value have tree under, it will also read it

# File lib/cfa/augeas_parser/reader.rb, line 54
def load_value(aug, aug_key, keys_cache)
  subkeys = keys_cache.keys_for_prefix(aug_key)

  nested = !subkeys.empty?
  value = aug.get(aug_key)
  if nested
    subtree = AugeasTree.new
    load_tree(aug, aug_key, subtree, keys_cache)
    value ? AugeasTreeValue.new(subtree, value) : subtree
  else
    value
  end
end
stripped_path(prefix, aug_key) click to toggle source

path without prefix we are not interested in

# File lib/cfa/augeas_parser/reader.rb, line 48
def stripped_path(prefix, aug_key)
  # +1 for size due to ending '/' not part of prefix
  aug_key[(prefix.size + 1)..-1]
end