Sha256: 65e26316626e866479ae274bec523152801641736238b467f7d744cd1e72320a
Contents?: true
Size: 1.47 KB
Versions: 2
Compression:
Stored size: 1.47 KB
Contents
module Strain module SchemaTools class Defaults def initialize(schema_hash, data_hash) @schema = schema_hash @data = data_hash end def default_values raise "Invalid schema." unless @schema["type"] == "object" && @schema.has_key?("properties") property_defaults(@schema["properties"]) end def data_with_defaults merge_defaults(@data, default_values) end private def property_defaults(properties_hash) properties_hash.each_with_object({}) do | (prop_name, prop_schema), memo | if prop_schema["type"] === "object" && prop_schema.has_key?("default") memo[prop_name] = prop_schema["default"] end if prop_schema["type"] === "object" && prop_schema.has_key?("properties") extracted_defaults = property_defaults(prop_schema["properties"]) memo[prop_name] = extracted_defaults unless extracted_defaults.empty? elsif prop_schema.has_key?("default") memo[prop_name] = prop_schema["default"] end end end def merge_defaults(data, defaults) data.merge(defaults) do | key, data_value, default_value | if data_value.is_a? Hash merge_defaults(data_value, default_value) elsif [nil, "", []].include?(data_value) default_value else data_value end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
strain-0.0.2 | lib/strain/schema_tools/defaults.rb |
strain-0.0.1 | lib/strain/schema_tools/defaults.rb |