setting_value.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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, use_exact_match=:false)
  42. value = nil
  43. @subsetting_items.each { |item|
  44. if(use_exact_match == :false and item.start_with?(subsetting))
  45. value = item[subsetting.length, item.length - subsetting.length]
  46. break
  47. elsif(use_exact_match == :true and item.eql?(subsetting))
  48. return true
  49. end
  50. }
  51. value
  52. end
  53. def add_subsetting(subsetting, subsetting_value, use_exact_match=:false)
  54. new_item = subsetting + (subsetting_value || '')
  55. found = false
  56. @subsetting_items.map! { |item|
  57. if use_exact_match == :false and item.start_with?(subsetting)
  58. value = new_item
  59. found = true
  60. elsif use_exact_match == :true and item.eql?(subsetting)
  61. value = new_item
  62. found = true
  63. else
  64. value = item
  65. end
  66. value
  67. }
  68. unless found
  69. @subsetting_items.push(new_item)
  70. end
  71. end
  72. def remove_subsetting(subsetting, use_exact_match=:false)
  73. if use_exact_match == :false
  74. @subsetting_items = @subsetting_items.map { |item| item.start_with?(subsetting) ? nil : item }.compact
  75. else
  76. @subsetting_items = @subsetting_items.map { |item| item.eql?(subsetting) ? nil : item }.compact
  77. end
  78. end
  79. end
  80. end
  81. end