|
@@ -3,6 +3,10 @@ require 'cgi'
|
|
|
|
|
|
module Agents
|
|
|
class JavaScriptAgent < Agent
|
|
|
+ include FormConfigurable
|
|
|
+
|
|
|
+ can_dry_run!
|
|
|
+
|
|
|
default_schedule "never"
|
|
|
|
|
|
description <<-MD
|
|
@@ -25,6 +29,11 @@ module Agents
|
|
|
* `this.unescapeHtml(htmlToUnescape)`
|
|
|
MD
|
|
|
|
|
|
+ form_configurable :language, type: :array, values: %w[JavaScript CoffeeScript]
|
|
|
+ form_configurable :code, type: :text, ace: true
|
|
|
+ form_configurable :expected_receive_period_in_days
|
|
|
+ form_configurable :expected_update_period_in_days
|
|
|
+
|
|
|
def validate_options
|
|
|
cred_name = credential_referenced_by_code
|
|
|
if cred_name
|
|
@@ -32,6 +41,10 @@ module Agents
|
|
|
else
|
|
|
errors.add(:base, "The 'code' option is required") unless options['code'].present?
|
|
|
end
|
|
|
+
|
|
|
+ if interpolated['language'].present? && !interpolated['language'].downcase.in?(%w[javascript coffeescript])
|
|
|
+ errors.add(:base, "The 'language' must be JavaScript or CoffeeScript")
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
def working?
|
|
@@ -69,7 +82,7 @@ module Agents
|
|
|
this.memory('callCount', callCount + 1);
|
|
|
}
|
|
|
};
|
|
|
-
|
|
|
+
|
|
|
Agent.receive = function() {
|
|
|
var events = this.incomingEvents();
|
|
|
for(var i = 0; i < events.length; i++) {
|
|
@@ -79,9 +92,10 @@ module Agents
|
|
|
JS
|
|
|
|
|
|
{
|
|
|
- "code" => js_code.gsub(/[\n\r\t]/, '').strip,
|
|
|
- 'expected_receive_period_in_days' => "2",
|
|
|
- 'expected_update_period_in_days' => "2"
|
|
|
+ 'code' => Utils.unindent(js_code),
|
|
|
+ 'language' => 'JavaScript',
|
|
|
+ 'expected_receive_period_in_days' => '2',
|
|
|
+ 'expected_update_period_in_days' => '2'
|
|
|
}
|
|
|
end
|
|
|
|
|
@@ -107,7 +121,11 @@ module Agents
|
|
|
context["escapeHtml"] = lambda { |a, x| CGI.escapeHTML(x) }
|
|
|
context["unescapeHtml"] = lambda { |a, x| CGI.unescapeHTML(x) }
|
|
|
|
|
|
- context.eval(code)
|
|
|
+ if (options['language'] || '').downcase == 'coffeescript'
|
|
|
+ context.eval(CoffeeScript.compile code)
|
|
|
+ else
|
|
|
+ context.eval(code)
|
|
|
+ end
|
|
|
context.eval("Agent.#{js_function}();")
|
|
|
end
|
|
|
|
|
@@ -121,7 +139,7 @@ module Agents
|
|
|
end
|
|
|
|
|
|
def credential_referenced_by_code
|
|
|
- interpolated['code'] =~ /\Acredential:(.*)\Z/ && $1
|
|
|
+ (interpolated['code'] || '').strip =~ /\Acredential:(.*)\Z/ && $1
|
|
|
end
|
|
|
|
|
|
def setup_javascript
|