Sha256: dde9479d4a3589b671ab52f760d2223a780b46464ff722c8a5c4f4e3562840b1
Contents?: true
Size: 1.72 KB
Versions: 1
Compression:
Stored size: 1.72 KB
Contents
# frozen_string_literal: true require "oj" require "yaml" require "basic_serializer/dsl" BasicStruct = Class.new(Struct) class BasicSerializer extend DSL attr_reader :object def initialize(object) @object = object.is_a?(Hash) ? struct(object) : object remove_instance_variable(:@struct) if defined?(@struct) end def stringified_attributes hash = {} self.class.attributes.each_key do |attr_name| hash[attr_name] = send(attr_name) end deep_stringify_keys(hash) end alias as_json stringified_attributes def to_json(*_args) Oj.dump(stringified_attributes) end def to_yaml YAML.dump(stringified_attributes) end def serialize case self.class.instance_variable_get(:@format) when :json then to_json when :yaml then to_yaml else stringified_attributes end end def self.swagger_ref @schema_ref || "#/components/schemas/#{custom_model_name}" end def self.swagger_schema hash = { type: "object", properties: {} } attributes.each_pair do |name, type| hash[:properties][name] = { type: type } end hash end singleton_class.alias_method :openapi_ref, :swagger_ref singleton_class.alias_method :openapi_schema, :swagger_schema private def deep_stringify_keys(hash) hash.transform_keys(&:to_s).transform_values do |value| case value when Hash then deep_stringify_keys(value) when Array then value.map { |item| item.is_a?(Hash) ? deep_stringify_keys(item) : item } else value end end end def struct(object) return @struct if @struct basic_struct ||= BasicStruct.new(*object.keys.map(&:to_sym), keyword_init: true) @struct ||= basic_struct.new(**object) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
basic_serializer-0.1.2 | lib/basic_serializer.rb |