summaryrefslogtreecommitdiff
path: root/lib/puppet/util/setting_value.rb
blob: 2112e565fbab3e7ad77a3ae307b016574d7dbb34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
module Puppet
module Util

  class SettingValue
  
    def initialize(setting_value, subsetting_separator = ' ')
      @setting_value = setting_value
      @subsetting_separator = subsetting_separator
      
      if @setting_value
        unquoted = setting_value[1, setting_value.length - 2]
        @subsetting_items = unquoted.scan(Regexp.new("(?:(?:[^\\#{@subsetting_separator}]|\\.)+)"))  # an item can contain escaped separator
        @subsetting_items.map! { |item| item.strip }
      else
      	@subsetting_items = []        
      end     
    end

    def get_value
    
      result = ""
      first = true
      
      @subsetting_items.each { |item|
        result << @subsetting_separator unless first
        result << item        
        first = false
      }
      
      "\"" + result + "\""
    end

    def get_subsetting_value(subsetting)
    
      value = nil
      
      @subsetting_items.each { |item|
        if(item.start_with?(subsetting))
          value = item[subsetting.length, item.length - subsetting.length]
          break
        end
      }
      
      value
    end
    
    def add_subsetting(subsetting, subsetting_value)
    
      new_item = subsetting + (subsetting_value || '')
      found = false

      @subsetting_items.map! { |item|
        if item.start_with?(subsetting)
          value = new_item
          found = true
        else
          value = item
        end
        
        value
      }
      
      unless found
        @subsetting_items.push(new_item)
      end
    end

    def remove_subsetting(subsetting)   
      @subsetting_items = @subsetting_items.map { |item| item.start_with?(subsetting) ? nil : item }.compact
    end
    
  end
end
end