Method: AttrJson::Model#serializable_hash
- Defined in:
- lib/attr_json/model.rb
#serializable_hash(options = nil) ⇒ Object
Override from ActiveModel::Serialization to:
handle store_key settings
serialize by type to make sure any values set directly on hash still
get properly type-serialized.
custom logic for keeping nil values out of serialization to be more compact
360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
# File 'lib/attr_json/model.rb', line 360 def serializable_hash(=nil) strip_nils = &.has_key?(:strip_nils) ? .delete(:strip_nils) : false unless [true, false, :safely].include?(strip_nils) raise ArgumentError, ":strip_nils must be true, false, or :safely" end super().collect do |key, value| if attribute_def = self.class.attr_json_registry[key.to_sym] key = attribute_def.store_key value = attribute_def.serialize(value) end # strip_nils handling if value.nil? && ( (strip_nils == :safely && !attribute_def&.has_default?) || strip_nils == true ) then # do not include in serializable_hash nil else [key, value] end end.compact.to_h end |