49 lines
1.6 KiB
Ruby
49 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# 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 do |k, v|
|
|
our_integer = begin
|
|
Integer(v)
|
|
rescue StandardError
|
|
nil
|
|
end
|
|
unless (optional && v.nil?) || (our_integer && our_integer > 0)
|
|
raise ArgumentError, "Value '#{v}' for Key '#{k}' is not valid"
|
|
end
|
|
|
|
raise ArgumentError, "Key '#{k}' is not a class" unless k.is_a? Class
|
|
|
|
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}", key: k)
|
|
end
|
|
end
|
|
ret
|
|
end.to_h
|
|
end
|
|
|
|
def self.retrieve_from_keys(input, class_to_key_hash, optional = false)
|
|
class_to_key_hash.map do |k, v|
|
|
raise ArgumentError, "Key '#{k}' is not a class" unless k.is_a? Class
|
|
|
|
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}", key: v)
|
|
rescue ArgumentError
|
|
raise ParamValidation::ValidationError.new("#{input[v]} is not a valid ID for Key '#{v}'", key: v)
|
|
rescue StandardError
|
|
raise ParamValidation::ValidationError.new("#{input[v]} is not a valid ID for Key '#{v}'", key: v)
|
|
end
|
|
ret
|
|
end.to_h
|
|
end
|
|
end
|