module SnakyHash::Serializer
def blank?(value)
-
(Boolean)
- true if value is blank
Parameters:
-
value
(Object
) -- value to check
def blank?(value) return true if value.nil? return true if value.is_a?(String) && value.empty? false end
def dump(obj)
-
(String)
- JSON string representation of the hash
Parameters:
-
obj
(Hash
) -- the hash to serialize
def dump(obj) hash = dump_hash(obj) hash.to_json end
def dump_hash(hash)
-
(Hash)
- processed hash with transformed values
Parameters:
-
hash
(Hash
) -- hash to process
def dump_hash(hash) dump_hash_extensions.run(self[hash]).transform_values do |value| dump_value(value) end end
def dump_value(value)
-
(Object, nil)
- processed value
Parameters:
-
value
(Object
) -- value to process
def dump_value(value) if blank?(value) return value end if value.is_a?(::Hash) return dump_hash(value) end if value.is_a?(::Array) return value.map { |v| dump_value(v) }.compact end dump_extensions.run(value) end
def extended(base)
-
(void)
-
Parameters:
-
base
(Class
) -- the class being extended
def extended(base) extended_module = Modulizer.to_extended_mod base.extend(extended_module) base.include(ConvenienceInstanceMethods) # :nocov: # This will be run in CI on Ruby 2.3, but we only collect coverage from current Ruby unless base.instance_methods.include?(:transform_values) base.include(BackportedInstanceMethods) end # :nocov: end
def load(raw_hash)
-
(Hash)
- deserialized hash object
Parameters:
-
raw_hash
(String, nil
) -- JSON string to deserialize
def load(raw_hash) hash = JSON.parse(presence(raw_hash) || "{}") load_hash(new(hash)) end
def load_hash(hash)
-
(Hash)
- processed hash with transformed values
Parameters:
-
hash
(Hash
) -- hash to process
def load_hash(hash) ran = load_hash_extensions.run(self[hash]) return load_value(ran) unless ran.is_a?(::Hash) res = self[ran].transform_values do |value| load_value(value) end # TODO: Drop this hack when dropping support for Ruby 2.6 if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.7") res else # :nocov: # In Ruby <= 2.6 Hash#transform_values returned a new vanilla Hash, # rather than a hash of the class being transformed. self[res] # :nocov: end end
def load_value(value)
-
(Object, nil)
- processed value
Parameters:
-
value
(Object
) -- value to process
def load_value(value) if blank?(value) return value end if value.is_a?(::Hash) return load_hash(value) end if value.is_a?(::Array) return value.map { |v| load_value(v) }.compact end load_extensions.run(value) end
def presence(value)
-
(Object, nil)
- the value or nil if blank
Parameters:
-
value
(Object
) -- value to check
def presence(value) blank?(value) ? nil : value end