class ModelApi::HashMetadata
Public Class Methods
merge_superclass_metadata(type, sc, metadata)
click to toggle source
# File lib/model-api/hash_metadata.rb, line 29 def merge_superclass_metadata(type, sc, metadata) metadata_method = :"api_#{type}" return metadata if sc == ActiveRecord::Base || !sc.respond_to?(metadata_method) superclass_metadata = sc.send(metadata_method) merged_metadata = {} superclass_metadata.each do |item, item_metadata| merged_metadata[item] = item_metadata.dup end metadata.each do |key, item_metadata| if (existing_item_metadata = merged_metadata[key]).is_a?(Hash) existing_item_metadata.merge!(item_metadata) else merged_metadata[key] = item_metadata end end merged_metadata end
process_metadata(type, obj, args)
click to toggle source
# File lib/model-api/hash_metadata.rb, line 4 def process_metadata(type, obj, args) type = type.to_sym instance_var = :"@api_#{type}_metadata" metadata = obj.instance_variable_get(instance_var) || {} if args.present? if args.size == 1 && args[0].is_a?(Hash) new_metadata = args[0].symbolize_keys elsif args.size == 1 && args[0].is_a?(Array) new_metadata = Hash[args[0].map { |key| [key.to_sym, {}] }] else new_metadata = Hash[args.map { |key| [key.to_sym, {}] }] end new_metadata.symbolize_keys.each do |key, item_metadata| if (existing_item_metadata = metadata[key]).is_a?(Hash) existing_item_metadata.merge!(item_metadata) else item_metadata[:key] = key metadata[key] = item_metadata end end obj.instance_variable_set(instance_var, metadata) end metadata.dup end