cloudrail_si 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +3 -0
- data/examples/README.md +3 -0
- data/examples/simple/index.rb +11 -0
- data/lib/cloudrail_si.rb +41 -0
- data/lib/cloudrail_si/RedirectReceivers.rb +40 -0
- data/lib/cloudrail_si/Settings.rb +12 -0
- data/lib/cloudrail_si/errors/DetailErrors.rb +13 -0
- data/lib/cloudrail_si/errors/InternalError.rb +10 -0
- data/lib/cloudrail_si/errors/UserError.rb +11 -0
- data/lib/cloudrail_si/helpers/Helper.rb +151 -0
- data/lib/cloudrail_si/helpers/LimitedReadableStream.rb +55 -0
- data/lib/cloudrail_si/helpers/SequenceReadableStream.rb +59 -0
- data/lib/cloudrail_si/servicecode/InitSelfTest.rb +92 -0
- data/lib/cloudrail_si/servicecode/Interpreter.rb +213 -0
- data/lib/cloudrail_si/servicecode/Sandbox.rb +361 -0
- data/lib/cloudrail_si/servicecode/VarAddress.rb +11 -0
- data/lib/cloudrail_si/servicecode/commands/AwaitCodeRedirect.rb +48 -0
- data/lib/cloudrail_si/servicecode/commands/Break.rb +16 -0
- data/lib/cloudrail_si/servicecode/commands/CallFunc.rb +26 -0
- data/lib/cloudrail_si/servicecode/commands/Clone.rb +18 -0
- data/lib/cloudrail_si/servicecode/commands/Concat.rb +22 -0
- data/lib/cloudrail_si/servicecode/commands/Conditional.rb +27 -0
- data/lib/cloudrail_si/servicecode/commands/Create.rb +56 -0
- data/lib/cloudrail_si/servicecode/commands/Delete.rb +21 -0
- data/lib/cloudrail_si/servicecode/commands/Get.rb +25 -0
- data/lib/cloudrail_si/servicecode/commands/GetMimeType.rb +1005 -0
- data/lib/cloudrail_si/servicecode/commands/JumpRel.rb +18 -0
- data/lib/cloudrail_si/servicecode/commands/Pull.rb +34 -0
- data/lib/cloudrail_si/servicecode/commands/Push.rb +32 -0
- data/lib/cloudrail_si/servicecode/commands/Return.rb +16 -0
- data/lib/cloudrail_si/servicecode/commands/Set.rb +23 -0
- data/lib/cloudrail_si/servicecode/commands/Size.rb +26 -0
- data/lib/cloudrail_si/servicecode/commands/ThrowError.rb +17 -0
- data/lib/cloudrail_si/servicecode/commands/array/Uint8ToBase64.rb +25 -0
- data/lib/cloudrail_si/servicecode/commands/debug/Out.rb +24 -0
- data/lib/cloudrail_si/servicecode/commands/hash/md5.rb +29 -0
- data/lib/cloudrail_si/servicecode/commands/hash/sha1.rb +30 -0
- data/lib/cloudrail_si/servicecode/commands/http/RequestCall.rb +51 -0
- data/lib/cloudrail_si/servicecode/commands/json/Parse.rb +40 -0
- data/lib/cloudrail_si/servicecode/commands/json/Stringify.rb +21 -0
- data/lib/cloudrail_si/servicecode/commands/math/Floor.rb +27 -0
- data/lib/cloudrail_si/servicecode/commands/math/MathCombine.rb +35 -0
- data/lib/cloudrail_si/servicecode/commands/object/GetKeyArray.rb +21 -0
- data/lib/cloudrail_si/servicecode/commands/object/GetKeyValueArrays.rb +29 -0
- data/lib/cloudrail_si/servicecode/commands/stream/MakeJoinedStream.rb +38 -0
- data/lib/cloudrail_si/servicecode/commands/stream/MakeLimitedStream.rb +23 -0
- data/lib/cloudrail_si/servicecode/commands/stream/StreamToString.rb +25 -0
- data/lib/cloudrail_si/servicecode/commands/stream/StringToStream.rb +20 -0
- data/lib/cloudrail_si/servicecode/commands/string/Base64Encode.rb +42 -0
- data/lib/cloudrail_si/servicecode/commands/string/Format.rb +43 -0
- data/lib/cloudrail_si/servicecode/commands/string/IndexOf.rb +29 -0
- data/lib/cloudrail_si/servicecode/commands/string/LastIndexOf.rb +29 -0
- data/lib/cloudrail_si/servicecode/commands/string/Split.rb +29 -0
- data/lib/cloudrail_si/servicecode/commands/string/StringTransform.rb +29 -0
- data/lib/cloudrail_si/servicecode/commands/string/Substr.rb +30 -0
- data/lib/cloudrail_si/servicecode/commands/string/Substring.rb +30 -0
- data/lib/cloudrail_si/services/Facebook.rb +528 -0
- data/lib/cloudrail_si/services/FacebookPage.rb +310 -0
- data/lib/cloudrail_si/services/Foursquare.rb +314 -0
- data/lib/cloudrail_si/services/GitHub.rb +354 -0
- data/lib/cloudrail_si/services/GooglePlaces.rb +309 -0
- data/lib/cloudrail_si/services/GooglePlus.rb +367 -0
- data/lib/cloudrail_si/services/Instagram.rb +342 -0
- data/lib/cloudrail_si/services/LinkedIn.rb +363 -0
- data/lib/cloudrail_si/services/MicrosoftLive.rb +346 -0
- data/lib/cloudrail_si/services/Nexmo.rb +173 -0
- data/lib/cloudrail_si/services/Slack.rb +318 -0
- data/lib/cloudrail_si/services/Twilio.rb +173 -0
- data/lib/cloudrail_si/services/Twitter.rb +795 -0
- data/lib/cloudrail_si/services/Yahoo.rb +408 -0
- data/lib/cloudrail_si/services/Yelp.rb +389 -0
- data/lib/cloudrail_si/statistics/Statistics.rb +125 -0
- data/lib/cloudrail_si/types/Address.rb +9 -0
- data/lib/cloudrail_si/types/Charge.rb +33 -0
- data/lib/cloudrail_si/types/CloudMetaData.rb +19 -0
- data/lib/cloudrail_si/types/CreditCard.rb +76 -0
- data/lib/cloudrail_si/types/Date.rb +49 -0
- data/lib/cloudrail_si/types/DateOfBirth.rb +16 -0
- data/lib/cloudrail_si/types/Error.rb +21 -0
- data/lib/cloudrail_si/types/Location.rb +8 -0
- data/lib/cloudrail_si/types/POI.rb +17 -0
- data/lib/cloudrail_si/types/Refund.rb +25 -0
- data/lib/cloudrail_si/types/SandboxObject.rb +20 -0
- data/lib/cloudrail_si/types/SpaceAllocation.rb +13 -0
- data/lib/cloudrail_si/types/Subscription.rb +27 -0
- data/lib/cloudrail_si/types/SubscriptionPlan.rb +26 -0
- data/lib/cloudrail_si/types/Types.rb +43 -0
- data/lib/cloudrail_si/version.rb +3 -0
- metadata +205 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class JumpRel
|
6
|
+
def get_identifier
|
7
|
+
'jumpRel'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length === 1)
|
12
|
+
relative_end_pos = Helper.resolve(environment, parameters[0])
|
13
|
+
Helper.assert(Helper.is_number(relative_end_pos))
|
14
|
+
environment.increment_current_service_code_line(relative_end_pos)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative '../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class Pull
|
6
|
+
def get_identifier
|
7
|
+
'pull'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length >= 2 &&
|
12
|
+
Helper.is_var_address(parameters[0]) &&
|
13
|
+
Helper.is_var_address(parameters[1]))
|
14
|
+
target_var = parameters[0]
|
15
|
+
container_var = parameters[1]
|
16
|
+
container_var_parts = environment.decode_variable_address(container_var)
|
17
|
+
(2..parameters.length - 1).each do |i|
|
18
|
+
container_var_parts.push(Helper.resolve(environment, parameters[i]))
|
19
|
+
end
|
20
|
+
container = environment.get_variable(container_var_parts)
|
21
|
+
|
22
|
+
if (Helper.is_array(container))
|
23
|
+
entry = container.pop()
|
24
|
+
elsif (Helper.is_string(container))
|
25
|
+
entry = container[-1]
|
26
|
+
environment.set_variable(container_var_parts, container)
|
27
|
+
else
|
28
|
+
raise Errors::InternalError.new('Pull only works for lists and strings')
|
29
|
+
end
|
30
|
+
environment.set_variable(target_var, entry)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative '../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class Push
|
6
|
+
def get_identifier
|
7
|
+
'push'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length >= 2 &&
|
12
|
+
Helper.is_var_address(parameters[0]))
|
13
|
+
target_var = parameters[0]
|
14
|
+
value = Helper.resolve(environment, parameters[1])
|
15
|
+
target_var_parts = environment.decode_variable_address(target_var)
|
16
|
+
(2..parameters.length - 1).each do |i|
|
17
|
+
target_var_parts.push(Helper.resolve(environment, parameters[i]))
|
18
|
+
end
|
19
|
+
container = environment.get_variable(target_var_parts)
|
20
|
+
if (Helper.is_array(container))
|
21
|
+
container.push(value)
|
22
|
+
elsif (Helper.is_object(container))
|
23
|
+
container[container.length] = value
|
24
|
+
elsif (Helper.is_string(container))
|
25
|
+
environment.set_variable(target_var_parts, container.concat(value.to_string()))
|
26
|
+
else
|
27
|
+
raise Errors::InternalError.new('Push only works for lists, objects and strings')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative '../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class Return
|
6
|
+
def get_identifier
|
7
|
+
'return'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length == 0)
|
12
|
+
environment.code_line_stack[environment.code_line_stack.length - 1] = 9007199254740991
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class Set
|
6
|
+
def get_identifier
|
7
|
+
'set'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length >= 2 &&
|
12
|
+
Helper.is_var_address(parameters[0]))
|
13
|
+
target_var = parameters[0]
|
14
|
+
value = Helper.resolve(environment, parameters[1])
|
15
|
+
target_var_parts = environment.decode_variable_address(target_var)
|
16
|
+
(2..parameters.length - 1).each do |i|
|
17
|
+
target_var_parts.push(Helper.resolve(environment, parameters[i]))
|
18
|
+
end
|
19
|
+
environment.set_variable(target_var_parts, value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class Size
|
6
|
+
def get_identifier
|
7
|
+
'size'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length === 2 &&
|
12
|
+
Helper.is_var_address(parameters[0]) &&
|
13
|
+
Helper.is_var_address(parameters[1]))
|
14
|
+
target_var = parameters[0]
|
15
|
+
container = environment.get_variable(parameters[1])
|
16
|
+
size = -1
|
17
|
+
if (Helper.is_array(container) || Helper.is_string(container))
|
18
|
+
size = container.length
|
19
|
+
elsif (Helper.is_object(container))
|
20
|
+
size = container.keys.length
|
21
|
+
end
|
22
|
+
environment.set_variable(target_var, size)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative '../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class ThrowError
|
6
|
+
def get_identifier
|
7
|
+
'throwError'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length < 2)
|
12
|
+
error_obj = Helper.resolve(environment, parameters[0]) if (parameters.length > 0)
|
13
|
+
environment.set_thrown_error(error_obj)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
require_relative '../string/Base64Encode'
|
3
|
+
|
4
|
+
module CloudRailSi
|
5
|
+
module ServiceCode
|
6
|
+
class Uint8ToBase64
|
7
|
+
def get_identifier
|
8
|
+
'array.uint8ToBase64'
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute(environment, parameters)
|
12
|
+
Helper.assert(parameters.length >= 2 &&
|
13
|
+
Helper.is_var_address(parameters[0]) &&
|
14
|
+
Helper.is_var_address(parameters[1]))
|
15
|
+
result_var = parameters[0]
|
16
|
+
source_array = Helper.resolve(environment, parameters[1])
|
17
|
+
url_safe = !!Helper.resolve(environment, parameters[2]) if (parameters.length > 2)
|
18
|
+
Helper.assert(Helper.is_array(source_array))
|
19
|
+
packed = source_array.pack('c*')
|
20
|
+
base64_string = Base64Encode.encode([packed].pack("H*"), false, url_safe)
|
21
|
+
environment.set_variable(result_var, base64_string)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module CloudRailSi
|
5
|
+
module ServiceCode
|
6
|
+
class Out
|
7
|
+
def get_identifier
|
8
|
+
'debug.out'
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute(environment, parameters)
|
12
|
+
Helper.assert(parameters.length >= 1)
|
13
|
+
str = ''
|
14
|
+
(0..parameters.length - 1).each do |i|
|
15
|
+
parameter = parameters[i]
|
16
|
+
part = Helper.resolve(environment, parameter)
|
17
|
+
part = part.to_json if (Helper.is_array(part) || Helper.is_object(part))
|
18
|
+
str += part.to_s
|
19
|
+
end
|
20
|
+
print str
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
require 'digest'
|
3
|
+
|
4
|
+
module CloudRailSi
|
5
|
+
module ServiceCode
|
6
|
+
class Md5
|
7
|
+
def get_identifier
|
8
|
+
'hash.md5'
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute(environment, parameters)
|
12
|
+
Helper.assert(parameters.length == 2 &&
|
13
|
+
Helper.is_var_address(parameters[0]))
|
14
|
+
result_var = parameters[0]
|
15
|
+
message = Helper.resolve(environment, parameters[1])
|
16
|
+
Helper.assert(Helper.is_string(message))
|
17
|
+
|
18
|
+
buf = Digest::MD5.hexdigest(message)
|
19
|
+
|
20
|
+
number_array = []
|
21
|
+
(0..buf.length - 1).step(2).each do |i|
|
22
|
+
number_array.push(buf[i, 2].to_i(16))
|
23
|
+
end
|
24
|
+
|
25
|
+
environment.set_variable(result_var, number_array)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
require 'hmac-sha1'
|
3
|
+
|
4
|
+
module CloudRailSi
|
5
|
+
module ServiceCode
|
6
|
+
class Sha1
|
7
|
+
def get_identifier
|
8
|
+
'crypt.hmac.sha1'
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute(environment, parameters)
|
12
|
+
Helper.assert(parameters.length == 3 &&
|
13
|
+
Helper.is_var_address(parameters[0]))
|
14
|
+
result_var = parameters[0]
|
15
|
+
key = Helper.resolve(environment, parameters[1])
|
16
|
+
message = Helper.resolve(environment, parameters[2])
|
17
|
+
Helper.assert(Helper.is_string(key) && Helper.is_string(message))
|
18
|
+
hmac = HMAC::SHA1.new(key)
|
19
|
+
hmac.update(message)
|
20
|
+
buf = hmac.hexdigest
|
21
|
+
|
22
|
+
number_array = []
|
23
|
+
(0..buf.length - 1).each do |i|
|
24
|
+
number_array.push(buf[i].to_i(16))
|
25
|
+
end
|
26
|
+
environment.set_variable(result_var, number_array)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
require 'rack'
|
3
|
+
|
4
|
+
module CloudRailSi
|
5
|
+
module ServiceCode
|
6
|
+
class RequestCall
|
7
|
+
def get_identifier
|
8
|
+
return 'http.requestCall'
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute(environment, parameters)
|
12
|
+
Helper.assert(parameters.length == 2 &&
|
13
|
+
Helper.is_var_address(parameters[0]) &&
|
14
|
+
Helper.is_var_address(parameters[1]))
|
15
|
+
result_var = parameters[0]
|
16
|
+
options = Helper.resolve(environment, parameters[1])
|
17
|
+
url = options['url']
|
18
|
+
method = options['method']
|
19
|
+
request_headers = options['requestHeaders']
|
20
|
+
|
21
|
+
request_body = options['requestBody']
|
22
|
+
|
23
|
+
Helper.assert(Helper.is_string(url) && Helper.is_string(method))
|
24
|
+
Helper.assert(request_headers.nil? || Helper.is_object(request_headers))
|
25
|
+
Helper.assert(request_body.nil? || Helper.is_stream(request_body))
|
26
|
+
|
27
|
+
res = Helper.make_request(url, request_headers, request_body, method)
|
28
|
+
response = {}
|
29
|
+
response['code'] = res.code.to_i
|
30
|
+
response['message'] = Rack::Utils::HTTP_STATUS_CODES[res.code.to_i],
|
31
|
+
response['responseHeaders'] = capitalize_headers(res.to_hash),
|
32
|
+
response['responseBody'] = res.body
|
33
|
+
|
34
|
+
Helper.log("response:")
|
35
|
+
Helper.log(response)
|
36
|
+
Helper.log("\n")
|
37
|
+
|
38
|
+
environment.set_variable(result_var, response)
|
39
|
+
end
|
40
|
+
|
41
|
+
def capitalize_headers(headers)
|
42
|
+
return nil if headers.nil?
|
43
|
+
|
44
|
+
ret = {}
|
45
|
+
headers.each do |key|
|
46
|
+
ret[Helper.upper_case_first_letter(key[0])] = headers[key[0]][0]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module CloudRailSi
|
5
|
+
module ServiceCode
|
6
|
+
class Parse
|
7
|
+
def get_identifier
|
8
|
+
return 'json.parse'
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute(environment, parameters)
|
12
|
+
Helper.assert(parameters.length == 2 &&
|
13
|
+
Helper.is_var_address(parameters[0]))
|
14
|
+
result_var = parameters[0]
|
15
|
+
input = Helper.resolve(environment, parameters[1])
|
16
|
+
Helper.assert(Helper.is_stream(input) || Helper.is_string(input))
|
17
|
+
if (Helper.is_stream(input))
|
18
|
+
return Helper.dump_stream(input, lambda { |string_input|
|
19
|
+
Helper.assert(Helper.is_string(string_input))
|
20
|
+
obj = parse(string_input)
|
21
|
+
environment.set_variable(result_var, obj)
|
22
|
+
})
|
23
|
+
else
|
24
|
+
obj = parse(input)
|
25
|
+
environment.set_variable(result_var, obj)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def parse(input)
|
30
|
+
parsed = JSON.parse(input)
|
31
|
+
Helper.log("Parsed JSON: #{parsed}\n\n")
|
32
|
+
parsed.each do |key|
|
33
|
+
if Helper.is_boolean(parsed[key])
|
34
|
+
parsed[key] = parsed[key] ? 1 : 0 #TODO: this needs to work deeply; affects stripe
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module CloudRailSi
|
5
|
+
module ServiceCode
|
6
|
+
class Stringify
|
7
|
+
def get_identifier
|
8
|
+
return 'json.stringify'
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute(environment, parameters)
|
12
|
+
Helper.assert(parameters.length == 2 &&
|
13
|
+
Helper.is_var_address(parameters[0]))
|
14
|
+
result_var = parameters[0]
|
15
|
+
input = Helper.resolve(environment, parameters[1])
|
16
|
+
str = input.to_json
|
17
|
+
environment.set_variable(result_var, str)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class Floor
|
6
|
+
def get_identifier
|
7
|
+
'math.floor'
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute(environment, parameters)
|
11
|
+
Helper.assert(parameters.length == 2 &&
|
12
|
+
Helper.is_var_address(parameters[0]))
|
13
|
+
result_var = parameters[0]
|
14
|
+
input = Helper.resolve(environment, parameters[1])
|
15
|
+
Helper.assert(Helper.is_number(input))
|
16
|
+
res = round_down(input).to_i
|
17
|
+
environment.set_variable(result_var, res)
|
18
|
+
end
|
19
|
+
|
20
|
+
# adapted from http://stackoverflow.com/questions/7090537/a-way-to-round-floats-down
|
21
|
+
private
|
22
|
+
def round_down(val, n=0)
|
23
|
+
n < 1 ? val.to_i.to_f : (val - 0.5 / 10**n).round(n)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative '../../../helpers/Helper'
|
2
|
+
|
3
|
+
module CloudRailSi
|
4
|
+
module ServiceCode
|
5
|
+
class MathCombine
|
6
|
+
def initialize(identifier, combine_function)
|
7
|
+
@identifier = identifier
|
8
|
+
@combine_function = combine_function
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_identifier
|
12
|
+
@identifier
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute(environment, parameters)
|
16
|
+
Helper.assert(parameters.length >= 2 &&
|
17
|
+
Helper.is_var_address(parameters[0]))
|
18
|
+
result_var = parameters[0]
|
19
|
+
elements = []
|
20
|
+
|
21
|
+
(1..(parameters.length - 1)).each do |i|
|
22
|
+
resolved = Helper.resolve(environment, parameters[i])
|
23
|
+
resolved = resolved.to_f if (Helper.is_string(resolved) && resolved.index('.'))
|
24
|
+
resolved = resolved.to_i if (Helper.is_string(resolved) && resolved.index('.').nil?)
|
25
|
+
|
26
|
+
Helper.assert(Helper.is_number(resolved))
|
27
|
+
elements.push(resolved)
|
28
|
+
end
|
29
|
+
|
30
|
+
res = @combine_function.call(elements)
|
31
|
+
environment.set_variable(result_var, res)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|