utils.rb 722B

123456789101112131415161718192021222324252627
  1. require 'jsonpath'
  2. module Utils
  3. # Unindents if the indentation is 2 or more characters.
  4. def self.unindent(s)
  5. s.gsub(/^#{s.scan(/^\s+/).select {|i| i.length > 1 }.min_by{|l|l.length}}/, "")
  6. end
  7. def self.recursively_symbolize_keys(object)
  8. case object
  9. when Hash
  10. object.inject({}) {|memo, (k, v)| memo[String === k ? k.to_sym : k] = recursively_symbolize_keys(v); memo }
  11. when Array
  12. object.map { |item| recursively_symbolize_keys item }
  13. else
  14. object
  15. end
  16. end
  17. def self.value_at(data, path)
  18. values_at(data, path).first
  19. end
  20. def self.values_at(data, path)
  21. JsonPath.new(path, :allow_eval => false).on(data.is_a?(String) ? data : data.to_json)
  22. end
  23. end