| var gulp = require('gulp'); | ||
| var raml2code = require("raml2code"); | ||
| var genPojos = require("raml2code/lib/generators/groovy/pojo"); | ||
| var genJaxRS = require("raml2code/lib/generators/groovy/jaxrsInterface"); | ||
| var genRetrofitClient = require("raml2code/lib/generators/groovy/retrofitClient"); | ||
| var raml = require('gulp-raml'); | ||
| var packagePojo = "gex.catapi.dto"; | ||
| var packageClient = "gex.catapi.client"; | ||
| var packageJersey = "gex.catapi.resources"; | ||
| var ramlResource = '../../test/raml/cats.raml' | ||
| gulp.task('raml', function() { | ||
| gulp.src(ramlResource) | ||
| .pipe(raml()) | ||
| .pipe(raml.reporter('default')) | ||
| .pipe(raml.reporter('fail')); | ||
| }); | ||
| gulp.task("genPojos", ['raml'], function(){ | ||
| gulp.src(ramlResource) | ||
| .pipe(raml2code({generator: genPojos, extra: {package: packagePojo}})) | ||
| .pipe(gulp.dest('./src/generated/groovy/gex/catapi/dto')); | ||
| }); | ||
| gulp.task("genRetrofitClient" , ['raml'], function(){ | ||
| gulp.src(ramlResource) | ||
| .pipe(raml2code({generator: genRetrofitClient, extra: {package: packageClient, importPojos: packagePojo}})) | ||
| .pipe(gulp.dest('./src/generated/java/gex/catapi/client')); | ||
| }); | ||
| gulp.task("genJaxRS" , ['raml'], function(){ | ||
| gulp.src(ramlResource) | ||
| .pipe(raml2code({generator: genJaxRS, extra: {package: packageJersey, importPojos: packagePojo}})) | ||
| .pipe(gulp.dest('./src/generated/groovy/gex/catapi/resources')); | ||
| }); | ||
| gulp.task('build', ['raml', 'genPojos', 'genJaxRS', 'genRetrofitClient']); | ||
| gulp.task('default', ['build']); |
| { | ||
| "name": "tempalte-builder-service", | ||
| "version": "0.0.1", | ||
| "description": "Temaplate builder service API(RAML definitions)", | ||
| "devDependencies": { | ||
| "gulp": "3.8.8", | ||
| "gulp-raml": "0.1.3", | ||
| "raml2code": "0.0.14" | ||
| } | ||
| } |
| {{#classMembers}} | ||
| {{#if comment}}/* {{comment}} */{{/if}} | ||
| {{{type}}} {{name}} | ||
| {{/classMembers}} |
| {{#classMembers}} | ||
| {{#if comment}}/* {{comment}} */{{/if}} | ||
| {{{type}}} {{name}} | ||
| {{/classMembers}} |
| { | ||
| "$schema": "http://json-schema.org/draft-04/schema#", | ||
| "title": "Owner", | ||
| "id": "owner.schema.json", | ||
| "description": "A owner cat from Atoms catalog", | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "description": "The unique identifier for a owner", | ||
| "type": "integer" | ||
| }, | ||
| "name": { | ||
| "description": "Name of the owner", | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "required": ["id", "name"] | ||
| } |
@@ -1,2 +0,2 @@ | ||
| var commonHelpers, dirname, fs, generator, path, sanitize, template, util; | ||
| var cmPartial, commonHelpers, deref, dirname, fs, generator, path, sanitize, template, util; | ||
@@ -19,4 +19,15 @@ fs = require('fs'); | ||
| cmPartial = path.resolve(dirname, "tmpl/classMembersPartial.hbs"); | ||
| generator.template = fs.readFileSync(template).toString(); | ||
| generator.partials = [ | ||
| { | ||
| name: "classMembers", | ||
| str: fs.readFileSync(cmPartial).toString() | ||
| } | ||
| ]; | ||
| deref = require('deref')(); | ||
| sanitize = function(str) { | ||
@@ -33,4 +44,5 @@ var aux, res; | ||
| generator.parser = function(datos) { | ||
| var data, key, model, p, parsed, ref, row, schemaName, _i, _len, _ref, _ref1; | ||
| var data, model, normSchema, parsed, row, schema, schemaName, schemas, someData, _i, _j, _len, _len1, _ref, _ref1; | ||
| parsed = []; | ||
| schemas = []; | ||
| if (datos.extra) { | ||
@@ -44,25 +56,20 @@ datos.extra["package"] = "" + datos.extra["package"] + "." + datos.version; | ||
| data = JSON.parse(row[schemaName]); | ||
| model = {}; | ||
| model.className = data.title; | ||
| model.classMembers = []; | ||
| model.classDescription = (_ref1 = data.description) != null ? _ref1 : ""; | ||
| if (data.type === "array") { | ||
| ref = data.items['$ref'].replace("#/", "").split(".")[0]; | ||
| ref = util.capitalize(ref); | ||
| model.classMembers.push({ | ||
| name: "items", | ||
| type: "List<" + ref + ">" | ||
| }); | ||
| } | ||
| for (key in data.properties) { | ||
| p = data.properties[key]; | ||
| model.classMembers.push(util.mapProperty(p, key)); | ||
| } | ||
| model.extra = datos.extra; | ||
| parsed.push({ | ||
| name: datos.version + "/" + util.capitalize("" + (sanitize(schemaName)) + ".groovy"), | ||
| model: model | ||
| }); | ||
| schemas.push(data); | ||
| } | ||
| } | ||
| for (_j = 0, _len1 = schemas.length; _j < _len1; _j++) { | ||
| schema = schemas[_j]; | ||
| normSchema = deref(schema, schemas); | ||
| model = {}; | ||
| model.className = normSchema.title; | ||
| model.classDescription = (_ref1 = normSchema.description) != null ? _ref1 : ""; | ||
| someData = util.mapProperties(normSchema, deref.refs); | ||
| model.classMembers = someData.classMembers; | ||
| model.innerClasses = someData.innerClasses; | ||
| model.extra = datos.extra; | ||
| parsed.push({ | ||
| name: datos.version + "/" + util.capitalize("" + model.className + ".groovy"), | ||
| model: model | ||
| }); | ||
| } | ||
| return parsed; | ||
@@ -69,0 +76,0 @@ }; |
@@ -10,8 +10,9 @@ package {{extra.package}} | ||
| public class {{{className}}} implements Serializable { | ||
| {{>classMembers}} | ||
| } | ||
| {{#classMembers}} | ||
| {{#if comment}} /* {{comment}} */{{/if}} | ||
| {{{type}}} {{name}} | ||
| {{/classMembers}} | ||
| {{#innerClasses}} | ||
| class {{{className}}} implements Serializable { | ||
| {{>classMembers}} | ||
| } | ||
| {{/innerClasses}} |
@@ -1,3 +0,5 @@ | ||
| var util; | ||
| var deref, util; | ||
| deref = require('deref')(); | ||
| util = {}; | ||
@@ -10,3 +12,3 @@ | ||
| p = resource.uriParameters[key]; | ||
| uriParameters.push(util.mapProperty(p, key, annotation)); | ||
| uriParameters.push(util.mapProperty(p, key, annotation).property); | ||
| } | ||
@@ -21,3 +23,3 @@ return uriParameters; | ||
| p = queryParams[key]; | ||
| params.push(util.mapProperty(p, key, annotation)); | ||
| params.push(util.mapProperty(p, key, annotation).property); | ||
| } | ||
@@ -27,28 +29,67 @@ return params; | ||
| util.mapProperty = function(property, name, annotation) { | ||
| var p; | ||
| p = {}; | ||
| p.name = name; | ||
| p.comment = property.description; | ||
| util.mapProperties = function(expandedSchema, refMap) { | ||
| var data, key, propParsed, property; | ||
| data = {}; | ||
| data.classMembers = []; | ||
| data.innerClasses = []; | ||
| for (key in expandedSchema.properties) { | ||
| property = expandedSchema.properties[key]; | ||
| propParsed = util.mapProperty(property, key, '', refMap); | ||
| data.classMembers.push(propParsed.property); | ||
| if (propParsed.innerClass) { | ||
| data.innerClasses.push(propParsed.innerClass); | ||
| } | ||
| } | ||
| return data; | ||
| }; | ||
| util.mapProperty = function(property, name, annotation, refMap) { | ||
| var aux, auxType, data, innnerSchema; | ||
| data = {}; | ||
| data.property = {}; | ||
| data.property.name = name; | ||
| data.property.comment = property.description; | ||
| switch (property.type) { | ||
| case 'array': | ||
| p.type = "List"; | ||
| auxType = "List"; | ||
| if (property.items["$ref"]) { | ||
| innnerSchema = refMap[property.items["$ref"].split("#")[0]]; | ||
| if (innnerSchema.title) { | ||
| auxType += "<" + (util.capitalize(innnerSchema.title)) + ">"; | ||
| } | ||
| } | ||
| data.property.type = auxType; | ||
| break; | ||
| case 'object': | ||
| if (property.properties) { | ||
| data.property.type = util.capitalize(name); | ||
| data.innerClass = {}; | ||
| data.innerClass.className = util.capitalize(name); | ||
| data.innerClass.classDescription = property.description; | ||
| aux = util.mapProperties(property); | ||
| data.innerClass.classMembers = aux.classMembers; | ||
| } else if (property["$ref"]) { | ||
| innnerSchema = refMap[property["$ref"].split("#")[0]]; | ||
| data.property.type = util.capitalize(innnerSchema.title); | ||
| } else { | ||
| data.property.type = 'Map'; | ||
| } | ||
| break; | ||
| case 'string': | ||
| p.type = "String"; | ||
| data.property.type = "String"; | ||
| break; | ||
| case 'boolean': | ||
| p.type = "Boolean"; | ||
| data.property.type = "Boolean"; | ||
| break; | ||
| case 'number': | ||
| p.type = "Double"; | ||
| data.property.type = "Double"; | ||
| break; | ||
| case 'integer': | ||
| p.type = "Integer"; | ||
| data.property.type = "Integer"; | ||
| break; | ||
| case 'object': | ||
| p.type = "Map"; | ||
| data.property.type = "Map"; | ||
| } | ||
| p.kind = annotation + ("(\"" + p.name + "\")"); | ||
| return p; | ||
| data.property.kind = annotation + ("(\"" + data.property.name + "\")"); | ||
| return data; | ||
| }; | ||
@@ -127,2 +168,12 @@ | ||
| util.sanitize = function(str) { | ||
| var aux, res; | ||
| aux = str.split("."); | ||
| res = ''; | ||
| aux.forEach(function(it) { | ||
| return res += util.capitalize(it); | ||
| }); | ||
| return res; | ||
| }; | ||
| module.exports = util; |
+3
-2
| { | ||
| "name": "raml2code", | ||
| "version": "0.0.14", | ||
| "version": "0.0.15", | ||
| "description": "Raml spec to code", | ||
@@ -28,3 +28,4 @@ "main": "index.js", | ||
| "through2": "~0.6.1", | ||
| "lodash": "^2.4.1" | ||
| "lodash": "^2.4.1", | ||
| "deref": "0.2.2" | ||
| }, | ||
@@ -31,0 +32,0 @@ "devDependencies": { |
+4
-1
@@ -20,3 +20,6 @@ # Raml to code generator | ||
| ## generators included and tested | ||
| * raml to Groovy pojo | ||
| * Groovy POJO | ||
| * JAX-RS Interface | ||
| * RETROFIT Client | ||
@@ -23,0 +26,0 @@ ## Gulp-plugin |
@@ -10,4 +10,10 @@ fs = require('fs') | ||
| template = path.resolve(dirname, "tmpl/pojo.hbs") | ||
| cmPartial = path.resolve(dirname, "tmpl/classMembersPartial.hbs") | ||
| generator.template = fs.readFileSync(template).toString() | ||
| generator.partials = [ | ||
| name : "classMembers" | ||
| str : fs.readFileSync(cmPartial).toString() | ||
| ] | ||
| deref = require('deref')(); | ||
@@ -23,21 +29,26 @@ sanitize = (str)-> | ||
| parsed = [] | ||
| schemas = [] | ||
| if datos.extra | ||
| datos.extra.package = "#{datos.extra.package}.#{datos.version}" | ||
| for row in datos.schemas | ||
| for schemaName of row | ||
| data = JSON.parse(row[schemaName]) | ||
| model = {} | ||
| model.className = data.title | ||
| model.classMembers = [] | ||
| model.classDescription = data.description ? "" | ||
| schemas.push data | ||
| if data.type is "array" | ||
| ref = data.items['$ref'].replace("#/", "").split(".")[0] | ||
| ref = util.capitalize(ref) | ||
| model.classMembers.push {name: "items", type: "List<#{ref}>"} | ||
| for key of data.properties | ||
| p = data.properties[key] | ||
| model.classMembers.push util.mapProperty(p, key) | ||
| model.extra = datos.extra | ||
| parsed.push {name: datos.version + "/" + util.capitalize("#{sanitize(schemaName)}.groovy") , model} | ||
| for schema in schemas | ||
| normSchema = deref(schema, schemas) | ||
| model = {} | ||
| model.className = normSchema.title | ||
| model.classDescription = normSchema.description ? "" | ||
| someData = util.mapProperties(normSchema, deref.refs) | ||
| model.classMembers = someData.classMembers | ||
| model.innerClasses = someData.innerClasses | ||
| model.extra = datos.extra | ||
| parsed.push {name: datos.version + "/" + util.capitalize("#{model.className}.groovy") , model} | ||
| parsed | ||
@@ -44,0 +55,0 @@ |
@@ -10,8 +10,9 @@ package {{extra.package}} | ||
| public class {{{className}}} implements Serializable { | ||
| {{>classMembers}} | ||
| } | ||
| {{#classMembers}} | ||
| {{#if comment}} /* {{comment}} */{{/if}} | ||
| {{{type}}} {{name}} | ||
| {{/classMembers}} | ||
| {{#innerClasses}} | ||
| class {{{className}}} implements Serializable { | ||
| {{>classMembers}} | ||
| } | ||
| {{/innerClasses}} |
@@ -0,1 +1,2 @@ | ||
| deref = require('deref')(); | ||
| util = {} | ||
@@ -6,3 +7,3 @@ util.getUriParameter = (resource, annotation)-> | ||
| p = resource.uriParameters[key] | ||
| uriParameters.push util.mapProperty(p, key, annotation) | ||
| uriParameters.push util.mapProperty(p, key, annotation).property | ||
| uriParameters | ||
@@ -14,25 +15,59 @@ | ||
| p = queryParams[key] | ||
| params.push util.mapProperty(p, key, annotation) | ||
| params.push util.mapProperty(p, key, annotation).property | ||
| params | ||
| util.mapProperties = (expandedSchema, refMap)-> | ||
| data = {} | ||
| data.classMembers = [] | ||
| data.innerClasses = [] | ||
| for key of expandedSchema.properties | ||
| property = expandedSchema.properties[key] | ||
| propParsed = util.mapProperty(property, key, '', refMap) | ||
| data.classMembers.push propParsed.property | ||
| data.innerClasses.push propParsed.innerClass if propParsed.innerClass | ||
| util.mapProperty = (property, name, annotation)-> | ||
| p = {} | ||
| p.name = name | ||
| p.comment = property.description | ||
| data | ||
| util.mapProperty = (property, name, annotation, refMap)-> | ||
| data = {} | ||
| data.property = {} | ||
| data.property.name = name | ||
| data.property.comment = property.description | ||
| switch property.type | ||
| when 'array' | ||
| p.type = "List" | ||
| # p.name = "items" | ||
| when 'string' then p.type = "String" | ||
| when 'boolean' then p.type = "Boolean" | ||
| when 'number' then p.type = "Double" | ||
| when 'integer' then p.type = "Integer" | ||
| when 'object' then p.type = "Map" | ||
| auxType = "List" | ||
| if property.items["$ref"] | ||
| innnerSchema = refMap[property.items["$ref"].split("#")[0]] | ||
| if innnerSchema.title | ||
| auxType += "<#{util.capitalize(innnerSchema.title)}>" | ||
| p.kind = annotation + "(\"#{p.name}\")" | ||
| p | ||
| data.property.type = auxType | ||
| when 'object' | ||
| #if object has no references we made a inner class | ||
| if property.properties | ||
| data.property.type = util.capitalize(name) | ||
| data.innerClass = {} | ||
| data.innerClass.className = util.capitalize(name) | ||
| data.innerClass.classDescription = property.description | ||
| aux = util.mapProperties(property) | ||
| data.innerClass.classMembers = aux.classMembers | ||
| #if object has references we map on the POJO | ||
| else if property["$ref"] | ||
| innnerSchema = refMap[property["$ref"].split("#")[0]] | ||
| data.property.type = util.capitalize(innnerSchema.title) | ||
| else | ||
| data.property.type = 'Map' | ||
| when 'string' then data.property.type = "String" | ||
| when 'boolean' then data.property.type = "Boolean" | ||
| when 'number' then data.property.type = "Double" | ||
| when 'integer' then data.property.type = "Integer" | ||
| when 'object' then data.property.type = "Map" | ||
| data.property.kind = annotation + "(\"#{data.property.name}\")" | ||
| data | ||
| util.parseResource = (resource, parsed, annotations, parentUri = "", parentUriArgs = []) -> | ||
@@ -86,2 +121,9 @@ | ||
| util.sanitize = (str)-> | ||
| aux = str.split(".") | ||
| res = '' | ||
| aux.forEach (it)-> | ||
| res += util.capitalize(it) | ||
| res | ||
| module.exports = util |
@@ -16,5 +16,2 @@ package org.gex.v1 | ||
| /* Name of the owner */ | ||
| String ownerName | ||
| /* Something to play */ | ||
@@ -24,7 +21,17 @@ Map toy | ||
| /* Something to eat */ | ||
| Map food | ||
| Food food | ||
| /* The owner of the cat. */ | ||
| Owner owner | ||
| /* Errores al procesar la petición */ | ||
| List errors | ||
| List<Error> errors | ||
| } | ||
| class Food implements Serializable { | ||
| /* what the cat eats */ | ||
| String name | ||
| } |
@@ -33,3 +33,2 @@ var raml2code =require('../..'); | ||
| var content = file.contents.toString('utf8'); | ||
| // console.log(content) | ||
| exampleContents = exampleContents.toString('utf8').split('\n'); | ||
@@ -36,0 +35,0 @@ content.split('\n').forEach(function(e,i){ |
@@ -33,3 +33,2 @@ var raml2code =require('../..'); | ||
| var content = file.contents.toString('utf8'); | ||
| // console.log(content); | ||
| exampleContents = exampleContents.toString('utf8').split('\n'); | ||
@@ -36,0 +35,0 @@ content.split('\n').forEach(function(e,i){ |
@@ -16,6 +16,2 @@ { | ||
| }, | ||
| "ownerName":{ | ||
| "description": "Name of the owner", | ||
| "type": "string" | ||
| }, | ||
| "toy":{ | ||
@@ -35,2 +31,7 @@ "description": "Something to play", | ||
| }, | ||
| "owner":{ | ||
| "type": "object", | ||
| "description": "The owner of the cat.", | ||
| "$ref": "owner.schema.json" | ||
| }, | ||
| "errors":{ | ||
@@ -37,0 +38,0 @@ "title": "Errors", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
41896
16.96%41
13.89%768
15.32%41
7.89%6
20%+ Added
+ Added