Guest User

Untitled

a guest
Feb 21st, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.66 KB | None | 0 0
  1. # Merges a set of options with the default options.
  2. #
  3. # direction::
  4. # 'in': If options should be handled for xml_in.
  5. # 'out': If options should be handled for xml_out.
  6. # options::
  7. # Options to be merged with the default options.
  8. def handle_options(direction, options)
  9. @options = options || Hash.new
  10.  
  11. raise ArgumentError, "Options must be a Hash!" unless @options.instance_of?(Hash)
  12.  
  13. unless KNOWN_OPTIONS.has_key?(direction)
  14. raise ArgumentError, "Unknown direction: <#{direction}>."
  15. end
  16.  
  17. known_options = KNOWN_OPTIONS[direction]
  18. @options = normalize_option_names(@options, known_options)
  19.  
  20. unless @default_options.nil?
  21. known_options.each { |option|
  22. unless @options.has_key?(option)
  23. if @default_options.has_key?(option)
  24. @options[option] = @default_options[option]
  25. end
  26. end
  27. }
  28. end
  29.  
  30. unless @options.has_key?('noattr')
  31. @options['noattr'] = false
  32. end
  33.  
  34. if @options.has_key?('rootname')
  35. @options['rootname'] = '' if @options['rootname'].nil?
  36. else
  37. @options['rootname'] = DEF_ROOT_NAME
  38. end
  39.  
  40. if @options.has_key?('xmldeclaration') && @options['xmldeclaration'] == true
  41. @options['xmldeclaration'] = DEF_XML_DECLARATION
  42. end
  43.  
  44. @options['keytosymbol'] = DEF_KEY_TO_SYMBOL unless @options.has_key?('keytosymbol')
  45.  
  46. if @options.has_key?('contentkey')
  47. if @options['contentkey'] =~ /^-(.*)$/
  48. @options['contentkey'] = $1
  49. @options['collapseagain'] = true
  50. end
  51. else
  52. @options['contentkey'] = DEF_CONTENT_KEY
  53. end
  54.  
  55. unless @options.has_key?('normalisespace')
  56. @options['normalisespace'] = @options['normalizespace']
  57. end
  58. @options['normalisespace'] = 0 if @options['normalisespace'].nil?
  59.  
  60. if @options.has_key?('searchpath')
  61. unless @options['searchpath'].instance_of?(Array)
  62. @options['searchpath'] = [ @options['searchpath'] ]
  63. end
  64. else
  65. @options['searchpath'] = []
  66. end
  67.  
  68. if @options.has_key?('cache') && scalar(@options['cache'])
  69. @options['cache'] = [ @options['cache'] ]
  70. end
  71.  
  72. @options['anonymoustag'] = DEF_ANONYMOUS_TAG unless @options.has_key?('anonymoustag')
  73.  
  74. if !@options.has_key?('indent') || @options['indent'].nil?
  75. @options['indent'] = DEF_INDENTATION
  76. end
  77.  
  78. @options['indent'] = '' if @options.has_key?('noindent')
  79.  
  80. # Special cleanup for 'keyattr' which could be an array or
  81. # a hash or left to default to array.
  82. if @options.has_key?('keyattr')
  83. if !scalar(@options['keyattr'])
  84. # Convert keyattr => { elem => '+attr' }
  85. # to keyattr => { elem => ['attr', '+'] }
  86. if @options['keyattr'].instance_of?(Hash)
  87. @options['keyattr'].each { |key, value|
  88. if value =~ /^([-+])?(.*)$/
  89. @options['keyattr'][key] = [$2, $1 ? $1 : '']
  90. end
  91. }
  92. elsif !@options['keyattr'].instance_of?(Array)
  93. raise ArgumentError, "'keyattr' must be String, Hash, or Array!"
  94. end
  95. else
  96. @options['keyattr'] = [ @options['keyattr'] ]
  97. end
  98. else
  99. @options['keyattr'] = DEF_KEY_ATTRIBUTES
  100. end
  101.  
  102. if @options.has_key?('forcearray')
  103. if @options['forcearray'].instance_of?(Regexp)
  104. @options['forcearray'] = [ @options['forcearray'] ]
  105. end
  106.  
  107. if @options['forcearray'].instance_of?(Array)
  108. force_list = @options['forcearray']
  109. unless force_list.empty?
  110. @options['forcearray'] = {}
  111. force_list.each { |tag|
  112. if tag.instance_of?(Regexp)
  113. unless @options['forcearray']['_regex'].instance_of?(Array)
  114. @options['forcearray']['_regex'] = []
  115. end
  116. @options['forcearray']['_regex'] << tag
  117. else
  118. @options['forcearray'][tag] = true
  119. end
  120. }
  121. else
  122. @options['forcearray'] = false
  123. end
  124. else
  125. @options['forcearray'] = @options['forcearray'] ? true : false
  126. end
  127. else
  128. @options['forcearray'] = DEF_FORCE_ARRAY
  129. end
  130.  
  131. if @options.has_key?('grouptags') && !@options['grouptags'].instance_of?(Hash)
  132. raise ArgumentError, "Illegal value for 'GroupTags' option - expected a Hash."
  133. end
  134.  
  135. if @options.has_key?('variables') && !@options['variables'].instance_of?(Hash)
  136. raise ArgumentError, "Illegal value for 'Variables' option - expected a Hash."
  137. end
  138.  
  139. if @options.has_key?('variables')
  140. @_var_values = @options['variables']
  141. elsif @options.has_key?('varattr')
  142. @_var_values = {}
  143. end
  144. end
Add Comment
Please, Sign In to add comment