class Brainstem::ApiDocs::Formatters::OpenApiSpecification::Version2::FieldDefinitions::ResponseFieldFormatter
Public Class Methods
new(endpoint, param_name, param_tree)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 14 def initialize(endpoint, param_name, param_tree) @endpoint = endpoint @param_name = param_name @param_tree = param_tree end
Public Instance Methods
format()
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 20 def format field_config = @param_tree[:_config] field_properties = @param_tree.except(:_config) format_field(field_config, field_properties) end
Also aliased as: call
Private Instance Methods
format_array_items(field_config, field_properties)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 46 def format_array_items(field_config, field_properties) field_nested_levels = field_config[:nested_levels] if field_properties.present? [format_nested_field(field_config, field_properties), field_nested_levels - 1] else [type_and_format(field_config[:item_type]), field_nested_levels] end end
format_description(field_config)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 134 def format_description(field_config) format_sentence(field_config[:info]) end
format_field(field_config, field_branches)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 30 def format_field(field_config, field_branches) if field_config[:nested_levels] format_nested_array_field(field_config, field_branches) elsif field_branches.present? format_nested_field(field_config, field_branches) else format_simple_field(field_config) end end
format_field_properties(branches)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 120 def format_field_properties(branches) branches.inject(ActiveSupport::HashWithIndifferentAccess.new) do |buffer, (field_name, field_config)| config = field_config[:_config] branches = field_config.except(:_config) if config[:dynamic_key] format_field(config, branches) else buffer[field_name.to_s] = format_field(config, branches) buffer end end end
format_nested_array_field(field_config, field_properties)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 40 def format_nested_array_field(field_config, field_properties) field_properties_data, nested_levels = format_array_items(field_config, field_properties) format_nested_array_parent(nested_levels, field_properties_data) end
format_nested_array_parent(nested_level, formatted_data)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 56 def format_nested_array_parent(nested_level, formatted_data) if nested_level == 1 { 'type' => 'array', 'items' => formatted_data } else { 'type' => 'array', 'items' => format_nested_array_parent(nested_level - 1, formatted_data) } end end
format_nested_field(field_config, field_properties)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 70 def format_nested_field(field_config, field_properties) case field_config[:type] when 'hash' format_object_field(field_config, field_properties) when 'array' { type: 'array', description: format_description(field_config), items: format_object_field(field_config, field_properties, false) } end.with_indifferent_access.reject { |_, v| v.blank? } end
format_object_field(field_config, field_properties, include_description = true)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 83 def format_object_field(field_config, field_properties, include_description = true) properties, additional_properties = split_properties(field_properties) { type: 'object', description: include_description && format_description(field_config), properties: format_field_properties(properties), additionalProperties: format_field_properties(additional_properties), }.with_indifferent_access.reject { |_, v| v.blank? } end
format_simple_field(field_config)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 106 def format_simple_field(field_config) field_data = type_and_format(field_config[:type], field_config[:item_type]) raise(invalid_type_error_message(field_config)) unless field_data field_data.merge!(description: format_sentence(field_config[:info])) if field_config[:info].present? field_data end
invalid_type_error_message(field_config)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 113 def invalid_type_error_message(field_config) <<-MSG.strip_heredoc Unknown Brainstem Field type encountered(#{field_config[:type]}) for field #{field_config[:name]} in #{@endpoint.controller_name} for #{@endpoint.action} action. MSG end
split_properties(field_properties)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/response_field_formatter.rb, line 94 def split_properties(field_properties) split_properties = field_properties.each_with_object({ properties: {}, additional_properties: {} }) do |(field_name, field_config), acc| if field_config[:_config][:dynamic_key] acc[:additional_properties][field_name] = field_config else acc[:properties][field_name] = field_config end end [split_properties[:properties], split_properties[:additional_properties]] end