Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions lib/nodegen.js
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,7 @@ function swagger2node(data, options) {
return params.split(',').filter(p => p).some(p => p !== 'body') ? render(content) : '';
}
};
var hasServiceParams = swagger.host === undefined || swagger.security !== undefined;

// Create node.js
var nodeSourceCode = CodeGen.getCustomCode({
Expand All @@ -344,7 +345,8 @@ function swagger2node(data, options) {
mustache: {
nodeName: data.name,
isBodyParam: isBodyParam,
isNotBodyParam: isNotBodyParam
isNotBodyParam: isNotBodyParam,
hasServiceParams: hasServiceParams
},
lint: false,
beautify: false
Expand All @@ -367,7 +369,8 @@ function swagger2node(data, options) {
nodeName: data.name,
category: data.category || 'function',
isNotBodyParam: isNotBodyParam,
hasOptionalParams: hasOptionalParams
hasOptionalParams: hasOptionalParams,
hasServiceParams: hasServiceParams
},
lint: false,
beautify: false
Expand Down Expand Up @@ -407,6 +410,7 @@ function swagger2node(data, options) {
mustache: {
nodeName: data.name,
projectName: data.module,
hasServiceParams: hasServiceParams
},
lint: false,
beautify: false
Expand Down
27 changes: 16 additions & 11 deletions templates/swagger/node.html.mustache
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
<script type="text/javascript">
RED.nodes.registerType('{{&nodeName}}',{
RED.nodes.registerType('{{&nodeName}}', {
category: '{{&category}}',
color: '#89bf04',
defaults: {
{{#hasServiceParams}}
service: { value: "", type: "{{&nodeName}}-service", required: true },
{{/hasServiceParams}}
method: { value: "" },

{{#methods}}
{{#parameters}}
{{&methodName}}_{{&camelCaseName}}: { value: "" },
{{&methodName}}_{{&camelCaseName}}Type: {value: "str"},
{{&methodName}}_{{&camelCaseName}}Type: { value: "str" },
{{/parameters}}
{{/methods}}

Expand All @@ -18,18 +20,18 @@
inputs: 1,
outputs: 1,
icon: "icon.png",
label: function() {
label: function () {
return this.name || "{{&nodeName}}";
},
oneditprepare: function() {
oneditprepare: function () {
var selectedMethod = $('#node-input-method option:selected');
if (!selectedMethod.val()) {
var methods = $('#node-input-method').children();
var firstMethod = methods.first();
$('#node-input-method').val(firstMethod.val());
}

var showParameters = function() {
var showParameters = function () {
{{#methods}}
{{#parameters}}

Expand Down Expand Up @@ -86,11 +88,11 @@
}
};

$("#node-input-method").change(function() {
$("#node-input-method").change(function () {
showParameters();
});

$("#optional-parameters").change(function() {
$("#optional-parameters").change(function () {
showParameters();
});

Expand All @@ -113,10 +115,12 @@
</script>

<script type="text/x-red" data-template-name="{{&nodeName}}">
{{#hasServiceParams}}
<div class="form-row">
<label for="node-input-service"><i class="fa fa-cloud"></i> <span data-i18n="{{&className}}.label.service"></span></label>
<input type="text" id="node-input-service">
</div>
{{/hasServiceParams}}

<div class="form-row">
<label for="node-input-method"><i class="icon-tasks"></i> <span data-i18n="{{&className}}.label.method"></span></label>
Expand Down Expand Up @@ -174,9 +178,9 @@
<h4>{{&summary}}</h4>
{{/methods}}
</script>

{{#hasServiceParams}}
<script type="text/javascript">
RED.nodes.registerType('{{&nodeName}}-service',{
RED.nodes.registerType('{{&nodeName}}-service', {
category: 'config',
defaults: {
{{^domain}}
Expand Down Expand Up @@ -211,10 +215,10 @@
{{/isSecure}}
temp: { type:"text" }
},
label: function() {
label: function () {
return this.name;
},
oneditprepare: function() {
oneditprepare: function () {
{{#isSecure}}
{{#isSecureToken}}
$('#node-config-input-secureTokenHeaderOrQueryName-label').hide();
Expand Down Expand Up @@ -306,3 +310,4 @@
{{/isSecureBasic}}
{{/isSecure}}
</script>
{{/hasServiceParams}}
6 changes: 6 additions & 0 deletions templates/swagger/node.js.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ var lib = require('./lib.js');
module.exports = function (RED) {
function {{&className}}Node(config) {
RED.nodes.createNode(this, config);
{{#hasServiceParams}}
this.service = RED.nodes.getNode(config.service);
{{/hasServiceParams}}
this.method = config.method;

{{#methods}}
Expand Down Expand Up @@ -97,8 +99,10 @@ module.exports = function (RED) {
}
});
}

RED.nodes.registerType("{{&nodeName}}", {{&className}}Node);

{{#hasServiceParams}}
function {{&className}}ServiceNode(n) {
RED.nodes.createNode(this, n);
{{^domain}}
Expand All @@ -122,6 +126,7 @@ module.exports = function (RED) {
{{/isSecureBasic}}
{{/isSecure}}
}

RED.nodes.registerType("{{&nodeName}}-service", {{&className}}ServiceNode, {
credentials: {
{{#isSecure}}
Expand All @@ -139,4 +144,5 @@ module.exports = function (RED) {
temp: { type: "text" }
}
});
{{/hasServiceParams}}
};
38 changes: 22 additions & 16 deletions templates/swagger/test/node_spec.js.mustache
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var should = require("should");
var helper = require("node-red-node-test-helper");
var node = require("../node.js");
var should = require('should');
var helper = require('node-red-node-test-helper');
var node = require('../node.js');

helper.init(require.resolve('node-red'));

Expand All @@ -19,9 +19,9 @@ describe('{{&nodeName}} node', function () {
});

it('should be loaded', function (done) {
var flow = [{ id: "n1", type: "{{&nodeName}}", name: "{{&nodeName}}" }];
var flow = [{ id: 'n1', type: '{{&nodeName}}', name: '{{&nodeName}}' }];
helper.load(node, flow, function () {
var n1 = helper.getNode("n1");
var n1 = helper.getNode('n1');
n1.should.have.property('name', '{{&nodeName}}');
done();
});
Expand All @@ -30,29 +30,35 @@ describe('{{&nodeName}} node', function () {
{{#methods}}
it('should handle {{&methodName}}()', function (done) {
var flow = [
{ id: "n1", type: "{{&nodeName}}", name: "{{&nodeName}}", wires: [["n2"]],
method: "{{&methodName}}",
{ id: 'n1', type: '{{&nodeName}}', name: '{{&nodeName}}',
method: '{{&methodName}}',
{{#parameters}}
{{&methodName}}_{{&camelCaseName}}: "<node property>", // (1) define node properties
{{&methodName}}_{{&camelCaseName}}: '<node property>', // (1) define node properties
{{/parameters}}
service: "n3" },
{ id: "n2", type: "{{&nodeName}}-service" },
{ id: "n3", type: "helper" }
{{#hasServiceParams}}
wires: [['n3']],
service: 'n2' },
{ id: 'n2', type: '{{&nodeName}}-service', host: 'http://<host name>' }, // (4) define host name
{{/hasServiceParams}}
{{^hasServiceParams}}
wires: [['n3']]
},
{{/hasServiceParams}}
{ id: 'n3', type: 'helper' }
];
helper.load(node, flow, function () {
var n3 = helper.getNode("n3");
var n1 = helper.getNode("n1");
n3.on("input", function (msg) {
var n3 = helper.getNode('n3');
var n1 = helper.getNode('n1');
n3.on('input', function (msg) {
try {
msg.should.have.property('payload', '<output message>'); // (3) define output message
done();
} catch (e) {
done(e);
}
});
n1.receive({ payload: "<input message>" }); // (2) define input message
n1.receive({ payload: '<input message>' }); // (2) define input message
});
});
{{/methods}}
});

Loading