Module: Sublayer::Components::OutputAdapters::Formattable

Defined in:
lib/sublayer/components/output_adapters/formattable.rb

Instance Method Summary collapse

Instance Method Details

#build_json_schema(props) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'lib/sublayer/components/output_adapters/formattable.rb', line 9

def build_json_schema(props)
  formatted_properties = {}

  props.map do |prop|
    formatted_property = format_property(prop)
    formatted_properties[prop.name.to_sym] = formatted_property
  end

  formatted_properties
end

#format_propertiesObject



5
6
7
# File 'lib/sublayer/components/output_adapters/formattable.rb', line 5

def format_properties
  build_json_schema(self.properties)
end

#format_property(property) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/sublayer/components/output_adapters/formattable.rb', line 20

def format_property(property)
  result = {
    type: property.type,
    description: property.description
  }

  result[:enum] = property.enum if property.respond_to?(:enum) && property.enum
  result[:default] = property.default if property.respond_to?(:default) && !property.default.nil?
  result[:minimum] = property.minimum if property.respond_to?(:minimum) && !property.minimum.nil?
  result[:maximum] = property.maximum if property.respond_to?(:maximum) && !property.maximum.nil?

  case property.type
  when 'array'
    result[:items] = property.items.is_a?(OpenStruct) ? format_property(property.items) : property.items
  when 'object'
    result[:properties] = build_json_schema(property.properties) if property.properties
    result[:required] = property.properties.select(&:required).map(&:name) if property.properties
  end

  result
end

#format_requiredObject



42
43
44
# File 'lib/sublayer/components/output_adapters/formattable.rb', line 42

def format_required
  self.properties.select(&:required).map(&:name)
end