Module: Insights::API::Common::OpenApi::Serializer

Defined in:
lib/insights/api/common/open_api/serializer.rb

Instance Method Summary collapse

Instance Method Details

#api_version_from_prefix(prefix) ⇒ Object



24
25
26
27
# File 'lib/insights/api/common/open_api/serializer.rb', line 24

def api_version_from_prefix(prefix)
  /\/?\w+\/v(?<major>\d+)[x\.]?(?<minor>\d+)?\// =~ prefix
  [major, minor].compact.join(".")
end

#as_json(arg = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/insights/api/common/open_api/serializer.rb', line 6

def as_json(arg = {})
  previous = super
  encrypted_columns_set = (self.class.try(:encrypted_columns) || []).to_set
  encryption_filtered = previous.except(*encrypted_columns_set)
  return encryption_filtered unless arg.key?(:prefixes)
  version = api_version_from_prefix(arg[:prefixes].first)
  presentation_name = self.class.try(:presentation_name) || self.class.name
  schema  = ::Insights::API::Common::OpenApi::Docs.instance[version].definitions[presentation_name]
  attrs   = encryption_filtered.slice(*schema["properties"].keys)
  schema["properties"].keys.each do |name|
    next if attrs[name].nil?
    attrs[name] = attrs[name].iso8601 if attrs[name].kind_of?(Time)
    attrs[name] = attrs[name].to_s if name.ends_with?("_id") || name == "id"
    attrs[name] = self.public_send(name) if !attrs.key?(name) && !encrypted_columns_set.include?(name)
  end
  attrs.compact
end