Skip to content

Commit acb34e3

Browse files
committed
better JS enum class support
1 parent d35e30d commit acb34e3

File tree

18 files changed

+100
-172
lines changed

18 files changed

+100
-172
lines changed

modules/swagger-codegen/src/main/resources/Javascript/model.mustache

Lines changed: 3 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -15,91 +15,6 @@
1515
}(this, function(ApiClient{{#imports}}, {{import}}{{/imports}}) {
1616
'use strict';
1717
18-
{{#models}}{{#model}}{{#emitJSDoc}} /**
19-
* The {{classname}} model module.
20-
* @module {{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}
21-
* @version {{projectVersion}}
22-
*/
23-
24-
/**
25-
* Constructs a new <code>{{classname}}</code>.{{#description}}
26-
* {{description}}{{/description}}
27-
* @alias module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}
28-
* @class{{#useInheritance}}{{#parent}}
29-
* @extends {{#parentModel}}module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{classname}}{{/parentModel}}{{^parentModel}}{{#vendorExtensions.x-isArray}}Array{{/vendorExtensions.x-isArray}}{{#vendorExtensions.x-isMap}}Object{{/vendorExtensions.x-isMap}}{{/parentModel}}{{/parent}}{{#interfaces}}
30-
* @implements module:{{#invokerPackage}}{{invokerPackage}}/{{/invokerPackage}}{{#modelPackage}}{{modelPackage}}/{{/modelPackage}}{{.}}{{/interfaces}}{{/useInheritance}}{{#vendorExtensions.x-all-required}}
31-
* @param {{.}}{{/vendorExtensions.x-all-required}}
32-
*/
33-
{{/emitJSDoc}} var exports = function({{#vendorExtensions.x-all-required}}{{.}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-all-required}}) {
34-
var _this = this;
35-
{{#parent}}{{^parentModel}}{{#vendorExtensions.x-isArray}} _this = new Array();
36-
Object.setPrototypeOf(_this, exports);
37-
{{/vendorExtensions.x-isArray}}{{/parentModel}}{{/parent}}{{#useInheritance}}{{#parentModel}} {{classname}}.call(_this{{#vendorExtensions.x-all-required}}, {{.}}{{/vendorExtensions.x-all-required}});{{/parentModel}}
38-
{{#interfaceModels}} {{classname}}.call(_this{{#vendorExtensions.x-all-required}}, {{.}}{{/vendorExtensions.x-all-required}});
39-
{{/interfaceModels}}{{/useInheritance}}{{#vars}}{{#required}} _this['{{baseName}}'] = {{name}};{{/required}}
40-
{{/vars}}{{#parent}}{{^parentModel}} return _this;
41-
{{/parentModel}}{{/parent}} };
42-
43-
{{#emitJSDoc}} /**
44-
* Constructs a <code>{{classname}}</code> from a plain JavaScript object, optionally creating a new instance.
45-
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
46-
* @param {Object} data The plain JavaScript object bearing properties of interest.
47-
* @param {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> obj Optional instance to populate.
48-
* @return {{=< >=}}{module:<#invokerPackage><invokerPackage>/</invokerPackage><#modelPackage><modelPackage>/</modelPackage><classname>}<={{ }}=> The populated <code>{{classname}}</code> instance.
49-
*/
50-
{{/emitJSDoc}} exports.constructFromObject = function(data, obj) {
51-
if (data){{! TODO: support polymorphism: discriminator property on data determines class to instantiate.}} {
52-
obj = obj || new exports();
53-
{{#parent}}{{^parentModel}} ApiClient.constructFromObject(data, obj, {{vendorExtensions.x-itemType}});
54-
{{/parentModel}}{{/parent}}{{#useInheritance}}{{#parentModel}} {{classname}}.constructFromObject(data, obj);{{/parentModel}}
55-
{{#interfaces}} {{.}}.constructFromObject(data, obj);
56-
{{/interfaces}}{{/useInheritance}}{{#vars}} if (data.hasOwnProperty('{{baseName}}')) {
57-
obj['{{baseName}}']{{{defaultValueWithParam}}}
58-
}
59-
{{/vars}} }
60-
return obj;
61-
}
62-
{{#useInheritance}}{{#parentModel}}
63-
exports.prototype = Object.create({{classname}}.prototype);
64-
exports.prototype.constructor = exports;
65-
{{/parentModel}}{{/useInheritance}}
66-
{{#vars}}{{#emitJSDoc}}
67-
/**{{#description}}
68-
* {{{description}}}{{/description}}
69-
* @member {{{vendorExtensions.x-jsdoc-type}}} {{baseName}}{{#defaultValue}}
70-
* @default {{{defaultValue}}}{{/defaultValue}}
71-
*/
72-
{{/emitJSDoc}} exports.prototype['{{baseName}}'] = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}undefined{{/defaultValue}};
73-
{{/vars}}{{#useInheritance}}{{#interfaceModels}}
74-
// Implement {{classname}} interface:{{#allVars}}{{#emitJSDoc}}
75-
/**{{#description}}
76-
* {{{description}}}{{/description}}
77-
* @member {{{vendorExtensions.x-jsdoc-type}}} {{baseName}}{{#defaultValue}}
78-
* @default {{{defaultValue}}}{{/defaultValue}}
79-
*/
80-
{{/emitJSDoc}} exports.prototype['{{baseName}}'] = {{#defaultValue}}{{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}undefined{{/defaultValue}};
81-
{{/allVars}}{{/interfaceModels}}{{/useInheritance}}
82-
{{#emitModelMethods}}{{#vars}}{{#emitJSDoc}} /**{{#description}}
83-
* Returns {{{description}}}{{/description}}{{#minimum}}
84-
* minimum: {{minimum}}{{/minimum}}{{#maximum}}
85-
* maximum: {{maximum}}{{/maximum}}
86-
* @return {{{vendorExtensions.x-jsdoc-type}}}
87-
*/
88-
{{/emitJSDoc}} exports.prototype.{{getter}} = function() {
89-
return this['{{baseName}}'];
90-
}
91-
92-
{{#emitJSDoc}} /**{{#description}}
93-
* Sets {{{description}}}{{/description}}
94-
* @param {{{vendorExtensions.x-jsdoc-type}}} {{name}}{{#description}} {{{description}}}{{/description}}
95-
*/
96-
{{/emitJSDoc}} exports.prototype.{{setter}} = function({{name}}) {
97-
this['{{baseName}}'] = {{name}};
98-
}
99-
100-
{{/vars}}{{/emitModelMethods}}
101-
{{#vars}}{{#isEnum}}{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}}
102-
{{>enumClass}}{{/items}}*/{{/items.isEnum}}{{/vars}}
103-
104-
return exports;
105-
{{/model}}{{/models}}}));
18+
{{#models}}{{#model}}
19+
{{#isEnum}}{{>partial_model_enum_class}}{{/isEnum}}{{^isEnum}}{{>partial_model_generic}}{{/isEnum}}
20+
{{/model}}{{/models}}

samples/client/petstore/javascript/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This SDK is automatically generated by the [Swagger Codegen](https://github.com/
66

77
- API version: 1.0.0
88
- Package version: 1.0.0
9-
- Build date: 2016-05-02T23:24:54.621+08:00
9+
- Build date: 2016-05-03T11:05:41.851+08:00
1010
- Build package: class io.swagger.codegen.languages.JavascriptClientCodegen
1111

1212
## Installation

samples/client/petstore/javascript/src/model/Animal.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
}(this, function(ApiClient) {
1616
'use strict';
1717

18+
19+
20+
1821
/**
1922
* The Animal model module.
2023
* @module model/Animal
@@ -51,7 +54,6 @@
5154
return obj;
5255
}
5356

54-
5557
/**
5658
* @member {String} className
5759
*/
@@ -62,3 +64,5 @@
6264

6365
return exports;
6466
}));
67+
68+

samples/client/petstore/javascript/src/model/ApiResponse.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
}(this, function(ApiClient) {
1616
'use strict';
1717

18+
19+
20+
1821
/**
1922
* The ApiResponse model module.
2023
* @module model/ApiResponse
@@ -58,17 +61,14 @@
5861
return obj;
5962
}
6063

61-
6264
/**
6365
* @member {Integer} code
6466
*/
6567
exports.prototype['code'] = undefined;
66-
6768
/**
6869
* @member {String} type
6970
*/
7071
exports.prototype['type'] = undefined;
71-
7272
/**
7373
* @member {String} message
7474
*/
@@ -79,3 +79,5 @@
7979

8080
return exports;
8181
}));
82+
83+

samples/client/petstore/javascript/src/model/Cat.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
}(this, function(ApiClient, Animal) {
1616
'use strict';
1717

18+
19+
20+
1821
/**
1922
* The Cat model module.
2023
* @module model/Cat
@@ -55,7 +58,6 @@
5558
exports.prototype = Object.create(Animal.prototype);
5659
exports.prototype.constructor = exports;
5760

58-
5961
/**
6062
* @member {Boolean} declawed
6163
*/
@@ -66,3 +68,5 @@
6668

6769
return exports;
6870
}));
71+
72+

samples/client/petstore/javascript/src/model/Category.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
}(this, function(ApiClient) {
1616
'use strict';
1717

18+
19+
20+
1821
/**
1922
* The Category model module.
2023
* @module model/Category
@@ -54,12 +57,10 @@
5457
return obj;
5558
}
5659

57-
5860
/**
5961
* @member {Integer} id
6062
*/
6163
exports.prototype['id'] = undefined;
62-
6364
/**
6465
* @member {String} name
6566
*/
@@ -70,3 +71,5 @@
7071

7172
return exports;
7273
}));
74+
75+

samples/client/petstore/javascript/src/model/Dog.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
}(this, function(ApiClient, Animal) {
1616
'use strict';
1717

18+
19+
20+
1821
/**
1922
* The Dog model module.
2023
* @module model/Dog
@@ -55,7 +58,6 @@
5558
exports.prototype = Object.create(Animal.prototype);
5659
exports.prototype.constructor = exports;
5760

58-
5961
/**
6062
* @member {String} breed
6163
*/
@@ -66,3 +68,5 @@
6668

6769
return exports;
6870
}));
71+
72+

samples/client/petstore/javascript/src/model/EnumClass.js

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,30 @@
1515
}(this, function(ApiClient) {
1616
'use strict';
1717

18-
/**
19-
* The EnumClass model module.
20-
* @module model/EnumClass
21-
* @version 1.0.0
22-
*/
23-
24-
/**
25-
* Constructs a new <code>EnumClass</code>.
26-
* @alias module:model/EnumClass
27-
* @class
28-
*/
29-
var exports = function() {
30-
var _this = this;
31-
32-
};
3318

3419
/**
35-
* Constructs a <code>EnumClass</code> from a plain JavaScript object, optionally creating a new instance.
36-
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
37-
* @param {Object} data The plain JavaScript object bearing properties of interest.
38-
* @param {module:model/EnumClass} obj Optional instance to populate.
39-
* @return {module:model/EnumClass} The populated <code>EnumClass</code> instance.
20+
* Enum class EnumClass.
21+
* @enum {}
22+
* @readonly
4023
*/
41-
exports.constructFromObject = function(data, obj) {
42-
if (data) {
43-
obj = obj || new exports();
44-
45-
}
46-
return obj;
47-
}
48-
49-
50-
51-
24+
exports.EnumClass = {
25+
/**
26+
* value: _abc
27+
* @const
28+
*/
29+
"_abc": "_abc",
30+
/**
31+
* value: -efg
32+
* @const
33+
*/
34+
"-efg": "-efg",
35+
/**
36+
* value: (xyz)
37+
* @const
38+
*/
39+
"(xyz)": "(xyz)" };
5240

5341
return exports;
5442
}));
43+
44+

samples/client/petstore/javascript/src/model/EnumTest.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
}(this, function(ApiClient) {
1616
'use strict';
1717

18+
19+
20+
1821
/**
1922
* The EnumTest model module.
2023
* @module model/EnumTest
@@ -58,17 +61,14 @@
5861
return obj;
5962
}
6063

61-
6264
/**
6365
* @member {module:model/EnumTest.EnumStringEnum} enum_string
6466
*/
6567
exports.prototype['enum_string'] = undefined;
66-
6768
/**
6869
* @member {module:model/EnumTest.EnumIntegerEnum} enum_integer
6970
*/
7071
exports.prototype['enum_integer'] = undefined;
71-
7272
/**
7373
* @member {module:model/EnumTest.EnumNumberEnum} enum_number
7474
*/
@@ -127,3 +127,5 @@
127127

128128
return exports;
129129
}));
130+
131+

0 commit comments

Comments
 (0)