module Solarwinds::Itsm::Api::Definitions
Constants
- LIB_DIR
- REDOC_DIR
Public Class Methods
base_schema()
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 11 def self.base_schema path = File.join(LIB_DIR, 'definitions/openapi.json') JSON.parse(File.open(path).read) end
resolved_schema()
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 16 def self.resolved_schema recursive_resolve(base_schema, File.join(LIB_DIR, 'definitions')) end
resolved_schema_path()
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 20 def self.resolved_schema_path File.join(REDOC_DIR, 'resolved_schema.json') end
write_resolved_schema(path = REDOC_DIR, name = 'resolved_schema.json')
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 24 def self.write_resolved_schema(path = REDOC_DIR, name = 'resolved_schema.json') File.write(File.join(path, name), resolved_schema.to_json) end
Private Class Methods
generate_xml_example(value, resolved_schema)
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 60 def self.generate_xml_example(value, resolved_schema) if value['schema']['type'] == 'array' items = resolved_schema['application/json']['schema']['items'] properties = (items['allOf'] && items['allOf'][0]['properties']) || items['properties'] return "<>\n\t#{recursive_xml_properties(properties, 1)}\n<>" end properties = resolved_schema['application/json']['schema']['properties'] recursive_xml_properties(properties) end
recursive_resolve(schema, base_uri)
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 30 def self.recursive_resolve(schema, base_uri) return schema unless schema.is_a?(Array) || schema.is_a?(Hash) schema.each_with_object({}) do |(key, value), resolved_schema| if key == 'application/xml' value['example'] = generate_xml_example(value, resolved_schema) end if key == '$ref' reference = [*value].each_with_object({}) do |referred_path, result| split_path = referred_path.split('#/') path_to_file = split_path.first path_to_nested_object = split_path.size > 1 ? split_path.last.split('/') : nil path_and_file_name = path_to_file.split(/\/(?!.*\/.*)/) new_base_uri = (path_and_file_name.size > 1) ? Pathname.new("#{base_uri}/#{path_and_file_name.first}").cleanpath.to_s : base_uri json = JSON.parse(File.open(File.join(new_base_uri, path_and_file_name.last)).read) internal_object = path_to_nested_object&.inject(json) { |obj, arg| obj[arg] } || json result.merge!(recursive_resolve(internal_object, new_base_uri)) end resolved_schema.merge!(reference) elsif value.is_a?(Array) resolved_schema[key] = value.map { |v| recursive_resolve(v, base_uri) } elsif value.is_a?(Hash) resolved_schema[key] = recursive_resolve(value, base_uri) else resolved_schema[key] = value end end end
recursive_xml_properties(properties, levels = 0)
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 71 def self.recursive_xml_properties(properties, levels = 0) return unless properties xml_example = '' tabs = tabs_count(levels) properties.each do |k, val| value_example = case val['type'] when 'object' items = val['oneOf'] || val['anyOf'] properties = items && items.first['properties'] || val['properties'] "\n\t#{tabs}#{recursive_xml_properties(properties, levels + 1)}" when 'string' val['example'] || 'string example' when 'integer' val['example'] || '1' when 'boolean' val['example'] || 'true' else types_array = val['anyOf'] || val['oneOf'] next unless types_array types_array.first['example'] || '1' end xml_example = "#{xml_example}<#{k}>#{value_example}</#{k}>\n#{tabs}" end xml_example.chop end
tabs_count(levels)
click to toggle source
# File lib/solarwinds/itsm/api/definitions.rb, line 100 def self.tabs_count(levels) tabs = '' levels.times { tabs = "#{tabs}\t" } tabs end