Sha256: 7cb7320767ffde71e8f817183da2ea56b3063d02bede0dc2e4c43fc59304fa5f
Contents?: true
Size: 1.49 KB
Versions: 2
Compression:
Stored size: 1.49 KB
Contents
class SchemaSerializer class Schema attr_reader :type, :nullable, :items, :required, :properties def initialize(hash = {}) @type = hash["type"] @nullable = !hash["nullable"].nil? case type when "array" @items = self.class.new(hash.fetch("items")) when "object", nil @required = hash["required"] || [] @properties = hash.fetch("properties").each_with_object({}) { |(column, property), obj| obj[column] = self.class.new(property) } end end def serialize(object) return nil if nullable && object.nil? case type when "integer" object.to_i when "number" object.to_f when "string" object.to_s when "boolean" !object.nil? when "array" object.map { |item| items.serialize(item) } else not_enough_columns = required - properties.keys raise RequiredNotDefined, not_enough_columns.join(", ") unless not_enough_columns.empty? properties.each_with_object({}) { |(column, schema), obj| obj[column] = schema.serialize(get_value(object, column)) } end end private def get_value(object, column) return object[column] || object[column.to_sym] if object.is_a?(Hash) value = object.public_send(column) return value if !object.respond_to?(:defined_enums) || !object.defined_enums.has_key?(column) object.defined_enums[column][value] end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
schema_serializer-0.1.1 | lib/schema_serializer/schema.rb |
schema_serializer-0.1.0 | lib/schema_serializer/schema.rb |