]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/inifile/lib/puppet/util/setting_value.rb
add puppetlabs/inifile to 3rdparty
[dsa-puppet.git] / 3rdparty / modules / inifile / lib / puppet / util / setting_value.rb
1 module Puppet
2 module Util
3
4   class SettingValue
5
6     def initialize(setting_value, subsetting_separator = ' ', default_quote_char = nil)
7       @setting_value = setting_value
8       @subsetting_separator = subsetting_separator
9
10       default_quote_char ||= ''
11
12       if @setting_value
13         unquoted, @quote_char = unquote_setting_value(setting_value)
14         @subsetting_items = unquoted.scan(Regexp.new("(?:(?:[^\\#{@subsetting_separator}]|\\.)+)"))  # an item can contain escaped separator
15         @subsetting_items.map! { |item| item.strip }
16         @quote_char = default_quote_char if @quote_char.empty?
17       else
18         @subsetting_items = []
19         @quote_char = default_quote_char
20       end     
21     end
22
23     def unquote_setting_value(setting_value)
24       quote_char = ""
25       if (setting_value.start_with?('"') and setting_value.end_with?('"'))
26         quote_char = '"'
27       elsif (setting_value.start_with?("'") and setting_value.end_with?("'"))
28         quote_char = "'"
29       end
30
31       unquoted = setting_value
32
33       if (quote_char != "")
34         unquoted = setting_value[1, setting_value.length - 2]
35       end
36
37       [unquoted, quote_char]
38     end
39
40     def get_value
41     
42       result = ""
43       first = true
44       
45       @subsetting_items.each { |item|
46         result << @subsetting_separator unless first
47         result << item        
48         first = false
49       }
50       
51       @quote_char + result + @quote_char
52     end
53
54     def get_subsetting_value(subsetting)
55     
56       value = nil
57       
58       @subsetting_items.each { |item|
59         if(item.start_with?(subsetting))
60           value = item[subsetting.length, item.length - subsetting.length]
61           break
62         end
63       }
64       
65       value
66     end
67     
68     def add_subsetting(subsetting, subsetting_value)
69     
70       new_item = subsetting + (subsetting_value || '')
71       found = false
72
73       @subsetting_items.map! { |item|
74         if item.start_with?(subsetting)
75           value = new_item
76           found = true
77         else
78           value = item
79         end
80         
81         value
82       }
83       
84       unless found
85         @subsetting_items.push(new_item)
86       end
87     end
88
89     def remove_subsetting(subsetting)   
90       @subsetting_items = @subsetting_items.map { |item| item.start_with?(subsetting) ? nil : item }.compact
91     end
92     
93   end
94 end
95 end