class LazyApiDoc::VariantsParser
Constants
- OPTIONAL
Attributes
variants[R]
Public Class Methods
new(variants)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 6 def initialize(variants) @variants = variants.is_a?(Array) ? variants : [variants] end
Public Instance Methods
parse(variant, variants)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 14 def parse(variant, variants) variants.delete(OPTIONAL) case variant when Array parse_array(variant, variants) when Hash parse_hash(variants) else types_template(variants).merge("example" => variant) end end
parse_array(variant, variants)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 83 def parse_array(variant, variants) first = variant.first types_template(variants).merge( "items" => parse(first, variants.compact.map(&:first).compact), "example" => variant ) end
parse_hash(variants)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 69 def parse_hash(variants) result = types_template(variants) variant = variants.select { |v| v.is_a?(Hash) }.reverse_each .each_with_object({}) { |v, res| res.merge!(v) } result["properties"] = variant.map do |key, val| [ key.to_s, parse(val, variants.compact.map { |v| v.fetch(key, OPTIONAL) }) ] end.to_h result["required"] = variant.keys.select { |key| variants.compact.all? { |v| v.key?(key) } } result end
result()
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 10 def result @result ||= parse(variants.first, variants) end
type_of(variant)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 43 def type_of(variant) case variant when Hash "object" when NilClass "null" when TrueClass, FalseClass "boolean" when String type_of_string(variant) when Float 'number' else variant.class.name.downcase end end
type_of_string(variant)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 60 def type_of_string(variant) case variant when /\A\d+\.\d+\z/ "decimal" else "string" end end
types_of(variants)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 39 def types_of(variants) variants.map { |v| type_of(v) }.uniq end
types_template(variants)
click to toggle source
# File lib/lazy_api_doc/variants_parser.rb, line 26 def types_template(variants) types = types_of(variants) if types.count == 1 { "type" => types.first } else { "oneOf" => types.map { |t| { "type" => t } } } end end