6 def initialize(setting_value, subsetting_separator = ' ', default_quote_char = nil)
7 @setting_value = setting_value
8 @subsetting_separator = subsetting_separator
10 default_quote_char ||= ''
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?
18 @subsetting_items = []
19 @quote_char = default_quote_char
23 def unquote_setting_value(setting_value)
25 if (setting_value.start_with?('"') and setting_value.end_with?('"'))
27 elsif (setting_value.start_with?("'") and setting_value.end_with?("'"))
31 unquoted = setting_value
34 unquoted = setting_value[1, setting_value.length - 2]
37 [unquoted, quote_char]
45 @subsetting_items.each { |item|
46 result << @subsetting_separator unless first
51 @quote_char + result + @quote_char
54 def get_subsetting_value(subsetting)
58 @subsetting_items.each { |item|
59 if(item.start_with?(subsetting))
60 value = item[subsetting.length, item.length - subsetting.length]
68 def add_subsetting(subsetting, subsetting_value)
70 new_item = subsetting + (subsetting_value || '')
73 @subsetting_items.map! { |item|
74 if item.start_with?(subsetting)
85 @subsetting_items.push(new_item)
89 def remove_subsetting(subsetting)
90 @subsetting_items = @subsetting_items.map { |item| item.start_with?(subsetting) ? nil : item }.compact