Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/fidius-common/json_symbol_addon.rb
Overview
Part of the JSON Symbol Addon.
Instance Method Summary collapse
-
#as_json(options = nil) ⇒ String
JSON-encodes
self. -
#symbolize_keys_if_needed ⇒ Hash
Converts each key to a symbol, if the key is a
Stringand its first character is a:.
Instance Method Details
#as_json(options = nil) ⇒ String
JSON-encodes self.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/fidius-common/json_symbol_addon.rb', line 27 def as_json( = nil) # create a subset of the hash by applying :only or :except subset = if if attrs = [:only] slice(*Array.wrap(attrs)) elsif attrs = [:except] except(*Array.wrap(attrs)) else self end else self end # use encoder as a proxy to call as_json on all values in the subset, to protect from circular references encoder = && [:encoder] || ActiveSupport::JSON::Encoding::Encoder.new() # FIDIUS changed here to from k.to_s to k.as_json to decode strings with : as symbols pairs = subset.map do |k, v| [k.as_json, encoder.as_json(v)] end result = if self.is_a?(ActiveSupport::OrderedHash) ActiveSupport::OrderedHash.new else Hash.new end pairs.inject(result) do |hash, pair| hash[pair.first] = pair.last; hash end end |
#symbolize_keys_if_needed ⇒ Hash
Converts each key to a symbol, if the key is a String and its first character is a :.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/fidius-common/json_symbol_addon.rb', line 62 def symbolize_keys_if_needed to_add = Hash.new self.each_pair do |k,v| if v.respond_to?("symbolize_keys_if_needed") v.symbolize_keys_if_needed end if k[0] == ":" self.delete(k) to_add[k[1..-1].to_sym] = v end end to_add.each_pair do |k,v| self[k] = v end end |