Advertisement
Guest User

Untitled

a guest
Jun 25th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. require "byebug"
  2.  
  3. def fetch_values(str)
  4. keys=str.scan(/\w*\s+(?=\=)|\w*+(?=>\=)/)
  5. values = str.scan(/(?<=")\w+(?=")/)
  6. root_key=str.scan(/(?<=^<)+\w*/)
  7. h={}
  8. keys.each_with_index { |key, index| h[key.strip!] = values[index] }
  9. h
  10. end
  11.  
  12. def parse(strings)
  13. stack = []
  14. hash = {}
  15. strings.each do |s|
  16.  
  17. if ( (s.scan(/^</) ) && (s.scan(/^<\//).empty?) )
  18. stack.push(s)
  19. else
  20. eval_string = stack.pop
  21. eval_string_key = eval_string.scan(/(?<=^<)+\w*/).first
  22. evaluated_hash = fetch_values(eval_string)
  23. if (stack.empty?)
  24. hash[eval_string_key] = evaluated_hash
  25. else
  26. parent_key = stack.first.scan(/(?<=^<)+\w*/).first
  27. if (hash[parent_key])
  28. hash[parent_key][eval_string_key]= evaluated_hash
  29. else
  30. hash[parent_key] = {}
  31. hash[parent_key][eval_string_key]= evaluated_hash
  32. end
  33. end
  34.  
  35. end
  36.  
  37. end
  38. hash
  39. end
  40.  
  41. line_of_code = [
  42. '<tag1 value = "HelloWorld">',
  43. '<tag2 name = "Name1">',
  44. '</tag2>',
  45. '</tag1>'
  46. ]
  47.  
  48. puts(parse(line_of_code))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement