utils.rb 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. require 'jsonpath'
  2. require 'cgi'
  3. module Utils
  4. def self.unindent(s)
  5. s = s.gsub(/\t/, ' ').chomp
  6. min = ((s.split("\n").find {|l| l !~ /^\s*$/ })[/^\s+/, 0] || "").length
  7. if min > 0
  8. s.gsub(/^#{" " * min}/, "")
  9. else
  10. s
  11. end
  12. end
  13. def self.pretty_print(struct, indent = true)
  14. output = JSON.pretty_generate(struct)
  15. if indent
  16. output.gsub(/\n/i, "\n ").tap { |a| p a }
  17. else
  18. output
  19. end
  20. end
  21. def self.recursively_symbolize_keys(object)
  22. case object
  23. when Hash
  24. object.inject({}) {|memo, (k, v)| memo[String === k ? k.to_sym : k] = recursively_symbolize_keys(v); memo }
  25. when Array
  26. object.map { |item| recursively_symbolize_keys item }
  27. else
  28. object
  29. end
  30. end
  31. def self.value_at(data, path)
  32. values_at(data, path).first
  33. end
  34. def self.values_at(data, path)
  35. if path =~ /\Aescape /
  36. path.gsub!(/\Aescape /, '')
  37. escape = true
  38. else
  39. escape = false
  40. end
  41. result = JsonPath.new(path, :allow_eval => false).on(data.is_a?(String) ? data : data.to_json)
  42. if escape
  43. result.map {|r| CGI::escape r }
  44. else
  45. result
  46. end
  47. end
  48. end