setting_value.rb 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. module Puppet
  2. module Util
  3. class SettingValue
  4. def initialize(setting_value, subsetting_separator = ' ', default_quote_char = nil)
  5. @setting_value = setting_value
  6. @subsetting_separator = subsetting_separator
  7. default_quote_char ||= ''
  8. if @setting_value
  9. unquoted, @quote_char = unquote_setting_value(setting_value)
  10. @subsetting_items = unquoted.scan(Regexp.new("(?:(?:[^\\#{@subsetting_separator}]|\\.)+)")) # an item can contain escaped separator
  11. @subsetting_items.map! { |item| item.strip }
  12. @quote_char = default_quote_char if @quote_char.empty?
  13. else
  14. @subsetting_items = []
  15. @quote_char = default_quote_char
  16. end
  17. end
  18. def unquote_setting_value(setting_value)
  19. quote_char = ""
  20. if (setting_value.start_with?('"') and setting_value.end_with?('"'))
  21. quote_char = '"'
  22. elsif (setting_value.start_with?("'") and setting_value.end_with?("'"))
  23. quote_char = "'"
  24. end
  25. unquoted = setting_value
  26. if (quote_char != "")
  27. unquoted = setting_value[1, setting_value.length - 2]
  28. end
  29. [unquoted, quote_char]
  30. end
  31. def get_value
  32. result = ""
  33. first = true
  34. @subsetting_items.each { |item|
  35. result << @subsetting_separator unless first
  36. result << item
  37. first = false
  38. }
  39. @quote_char + result + @quote_char
  40. end
  41. def get_subsetting_value(subsetting)
  42. value = nil
  43. @subsetting_items.each { |item|
  44. if(item.start_with?(subsetting))
  45. value = item[subsetting.length, item.length - subsetting.length]
  46. break
  47. end
  48. }
  49. value
  50. end
  51. def add_subsetting(subsetting, subsetting_value)
  52. new_item = subsetting + (subsetting_value || '')
  53. found = false
  54. @subsetting_items.map! { |item|
  55. if item.start_with?(subsetting)
  56. value = new_item
  57. found = true
  58. else
  59. value = item
  60. end
  61. value
  62. }
  63. unless found
  64. @subsetting_items.push(new_item)
  65. end
  66. end
  67. def remove_subsetting(subsetting)
  68. @subsetting_items = @subsetting_items.map { |item| item.start_with?(subsetting) ? nil : item }.compact
  69. end
  70. end
  71. end
  72. end