20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/model-api/model.rb', line 20
def api_attributes(*args)
metadata = ModelApi::HashMetadata.process_metadata(:attributes, self, args)
metadata = ModelApi::HashMetadata.merge_superclass_metadata(:attributes, superclass, metadata)
if args.present?
id_attrs = []
metadata.each { |attr, attr_metadata| id_attrs << attr if attr_metadata[:id] }
if id_attrs.present?
id_attr_sets = id_attrs.map { |v| (v.is_a?(Array) ? v.flatten : [v]).map(&:to_sym) }
existing_id_attr_sets = (api_model[:id_attributes] || [])
.map { |v| (v.is_a?(Array) ? v.flatten : [v]).map(&:to_sym) }
if (id_attr_sets - existing_id_attr_sets).present?
api_model id_attributes: (id_attr_sets - existing_id_attr_sets).uniq
end
end
end
if self < ActiveRecord::Base && (args.present? ||
!self.instance_variable_get(:@api_attrs_characterized))
metadata.each do |attr, attr_metadata|
if (assoc = self.reflect_on_association(attr)).present?
attr_metadata[:type] = :association
attr_metadata[:association] = assoc
else
attr_metadata[:type] = :attribute
end
end
self.instance_variable_set(:@api_attrs_characterized, true)
end
metadata
end
|