@@ -27,7 +27,7 @@ def initialize(original, renamed)
2727
2828 def extract_params ( exposure )
2929 root_exposures =
30- if superclass_contains_discriminator? ( exposure )
30+ if discriminator ( exposure )
3131 root_exposures_without_parent ( exposure )
3232 else
3333 exposure . root_exposures
@@ -45,7 +45,7 @@ def extract_params(exposure)
4545 end
4646 end
4747
48- def superclass_contains_discriminator? ( exposure )
48+ def discriminator ( exposure )
4949 exposure . superclass . root_exposures . detect do |value |
5050 value . documentation . try ( :[] , :is_discriminator )
5151 end
@@ -81,15 +81,19 @@ def parse_grape_entity_params(params, parent_model = nil)
8181 memo [ final_entity_name ] [ :readOnly ] = documentation [ :read_only ] . to_s == 'true' if documentation [ :read_only ]
8282 memo [ final_entity_name ] [ :description ] = documentation [ :desc ] if documentation [ :desc ]
8383 end
84- if superclass_contains_discriminator? ( model )
85- respond_with_all_of ( parsed , params )
84+
85+ discriminator = discriminator ( model )
86+ if discriminator
87+ respond_with_all_of ( parsed , params , discriminator )
8688 else
8789 [ parsed , required_params ( params ) ]
8890 end
8991 end
9092
91- def respond_with_all_of ( parsed , params )
93+ def respond_with_all_of ( parsed , params , discriminator )
9294 parent_name =
95+ GrapeSwagger ::Entity ::Helper . model_name ( model . superclass , endpoint )
96+
9397 if endpoint . nil?
9498 model . superclass . to_s . demodulize
9599 else
@@ -100,11 +104,27 @@ def respond_with_all_of(parsed, params)
100104 {
101105 '$ref' => "#/definitions/#{ parent_name } "
102106 } ,
103- [ parsed , required_params ( params ) ]
107+ [
108+ add_discriminator ( parsed , discriminator ) ,
109+ required_params ( params ) . push ( discriminator . attribute )
110+ ]
104111 ]
105112 }
106113 end
107114
115+ def add_discriminator ( parsed , discriminator )
116+ model_name = GrapeSwagger ::Entity ::Helper . model_name ( model , endpoint )
117+
118+ parsed . merge (
119+ {
120+ discriminator . attribute => {
121+ type : 'string' ,
122+ enum : [ model_name ]
123+ }
124+ }
125+ )
126+ end
127+
108128 def parse_nested ( entity_name , entity_options , parent_model = nil )
109129 nested_entity = if parent_model . nil?
110130 model . root_exposures . find_by ( entity_name )
0 commit comments