# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later module RetrieveActiveRecordItems def self.retrieve(data, optional= false) data.map{|k,v| our_integer = Integer(v) rescue nil unless (optional && v.nil?) || (our_integer && our_integer > 0) raise ArgumentError.new("Value '#{v}' for Key '#{k}' is not valid") end unless k.is_a? Class raise ArgumentError.new("Key '#{k.to_s}' is not a class") end ret = [] if optional && v.nil? ret = [k, nil] else ret = [k, k.where('id = ?', our_integer).first] if (ret[1] == nil) raise ParamValidation::ValidationError.new("ID #{v} is not a valid #{k.to_s}", {key: k}) end end ret }.to_h end def self.retrieve_from_keys(input, class_to_key_hash, optional=false) class_to_key_hash.map{|k,v| unless k.is_a? Class raise ArgumentError.new("Key '#{k.to_s}' is not a class") end ret = nil begin item = retrieve({k => input[v]}, optional) ret = [v, item[k]] rescue ParamValidation::ValidationError raise ParamValidation::ValidationError.new("ID #{input[v]} is not a valid #{k.to_s}", {key: v}) rescue ArgumentError raise ParamValidation::ValidationError.new("#{input[v]} is not a valid ID for Key '#{v}'", {key: v}) rescue raise ParamValidation::ValidationError.new("#{input[v]} is not a valid ID for Key '#{v}'", {key: v}) end ret }.to_h end end