class ModelApi::SimpleMetadata

Public Class Methods

merge_superclass_metadata(type, sc, metadata, opts = {}) click to toggle source
# File lib/model-api/simple_metadata.rb, line 22
def merge_superclass_metadata(type, sc, metadata, opts = {})
  metadata_def_method = :"api_#{type}"
  if sc == ActiveRecord::Base || !sc.respond_to?(:"api_#{type}")
    metadata
  elsif (exclude_keys = opts[:exclude_keys]).is_a?(Array)
    (sc.send(metadata_def_method) || {}).reject { |k, _v| exclude_keys.include?(k) }
        .merge(metadata)
  else
    (sc.send(metadata_def_method) || {}).merge(metadata)
  end
end
process_metadata(type, obj, args, opts = {}) click to toggle source
# File lib/model-api/simple_metadata.rb, line 4
def process_metadata(type, obj, args, opts = {})
  instance_var = :"@api_#{type}_metadata"
  metadata = obj.instance_variable_get(instance_var) || {}
  if args.present?
    if args.size == 1 && args[0].is_a?(Hash)
      metadata.merge!(args[0].symbolize_keys)
    elsif args.size == 1 && args[0].is_a?(Array)
      metadata.merge!(Hash[args[0].map { |key| [key.to_sym, {}] }])
    else
      metadata.merge!(Hash[args.map { |key| [key.to_sym, {}] }])
    end
    ModelApi::Utils.invoke_callback(opts[:post_process], metadata,
        opts.merge(type: type, object: obj))
    obj.instance_variable_set(instance_var, metadata)
  end
  metadata.dup
end