module GraphQL::Subscriptions::Serialize
Serialization helpers for passing subscription data around. @api private
Constants
- GLOBALID_KEY
- SYMBOL_KEY
- SYMBOL_KEYS_KEY
Private Class Methods
dump_value(obj)
click to toggle source
@param obj [Object] Some subscription-related data to dump @return [Object] The object that converted Global::Identification
# File lib/graphql/subscriptions/serialize.rb, line 83 def dump_value(obj) if obj.is_a?(Array) obj.map{|item| dump_value(item)} elsif obj.is_a?(Hash) symbol_keys = nil dumped_h = {} obj.each do |k, v| dumped_h[k.to_s] = dump_value(v) if k.is_a?(Symbol) symbol_keys ||= Set.new symbol_keys << k.to_s end end if symbol_keys dumped_h[SYMBOL_KEYS_KEY] = symbol_keys.to_a end dumped_h elsif obj.is_a?(Symbol) { SYMBOL_KEY => obj.to_s } elsif obj.respond_to?(:to_gid_param) {GLOBALID_KEY => obj.to_gid_param} else obj end end
load_value(value)
click to toggle source
@param value [Object] A parsed JSON object @return [Object] An object that load Global::Identification recursive
# File lib/graphql/subscriptions/serialize.rb, line 54 def load_value(value) if value.is_a?(Array) value.map{|item| load_value(item)} elsif value.is_a?(Hash) if value.size == 1 && value.key?(GLOBALID_KEY) GlobalID::Locator.locate(value[GLOBALID_KEY]) elsif value.size == 1 && value.key?(SYMBOL_KEY) value[SYMBOL_KEY].to_sym else loaded_h = {} sym_keys = value.fetch(SYMBOL_KEYS_KEY, []) value.each do |k, v| if k == SYMBOL_KEYS_KEY next end if sym_keys.include?(k) k = k.to_sym end loaded_h[k] = load_value(v) end loaded_h end else value end end
Public Instance Methods
dump(obj)
click to toggle source
@param obj [Object] Some subscription-related data to dump @return [String] The stringified object
# File lib/graphql/subscriptions/serialize.rb, line 24 def dump(obj) JSON.generate(dump_value(obj), quirks_mode: true) end
dump_recursive(obj)
click to toggle source
This is for turning objects into subscription scopes. It's a one-way transformation, can't reload this :'( @param obj [Object] @return [String]
# File lib/graphql/subscriptions/serialize.rb, line 32 def dump_recursive(obj) case when obj.is_a?(Array) obj.map { |i| dump_recursive(i) }.join(':') when obj.is_a?(Hash) obj.map { |k, v| "#{dump_recursive(k)}:#{dump_recursive(v)}" }.join(":") when obj.is_a?(GraphQL::Schema::InputObject) dump_recursive(obj.to_h) when obj.respond_to?(:to_gid_param) obj.to_gid_param when obj.respond_to?(:to_param) obj.to_param else obj.to_s end end
load(str)
click to toggle source
@param str [String] A serialized object from {.dump} @return [Object] An object equivalent to the one passed to {.dump}
# File lib/graphql/subscriptions/serialize.rb, line 17 def load(str) parsed_obj = JSON.parse(str) load_value(parsed_obj) end