class Brainstem::ApiDocs::Formatters::OpenApiSpecification::Version2::FieldDefinitions::PresenterFieldFormatter
Attributes
presenter[R]
Public Class Methods
new(presenter, field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 14 def initialize(presenter, field) @presenter = presenter @field = field end
Public Instance Methods
format()
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 19 def format format_field(@field) end
Also aliased as: call
Private Instance Methods
format_array_items(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 48 def format_array_items(field) field_nested_levels = field.options[:nested_levels] if has_properties?(field) [format_nested_field(field, false), field_nested_levels - 1] else [type_and_format(field.options[:item_type]), field_nested_levels] end end
format_conditional_description(field_options)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 125 def format_conditional_description(field_options) return '' if field_options[:if].blank? conditions = field_options[:if] .reject { |cond| presenter.conditionals[cond].options[:nodoc] } .map { |cond| uncapitalize(presenter.conditionals[cond].description) } .delete_if(&:empty?) .uniq .to_sentence conditions.present? ? "\nVisible when #{conditions}.\n" : '' end
format_description(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 115 def format_description(field) field_description = format_sentence(field.description) || '' field_description << format_conditional_description(field.options) if field.optional? field_description << "\nOnly returned when requested through the optional_fields param.\n" end field_description.try(:chomp!) field_description end
format_field(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 32 def format_field(field) if field.options[:nested_levels] format_nested_array_field(field) elsif has_properties?(field) format_nested_field(field) else format_simple_field(field) end end
format_field_properties(branches)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 108 def format_field_properties(branches) branches.inject(ActiveSupport::HashWithIndifferentAccess.new) do |buffer, (field_name, field)| buffer[field_name.to_s] = format_field(field) buffer end end
format_nested_array_field(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 42 def format_nested_array_field(field) field_properties_data, nested_levels = format_array_items(field) format_nested_array_parent(nested_levels, field_properties_data, format_description(field)) end
format_nested_array_parent(nested_level, formatted_data, description = nil)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 58 def format_nested_array_parent(nested_level, formatted_data, description = nil) if nested_level == 1 { 'type' => 'array', 'description' => description, 'items' => formatted_data } else { 'type' => 'array', 'description' => description, 'items' => format_nested_array_parent(nested_level - 1, formatted_data) } end.with_indifferent_access.reject { |_, v| v.blank? } end
format_nested_field(field, include_description = true)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 74 def format_nested_field(field, include_description = true) case field.type when 'hash' format_object_field(field, include_description) when 'array' { type: 'array', description: include_description && format_description(field), items: format_object_field(field, false) } end.with_indifferent_access.reject { |_, v| v.blank? } end
format_object_field(field, include_description = true)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 87 def format_object_field(field, include_description = true) { type: 'object', description: include_description && format_description(field), properties: format_field_properties(field.to_h), }.with_indifferent_access.reject { |_, v| v.blank? } end
format_simple_field(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 95 def format_simple_field(field) field_data = type_and_format(field.type) || raise(invalid_type_error_message(field)) field_data.merge!(description: format_description(field)) field_data.with_indifferent_access.reject { |_, v| v.blank? } end
has_properties?(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 28 def has_properties?(field) field.respond_to?(:configuration) end
invalid_type_error_message(field)
click to toggle source
# File lib/brainstem/api_docs/formatters/open_api_specification/version_2/field_definitions/presenter_field_formatter.rb, line 101 def invalid_type_error_message(field) <<-MSG.strip_heredoc Unknown Brainstem Field type encountered(#{field.type}) for field #{field.name} in #{presenter.target_class.to_s}. MSG end