@@ -67,6 +67,11 @@ def format_route(example)
67
67
# properties_description: "required, string"
68
68
# }
69
69
def fields ( property_name , examples )
70
+ possible_parameters_values = examples . map do |example |
71
+ parameters = example . metadata [ :extended_parameters ]
72
+ next parameters . map { |parameter | [ parameter [ :name ] , parameter [ :value ] ] } . to_h
73
+ end
74
+
70
75
examples
71
76
. map { |example | example . metadata [ property_name ] }
72
77
. flatten
@@ -79,7 +84,19 @@ def fields(property_name, examples)
79
84
else
80
85
properties << 'optional'
81
86
end
82
- properties << property [ :type ] if property [ :type ]
87
+
88
+ if property . key? ( :type )
89
+ properties << property [ :type ] if property [ :type ]
90
+ else
91
+ possible_values = possible_parameters_values . map { |parameters | parameters [ property [ :name ] ] }
92
+ possible_types = possible_values . map { |value | guess_type ( value ) }
93
+
94
+ possible_types . uniq!
95
+ possible_types . compact!
96
+
97
+ properties . concat ( possible_types )
98
+ end
99
+
83
100
if properties . count > 0
84
101
property [ :properties_description ] = properties . join ( ", " )
85
102
else
@@ -96,6 +113,21 @@ def fields(property_name, examples)
96
113
end
97
114
end
98
115
116
+ def guess_type ( value )
117
+ case value
118
+ when TrueClass then :boolean
119
+ when FalseClass then :boolean
120
+ when Array then :array
121
+ when Integer then :integer
122
+ when Float then :number
123
+ when String then :string
124
+ when Rack ::Test ::UploadedFile then :file
125
+ when NilClass then nil
126
+ else
127
+ puts "Warning: unknown type of value #{ value } "
128
+ end
129
+ end
130
+
99
131
# When no `description` was specified for a parameter, the DSL class
100
132
# is making `description = "#{scope} #{name}"`, which is bad because it
101
133
# assumes that all formats want this behavior. To avoid changing there
0 commit comments