class CFA::AugeasCollection

Represents list of same config options in augeas. For example comments are often stored in collections.

Public Class Methods

new(tree, name) click to toggle source
# File lib/cfa/augeas_parser.rb, line 104
def initialize(tree, name)
  @tree = tree
  @name = name
  load_collection
end

Public Instance Methods

add(value, placer = AppendPlacer.new) click to toggle source
# File lib/cfa/augeas_parser.rb, line 112
def add(value, placer = AppendPlacer.new)
  element = placer.new_element(@tree)
  element[:key] = augeas_name
  element[:value] = value
  element[:operation] = :add
  # FIXME: load_collection missing here
end
delete(value) click to toggle source
# File lib/cfa/augeas_parser.rb, line 120
def delete(value)
  to_delete, to_mark = to_remove(value)
                       .partition { |e| e[:operation] == :add }
  @tree.all_data.delete_if { |e| to_delete.include?(e) }

  to_mark.each { |e| e[:operation] = :remove }

  load_collection
end

Private Instance Methods

augeas_name() click to toggle source
# File lib/cfa/augeas_parser.rb, line 139
def augeas_name
  @name + "[]"
end
load_collection() click to toggle source
# File lib/cfa/augeas_parser.rb, line 132
def load_collection
  entries = @tree.data.select do |entry|
    entry[:key] == augeas_name && entry[:operation] != :remove
  end
  @collection = entries.map { |e| e[:value] }.freeze
end
to_remove(value) click to toggle source
# File lib/cfa/augeas_parser.rb, line 143
def to_remove(value)
  key = augeas_name

  @tree.data.select do |entry|
    entry[:key] == key && value_match?(entry[:value], value)
  end
end
value_match?(value, match) click to toggle source
# File lib/cfa/augeas_parser.rb, line 151
def value_match?(value, match)
  if match.is_a?(Regexp)
    value =~ match
  else
    value == match
  end
end