# Available Ruby methods

Workato implements a subset of the ruby public instance methods on its SDK framework. Here is an allowlist of ruby methods that you can use in any block when building your connectors. This list can and will be expanded. You can request to add additional methods to this list using the Workato feedback widget (opens new window).

Personal reusable methods

You can also declare personal reusable methods to use in any block when using your workato SDK.


# at

Creates a new time object with the given argument.

See at (opens new window) method definition.


# abs

Returns the absolute value of number.


# account_property

Returns the value for a specific account property in the user's workspace.

client_secret = account_property('hubspot_webhook_client_secret')

Note that you can only invoke this method from the following lambdas within the connection hash: authorization_url, token_url, acquire, base_uri<. Also, other lambdas within actions, triggers, methods, object_definitions and pick_lists.


# aes_cbc_encrypt

AES encryption with CBC mode. Accepts 128, 192, and 256 bit keys.

key128 = workato.pbkdf2_hmac_sha1("password", workato.random_bytes(8))
workato.aes_cbc_encrypt("text_to_encrypt", key128)

# aes_cbc_decrypt

AES decryption with CBC mode. Accepts 128, 192, and 256 bit keys.

workato.aes_cbc_decrypt("text_to_decrypt", key128)

# after_error_response

Can be chained with a HTTP request to rescue a failed request. See Error handling.


# after_response

Can be chained with a HTTP request to utilize the response's headers, and so on. See Error handling.


# ago

Go back in time. Returns timestamp.

2.days.ago #2017-01-15T12:30:00.000000-07:00 if time now is 2017-01-17T12:30:00.000000-07:00
30.minutes.ago #2017-01-15T12:30:00.000000-07:00 if time now is 2017-01-15T13:00:00.000000-07:00
30.seconds.ago #2017-01-15T12:30:00.000000-07:00 if time now is 2017-01-15T12:30:30.000000-07:00

See ago (opens new window) method definition.


# all?

Passes each element of the collection to the given block. The method returns true if the block never returns false or nil.

%w[ant bear cat].all? { |word| word.length >= 3 } #=> true

See all? method definition.


# as_string

Decode byte sequence as string in given encoding.

"0J/RgNC40LLQtdGC\n".decode_base64.as_string('utf-8')

# as_utf8

Decode byte sequence as string in given encoding.

"0J/RgNC40LLQtdGC\n".decode_base64.as_string('utf-8')

# aws.generate_signature

Generates an AWS V4 Signature for AWS services and returns a hash which contains the URL and signature for you to formulate the request.

aws.generate_signature(
   connection: connection,
   service: "s3",
   region: connection["aws_region"],
   host: "s3.dualstack.#{connection['aws_region']}.amazonaws.com",
   method: "GET",
   path: "/demo",
   params: {
     "list-type": 2,
     "max-keys": 1000
   }.compact,
   headers: {
     Test: "hello!"
   },
   payload: {
     hello: "world"
   }.to_json
 )

See AWS authentication.


# blank?

Returns true if value is null or an empty string, otherwise false.


# binary?

Returns true if value is a binary array.


# beginning_of_hour

Returns timestamp for top-of-the-hour for given timestamp.

"2017-06-01T16:56:00.000000-07:00".to_time.beginning_of_hour #2017-06-01T16:00:00.000000 +0000

# beginning_of_day

Returns timestamp for midnight for given timestamp.

"2017-06-08T22:30:10.000000-07:00".to_time.beginning_of_day #2017-06-08T00:00:00.000000 +0000

# beginning_of_week

Returns timestamp for midnight for the start of the week (Mon) for given timestamp.

"2017-08-18T00:00:00.000000-07:00".to_time.beginning_of_week #2017-08-14T00:00:00.000000 +0000

# beginning_of_month

Returns timestamp for midnight for the start of the month for given timestamp.

"2017-01-30T22:35:00.000000-07:00".to_time.beginning_of_month #2017-01-01T00:00:00.000000 +0000

# beginning_of_year

Returns timestamp for midnight for the start of the year for given timestamp.

"2017-01-30T22:35:00.000000 -07:00".to_time.beginning_of_year #2017-01-01T00:00:00.000000 +0000

# bytes

Returns an array of bytes for a given string.

"Hello".bytes # ["72","101","108","108","111"]

# bytesize

Returns the length of a given string in bytes.

"Hello".bytesize # 5

# byteslice

Returns a substring of specified bytes instead of length. In some cases, non ASCII characters (Japanese, Chinese e.g.) may use multiple bytes.

"abc漢字".byeslice(0,4) # "abc漢"

See byteslice (opens new window) method definition.


# capitalize

Capitalizes the first character of the string.


# case_sensitive_headers

Can be chained with HTTP methods to introduce headers that are case sensitive. By default, Workato does not respect case sensitivity for headers, as per RFC specification.

get("https://www.example.com").case_sensitive_headers("HeLlo": "world")

# checkpoint!

Similar to reinvoke_after but utilized with file stream consuming actions. When checkpoint! is invoked, Workato checks how long this action has been running for and if its been longer than 120 seconds, it refreshes the action level timeout with a small delay to ensure fair processing.

This allows you to transfer files that take longer than the current timeout limit of 180 seconds to complete the transfer.


# chunk

Enumerates over the items, chunking them together based on the return value of the block.

See chunk (opens new window) method definition.


# chunk_while

Creates an enumerator for each chunked elements. The beginnings of chunks are defined by the block.

See chunk_while (opens new window) method definition.


# collect

Returns a new array with the results of running block once for every element in enum.

See collect (opens new window) method definition.


# collect_concat

Returns a new array with the concatenated results of running block once for every element in enum.

See collect_concat (opens new window) method definition.


# compact

Returns a hash with non nil values.

See compact (opens new window) method definition.


# csv.parse

Allows you to parse a CSV string into a JSON array that makes it easy to display at data pills.

workato.csv.parse("blue;1\nwhite;2\n", headers: "color;count", col_sep: ";")

Takes in 7 arguments:

string
The first position of the method which represents the CSV string to parse.
headers
Either true (First row of actual CSV will be used as headers), array of string (corresponding to each column header) or string (Artificial first row of the CSV with appropriate column separator).
col_sep
The column separator in the CSV. Defaults to ,.
row_sep
The row separator in the CSV. Defaults to \n.
quote_char
The quoting character in the CSV. Defaults to double quotes ".
skip_blanks
Boolean that indicates whether blank lines in the string input should be ignored. Defaults to false.
skip_first_line
Boolean that indicates if we should skip the first line. Useful when headers is true.

Limits: File Size must be less than 30 MB and CSV lines less than 65K


# csv.generate

Allows you to generate a CSV string from a JSON array so you can send it to a downstream system as a file.

workato.csv.generate(headers: ["color", "amount"], col_sep: ";") do |csv|
  csv << [:blue, 1]
  csv << [:white, 2]
end

Takes in 5 arguments:

headers
Either true (First row of actual CSV will be used as headers), array of string (corresponding to each column header) or string (Artificial first row of the CSV with appropriate column separator).
col_sep
The column separator in the CSV. Defaults to ,.
row_sep
The row separator in the CSV. Defaults to \n.
quote_char
The quoting character in the CSV. Defaults to double quotes ".
force_quotes
Boolean that determines whether each output field should be quoted.

Finally, one lambda that allows you to append individual rows to this CSV as an array of strings.


# cycle

Cycles through an array for a specified number of times and calls a block for each element.

See cycle (opens new window) method definition.


# decode_base64

Decode using Base64 algorithm.


# decode_hex

Decode hexadecimal into binary string.


# decode_url

URL decode a string. This formula uses CGI.unescape to URL decoding.


# decode_urlsafe_base64

Decode using URL-safe modification of Base64 algorithm.


# decrypt

Decrypt the encrypted string using AES-256-CBC algorithm. Input should be in RNCryptor V3 format.


# deep_merge

Merges a hash with another hash, including nested child hashes.

See deep_merge (opens new window) method definition.


# delete_at

Delete elements in an array.

See delete_at (opens new window) method definition.


# detect

Passes each element in an array to a block. Returns the first element which satisfies a block.

See detect (opens new window) method definition.


# dig

Retrieves the value object corresponding to the index passed in.

The dig method is often used to strip away layers in nested arrays/hashes. For example, we use the dig method often when dealing with XML data formats.

See dig (opens new window) method definition.


# drop

Drops first N elements from an Enumerator, and returns rest elements in an array.

[1, 2, 3, 4, 5, 0].drop(3) #=> [4, 5, 0]

See drop (opens new window) method definition.


# drop_while

Drops elements up to, but not including, the first element of an array for which the block returns nil or false.

See drop_while (opens new window) method definition.


# dst?

Returns true if the time is within Daylight Savings Time for the specified time zone.


# each

Basic iterator.

[1, 2, 3].each { |i| puts i }

# each_byte

Passes each byte in a given string to the given block, or returns an enumerator if no block is given.

See each_byte (opens new window) method definition.


# each_char

Passes each character in a given string to the given block, or returns an enumerator if no block is given.

See each_char (opens new window) method definition.


# each_cons

Iterates the given block for each array of consecutive N elements. If no block is given, returns an enumerator.

See each_cons (opens new window) method definition.


# each_entry

Iterates over an array and returns each element in the block.

See each_entry (opens new window) method definition.


# each_slice

Iterates the given block for each slice of N elements. If no block is given, returns an enumerator.

See each_slice (opens new window) method definition.


# each_with_index

Iterator returned with an index.

[1, 2, 3].each_with_index { |item, index| puts "#{index}:#{item}" }

See each_with_index (opens new window) method definition.


# each_with_object

Iterator returned with an object which you can define.

[%w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase }
# => {'foo' => 'FOO', 'bar' => 'BAR'}

See each_with_object (opens new window) method definition.


# encode_hex

Converts binary string to its hex representation.

"0J/RgNC40LLQtdGC\n".decode_base64.encode_hex

# encode_sha256

Encode using SHA256 algorithm. The output is a binary string. Use encode_hex to turn it into a hex representation.

"hello".encode_sha256 #=> 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
"hello".encode_sha256.encode_hex #=> 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

# encode_sha512

Encode using SHA512 algorithm. The output is a binary string. Use encode_hex to turn it into a hex representation.

"hello".encode_sha512 #=> 0x9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
"hello".encode_sha512.encode_hex #=> 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043

# encode_base64

Encode using Base64 algorithm.


# encode_url

URL encode a string.

'Hello World'.encode_url # 'Hello%20World'

# encode_urlsafe_base64.

Encode using URL-safe modification of Base64 algorithm


# encode_www_form

Join hash into url-encoded string of parameters.

{"apple" => "red green", "2" => "3"}.encode_www_form #"apple=red+green&2=3"

# ends_of_month

Returns a new date/time representing the end of the month.

"2017-08-18T00:00:00".to_time.end_of_month #2017-08-31 23:59:59 +0000

# ends_with?

Returns true if string ends with a specific pattern. False otherwise.

"Hello!".ends_with?("!") #true

# entries

Returns an array containing the items in enum.

(1..7).entries #=> [1, 2, 3, 4, 5, 6, 7]
{ 'a'=>1, 'b'=>2, 'c'=>3 }.entries   #=> [["a", 1], ["b", 2], ["c", 3]]

See entries (opens new window) method definition.


# error

Raise a job error with a user-defined error body.

error("Unable to find Account with ID: 123")

# even?

Returns true if integer is an even number.

See even? (opens new window) method definition.


# except

Returns a hash that includes everything except given keys.

{ name: "Jake", last_name: "Paul", age: "22" }.except(:name, :last_name) # { :age => "22" }

See except (opens new window) method definition.


# exclude?

Returns true if field does not contain a value. Case sensitive.

"Partner account".exclude?("Partner") #false

See exclude (opens new window) method definition.


# execution_context

WARNING

This method is only available to connectors built within Embedded partner workspaces. This method returns a hash with the context of the recipe and job from which this action or trigger was invoked. In cases where there is no applicable context - e.g. job handle when the request was sent in a trigger, the value of the key will be null.

Here is a summary of the lambdas: execution_context will return values

Key recipe_id job_handle
execute Yes Yes
methods (For each method called within execute) Yes Yes
apply (For requests sent in the execute lambda) Yes Yes
poll Yes No
methods (For each method called within poll) Yes No
apply (For requests sent in the poll lambda) Yes No
object_definitions (For each fields method defined) No No
pick_lists (For each pick_list method defined) No No
methods (For each method called within pick_lists or object_definitions) No No

Referencing the execution context can be done via using the execution_context method

execution_context #=> { :recipe_id => "1234" }
execution_context[:recipe_id] #=> "1234"
execution_context[:job_handle] #=> "j-12fsfdsakn1"

# fetch

Returns a value from the hash for the given key.

See fetch (opens new window) method definition.


# find_all

Returns an array containing all elements of a hash or array that satisfy the condition denoted in the block.

Foo = { :abc => 1, :bad => [1,2] }
Foo.find_all { |i| i[0] == :abc } # [[:abc, 1]]

See find_all (opens new window) method definition.


# find_index

Compares each element in an array to a given block and returns the index for the first match.

(1..100).find_index { |i| i % 5 == 0 and i % 7 == 0 }  #=> 34

See find_index (opens new window) method definition.


# first

Returns the first item in a list. Can also be used to return the first n items in a list.

See first (opens new window) method definition.


# flatten

Flatten multi-dimensional array to simple array.

[[1, 2], [3, 4]].flat_map { |e| e + [100] } #=> [1, 2, 100, 3, 4, 100]

See flatten (opens new window) method definition.


# flat_map

Returns a new array with the concatenated results of running block once for every element in enum.

[[1, 2, 3],[4,5,6]].flatten #[1, 2, 3, 4, 5, 6]

See flat_map (opens new window) method definition.


# follow_redirection

By default, we follow most 3XX redirect HTTP codes. In some cases, you may need to apply this to follow the redirect for any response code.

    action_with_follow_redirection: {
      execute: lambda do |_connection, _input|
 get('https://run.mocky.io/v3/41abc094-6b10-41a9-8201-b15146258b12').follow_redirection.after_response do |code, body, headers|
   {
     code: code,
     body: body,
     headers: headers
   }
 end
      end
    }

# format_json

Convert request to json format and expect response body in json format.


# format_map

Create an array of strings by formatting each row of given array.

[[{name: 'Jake', age: 23}].format_map('Name: %{name}, Age: %{age}') #['Name: Jake, Age: 23']
[[22, 45], [33, 88]].format_map('Id: %s, Count: %s') #['Id: 22, Count: 45', 'Id: 33, Count: 88']

See format_map (opens new window) method definition.


# format_xml

Convert request to XML format and expect response body in XML format.

Takes in 3 arguments,

root_element_name
Adds a root element tag to your outgoing XML payload.
namespaces
Adds additional tags to your payload for namespaces.
strip_response_namespaces
Strips namespaces from XML responses.

# from_now

Go forward in time. Returns timestamp of the moment that the formula was executed with the specified time period added, in Pacific time (UTC-8/UTC-7).

4.months.from_now #2017-05-23T14:40:07.338328-07:00
2.days.from_now #2017-01-05T14:40:07.338328-07:00
30.minutes.from_now
12.seconds.from_now

# from_xml

Converts XML string to hash.

"<?xml version="1.0" encoding="UTF-8"?> <hash><foo type="integer"></foo></hash>".from_xml # { "hash": [ "foo": [ { "@type": "integer", "content!": "1" } ] ] }

# grep

Searches through an enumerator for every element that satisfies your condition.

See grep (opens new window) method definition.


# grep_v

Searches through an enumerator for every element that does not satisfy your condition.

See grep_v (opens new window) method definition.


# group_by

Group arrays into sets.

See group_by (opens new window) method definition.


# gsub

Substitute a pattern with value. Case sensitive.

"Jean Marie".gsub(/J/, "M") #"Mean Marie"

See gsub (opens new window) method definition.


# has_key?

Returns true if the given key is present in hash.

See has_key? (opens new window) method definition.


# headers

Add headers to a request.

.headers(Authorization: "Bearer HTB674HJK1")

# hmac_md5

Creates HMAC_MD5 signature.

"username:password:nonce".hmac_md5("key")

# hmac_sha1

Creates HMAC_SHA1 signature.

"username:password:nonce".hmac_sha1("key")

# hmac_sha256

Creates HMAC_SHA256 signature.

"username:password:nonce".hmac_sha256("key")

# hmac_sha512

Creates HMAC_SHA512 signature.

"username:password:nonce".hmac_sha512("key")

# ignore_redirection

Allows you to stop a request from being redirected immediately. Commonly used in cases where your requests are redirected to a secondary site like AWS S3 to download a file. You will need to strip any authentication used in the apply: key using "current_url".

    action_with_ignore_redirection: {
      execute: lambda do |_connection, _input|
 get('https://run.mocky.io/v3/41abc094-6b10-41a9-8201-b15146258b12').ignore_redirection.after_response do |code, body, headers|
   {
     code: code,
     body: body,
     headers: headers
   }
 end
      end
    },

# ignored

Ignore a comma-separate list of fields.

object_definition["user"].ignored("id", "created_at")

# include?

Returns true if field contains a value. False otherwise.

See include? (opens new window) method definition.


# inject

Combine elements in an array using an operation.

See inject (opens new window) method definition.


# insert

Insert elements into an array.

See insert (opens new window) method definition.


# in_time_zone

Converts the time to given time zone.

"2017-09-06T18:30:15.671720-05:00".to_time.in_time_zone("America/Los_Angeles") #"2017-09-06T16:30:15.671720-07:00"

# is_a?

Returns true if class is the class of obj, or if class is one of the superclasses of obj or modules included in obj.

Workato currently supports the following classes - Array, Hash, Time, String, Integer, and Float.

See is_a? (opens new window) method definition.


# is_true?

Converts a value to boolean and returns true if value is truthy.


# is_not_true?

Converts a value to boolean and returns true if value is not truthy.


# iso8601

Convert a date/date-time variable to ISO8601 format.


# join

Join array elements into a string.

See join (opens new window) method definition.


# jwt_decode

Decodes a JSON web token (JWT) using one of the following algorithms - RS256, RS384, RS512, HS256, HS384, HS512, ES256, ES384, or ES512.

workato.jwt_decode( "eyJhbGciO...", "PEM key", \'RS256\') # => {"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"RS256"}}
workato.jwt_decode( "eyJhbGciO...", "PEM key", \'RS512\') # => {"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"RS512"}}
workato.jwt_decode( "eyJhbGciO...", "my$ecretK3y", \'HS256\') # => {"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"HS256"}}

# jwt_encode

Creates a JSON web token (JWT) using one of the following algorithms - RS256, RS384, RS512, HS256, HS384, HS512, ES256, ES384, or ES512. Adds other named parameters to the header, such as kid in the following example:

workato.jwt_encode({ name: "John Doe" }, "PEM key", 'RS256') # => "eyJhbGciO..."
workato.jwt_encode({ name: "John Doe" }, "PEM key", 'RS512', kid: "24668") #=> "eyJ0eXAiO..."
workato.jwt_encode({ name: "John Doe" }, "my$ecretK3y", 'HS256', kid: "24668") #=> "eyJ0eXAiO..."
workato.jwt_encode({ name: "John Doe" }, "my$ecretK3y", 'HS256') #=> "eyJ0eXAiO..."
workato.jwt_encode({ name: "John Doe" }, "ECDSA Key", 'ES256') #=> "eyJhbGciOiJ..."

# last

Returns the last item in a list. Can also be used to return the last n items in a list.

See last (opens new window) method definition.


# ljust

Aligns strings to the left and pads with whitespace or specified pattern until string is the required length.

" test".ljust(10, "*") # " test*****"

See ljust (opens new window) method definition.


# lookup

Lookup a record from your lookup tables defined in Workato.

lookup('States list', 'State code': 'AZ')['State name'] #"Arizona"

See lookup (opens new window) method definition.


# lstrip

Remove white space from the beginning of string.

"     Test     ".lstrip #"Test     "

See lstrip (opens new window) method definition.


# map

Returns a new array after invoking block on each element.


# md5_hexdigest

Creates message digest using the MD5 Message-Digest Algorithm.

"hello".md5_hexdigest #5d41402abc4b2a76b9719d911017c592

# match?

Returns true if a string contains a pattern. Case sensitive.

"Jean Marie".match?(/Marie/) #true

# max_by

Returns the object in enum that gives the maximum value from the given block.

%w(albatross dog horse).max_by { |x| x.length } # albatross

# member?

Alias of include?

See member? (opens new window) method definition.


# merge

Returns a new hash containing merged contents.

See merge (opens new window) method definition.


# minmax

Returns a two element array which contains the minimum and the maximum value in the enumerable.

a = %w(albatross dog horse)
a.minmax    #=> ["albatross", "horse"]
a.minmax { |a, b| a.length <=> b.length }
#=> ["dog", "albatross"]

See minmax (opens new window) method definition.


# minmax_by

Returns a two element array containing the objects in enum that correspond to the minimum and maximum values respectively from the given block.

a = %w(albatross dog horse)
a.minmax_by { |x| x.length }   #=> ["dog", "albatross"]

See minmax_by (opens new window) method definition.


# min_by

Returns the object in enum that gives the minimum value from the given block

a = %w(albatross dog horse)
a.min_by { |x| x.length }   #=> "dog"

See min_by (opens new window) method definition.


# net.lookup

Lookups specified DNS records for a given host.

workato.net.lookup("www.google.com", "A") # => [{"address": "172.253.122.106"}, {"address":"172.253.122.103"}]

Takes in 2 arguments:

name
The resource name such as the domain or host.

Record Type
Only supports "SRV" or "A" DNS record types
______ ## next

Returns the next object in the enumerator, and move the internal position forward.

This is often used in config_fields where you can use next as a way to add a guard clause that checks inputs before the lambda function is executed.

object_definitions: {
  document: {
    fields: lambda do |connection, config_fields, object_definitions|
      next [] if config_fields.blank?
      get("https://www.webmerge.me/api/documents/#{config_fields["document_id"]}/fields").map {
 |field| field.slice("name")
      }
    end
  }
}

See next (opens new window) method definition.


# none?

Passes each element of the collection to the given block. The method returns true if the block never returns true for all elements.

%w{ant bear cat}.none? { |word| word.length == 5 } #=> true

See none? (opens new window) method definition.


# now

Returns timestamp of the moment that the formula was executed, in Pacific time (UTC-8/UTC-7).

now #2017-01-23T14:04:53.365908-08:00
now + 2.days #2017-01-25T14:04:53.365908-08:00

# odd?

Returns true if integer is an odd number. See odd? (opens new window) method definition.


# one?

Passes each element of the collection to the given block. The method returns true if the block returns true exactly once.

[ nil, true, false ].one? #=> true

See one? (opens new window) method definition.


# only

White list a comma-separate of fields.

object_definition["user"].only("id", "name")

# ordinalize

Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.

"1".ordinalize # "1st"

# pack

Packs contents of an array into a binary sequence.

See pack (opens new window) method definition.


# parallel

Accepts an array of requests and allows you to execute them in multiple threads.

batches = (0..200).map do |batch|
  post(url).headers(headers).request_body(payload)
end
results = parallel(batches, threads: 20)

SeeMulti-threaded actions for more information.


# parameterize

Replaces special characters in a string.

"öüâ".parameterize #"oua"

# params

Add parameter to a request.

.params(api_key: "HTB674HJK1")

# parse_json

Works the same way as json.parse.

See parse_json (opens new window) method definition.


# parse_yaml

Parse a YAML string. Supports true, false, nil, numbers, strings, arrays, hashes.

workato.parse_yaml("---\nfoo: bar") # => { "foo" => "bar" }

# payload

Add payload to a request.

.payload(id: "345")

# pbkdf2_hmac_sha1

Create keys of varying bit lengths using a password and a salt. Uses HMAC Sha1.

key128 = workato.pbkdf2_hmac_sha1("password", workato.random_bytes(8))
key192 = workato.pbkdf2_hmac_sha1("password", workato.random_bytes(8), 1000, 24)
key256 = workato.pbkdf2_hmac_sha1("password", workato.random_bytes(8), 1000, 32)

# pluck

Select one or more attributes from an array of objects.

[
  {"id": 1, "name": "David"},
  {"id": 2, "name": "Peter"}
].pluck("id")

Returns [1, 2].


# pluralize

Returns the plural form of the word in the string.

See pluralize (opens new window) method definition.


# pop

Removes the last element from self and returns it, or nil if the array is empty.

If a number n is given, returns an array of the last n elements (or less) and removes it from array.

a = [ "a", "b", "c", "d" ]
a.pop     #=> "d"
a.pop(2)  #=> ["b", "c"]
a  #=> ["a"]

See pop (opens new window) method definition.


# presence

Returns the value if present. Otherwise returns nil.

nil.presence #nil
"".presence #nil
0.presence #0

See presence (opens new window) method definition.


# present?

Returns true if the field has a value. False otherwise.

nil.present? #false
"".present? #false
0.present? #true

See present? (opens new window) method definition.


# puts

Ruby version of console.log or stdout, not the same as the put method.

Any outputs using the puts method shows up in the console log when testing in the code editor. Use this to aid in your debugging.


# rand

Random number between 0 and 1.


# random_bytes

Generates a specified number of random bytes, workato.random_bytes(8)


# reduce

Combines all elements of enum by applying a binary operation, specified by a block or a symbol that names a method or operator.

(5..10).reduce { |sum, n| sum + n } # 45

See reduce (opens new window) method definition.


# reinvoke_after

Used in multistep actions that work with asynchronous APIs. Calling this method cause the job to pause for a specific interval before reinvoking the original execute lambda it is called in. Accepts seconds to denote how long the job should pause for, and continue which allows the job to be reinvoke with additional context.

reinvoke_after(
  seconds: step_time, 
  continue: { 
    current_step: current_step + 1, 
    jobid: response['jobReference']['jobId'] 
  }
)

SeeMultistep actions for more information.


# reject

Selectively returns elements for which the block returns false. Similar but opposite of select.

See reject (opens new window) method definition.


# render_yaml

Render an object into a YAML string.

workato.render_yaml({ "foo" => "bar" }) # => "---\nfoo: bar\n"

# response_format_json

Expect response in json format.


# response_format_raw

Expect response in raw format. This can be chained after HTTP actions that expect binary data (such as PDFs and images) as responses.


# response_format_xml

Expect response in XML format. Takes in 1 argument.

strip_response_namespaces
Strips namespaces from XML responses.

# request_format_json

Convert request to json format.


# request_format_multipart_form

Convert request to multipart_form format.


# request_format_www_form_urlencoded

Convert request to url-encoded format.


# request_format_xml

Convert request to XML format.

Takes 2 arguments,

root_element_name
Adds a root element tag to your outgoing XML payload.
namespaces
Adds additional tags to your payload for namespaces

# required

Make a comma-separate list of fields required.

object_definition["user"].required("id", "created_at")

# reverse

Reverse string or array.


# reverse_each

Builds a temporary array and traverses that array in reverse order.

See reverse_each (opens new window) method definition.


# rjust

Aligns string to right and pads with whitespace or pattern until string is specified length.

"test".rjust(5) #" test"
"test".rjust(10, "*!") #"*!*!* test"

See rjust (opens new window) method definition.


# round

Round the number by regular rounding rules.

11.99.round #12
11.555.round(2) #11.56

See round (opens new window) method definition.


# rsa_sha256

Creates a RS256 signature (SHA256 hash signed with an RSA key)

input['StringToSign'].rsa_sha256(rsa_private_key).base64

# rsa_sha512

Creates a RS512 signature (SHA512 hash signed with an RSA key).

input['StringToSign'].rsa_sha512(rsa_private_key).base64

# rstrip

Remove white space from the end of string.

" Test ".rstrip #" Test"

See rstrip (opens new window) method definition.


# scan

Scans the string for a matching pattern.

"Thu, 01/23/2014".scan(/\d+/).join("-") #01-23-2014

See scan (opens new window) method definition.


# scrub

If the string is invalid byte sequence then replace invalid bytes with given replacement character, else returns self.

"abc\u3042\x81".scrub("*") # "abc\u3042*"

See scrub (opens new window) method definition.


# select

Selectively returns elements for which the block returns true.

See select (opens new window) method definition.


# SHA1

Encrypts a given string using the SHA1 encryption algorithm.

"abcdef".sha1.encode_base64 # "H4rBDyPFtbwRZ72oS4M+XAV6d9I="

See SHA1 (opens new window) method definition.


# singularize

The reverse of pluralize, returns the singular form of a word in a string.

'posts'.singularize # => "post"

See singularize (opens new window) method definition.


# slice

Returns a substring of a given string, as defined by start indexes and length.

"Jean Marie\.slice(0,3) #"Jea"

See slice (opens new window) method definition.


# slice_after

Slices an array after a specific value.

["a", "b", "c"].slice_after("b").to_a # [["a", "b"], ["c"]]

See slice_after (opens new window) method definition.


# slice_before

Slices an array before a specific value

["a", "b", "c"].slice_before("b").to_a # [["a"], ["b", "c"]]

See slice_before (opens new window) method definition.


# slice_when

Creates an enumerator for each chunked elements.

[1,2,4,9,10,11].slice_when { |i,j| i+1 != j}.to_a # [[1, 2], [4], [9, 10, 11]]

See slice_when (opens new window) method definition.


# smart_join

Join array to string. Removes empty and nil values. Trims the white space before joining.

[nil, " ", " Hello ", "   World "].smart_join(" ") #Hello World

See smart_join method definition.


# sort

Sort function returning new sorted array.

See sort (opens new window) method definition.


# sort_by

Sort function returning self.

See sort_by (opens new window) method definition.


# split

Split string into an array by using defined pattern as delimiter.

"Split string".split() #["Split", "string"]
"Split string".split("t") #["Spli", " s", "ring"]

See split (opens new window) method definition.


# stream.out

Used in file stream producing actions that work with any of Workato's file streaming enabled connectors. Calling this method allows you to specify a streaming callback that will be invoked when a downstream action downloads the file.

workato.stream.out("download_file", { file_id: file_id })

See file streaming for more information.


# stream.in (opens new window)

Used in file stream consuming actions that work with any of Workato's file streaming enabled connectors. Calling this method allows you to specify a code block that can utilize a file stream to upload a file in chunks.

This argument takes in 3 arguments:

  1. the first positional argument being the file contents from a previous action
  2. from which is used to override the default offset of 0. This will be used in implementing multi-step streaming
  3. frame_size which is used to override the size requested from a stream producer.
workato.stream.in(input["file"], from: previous_offset, frame_size: required_frame_size) do |chunk, starting_byte_range, ending_byte_range, eof, next_starting_byte_range| 
  put("/file/#{input['file_id']}").
    headers("Content-Range": "byte #{starting_byte_range}-#{ending_byte_range}/*").
    request_body(chunk).
    presence
end

See file streaming for more information.


# strip

Strip white spaces from the beginning and the end of string.

"    This is an example   ".strip #"This is an example"

See strip (opens new window) method definition.


# strip_tags

Strip html tags from the string.

"<html><body>Double bubble</body></html>".strip_tags #"Double bubble"

# strftime

Format date or time using %-placeholders.


# sub

Substitute the first occurrence of a pattern with value.

"Mean Marie".sub(/M/, "J") #"Jean Marie"
"Hello".sub(/[aeiou]/, "\*") #"H*llo"

# suspend

This method is used in Wait for resume actions. These actions work with external systems that can send an API request when a long running process is complete. Calling this method suspends the job until Workato receives a corresponding request to its developer API, or until the specified suspension time expires.

suspend(
  continue: { 
    "state" => "suspended", 
    "url" => input['url']
  }, 
  expires_at: 10.minutes.from_now
)

  • continue: This hash is passed to the before_suspend, before_resume, and before_timeout_resume lambdas.
  • expires_at: This is the time in PST that the job waits for a request to resume. After this time, the job continues with a timeout call. The maximum timeout is 60 days.

# take

Returns first N elements from an array.

[1, 2, 3, 4, 5, 0].take(3) #=> [1, 2, 3]

See take (opens new window) method definition.


# take_while

Passes elements to the block until the block returns nil or false, then stops iterating and returns an array of all prior elements.

[1, 2, 3, 4, 5, 0].take_while { |i| i < 3 } #=> [1, 2]

See take_while (opens new window) method definition.


# tap

Yields x to the block, and then returns x.

The tap method is often used for transformation. For example, we use the tap method below to transform a webhook's payload. If a webhook payload is delivered in this format.

{
  "id" => {"value" => 1},
  "name" => {"value" => 2}
}

You can use tap to transform it into a more user friendly JSON.

webhook_notification: lambda do |input, payload|
  payload.tap do |output|
    output.each { |k, v| output[k] = v["value"] }
  end
end

The final JSON will look like this {"id"=>1, "name"=>2}

See tap (opens new window) method definition.


# tls_client_cert

Allows you to dictate the TLS keys, TLS client and intermediate certificates we should use in the request. Can be used by chaining it in a single request or used generally in the apply block.

get("https://www.exampleapi.com").
  tls_client_cert(
    certificate: connection['ssl_client_cert'],
    key: connection['ssl_client_key'],
    passphrase: connection['ssl_key_passphrase'],
    intermediates: connection['client_intermediate_certs'] # pass array if there are multiple intermediate certs
  )
apply: lambda do |connection|
  tls_client_cert(
    certificate: connection['ssl_client_cert'],
    key: connection['ssl_client_key'],
    passphrase: connection['ssl_key_passphrase'],
    intermediates: connection['client_intermediate_certs'] # pass array if there are multiple intermediate certs
  )
end

# tls_server_certs

Allows you to dictate the TLS server certificates we should accept during the SSL handshake process. This is useful for self-signed or untrusted root CA certificates. Can be used by chaining it in a single request or used generally in the apply block.

get("https://www.exampleapi.com").
  tls_server_certs(
    certificates: [connection['server_ca_cert']], #additional intermediate server certificates can be given.
    strict: false # Set to true to only allow requests from the given server CA cert.
  )
apply: lambda do |connection|
  tls_server_certs(
    certificates: [connection['server_ca_cert']], #additional intermediate server certificates can be given.
    strict: false # Set to true to only allow requests from the given server CA cert.
  )
end

# to_currency

Convert to currency string.

1234567890.50.to_currency    # $1,234,567,890.50

# to_currency_code

Convert alpha-2/3 country code or country name to ISO4217 currency code.

"India".to_currency_code #INR

# to_currency_name

Convert alpha-2/3 country code or country name to ISO4217 currency name.

"India".to_currency_name #Rupees

# to_currency_symbol

Convert alpha-2/3 country code or country name to ISO4217 currency symbol.

"India".to_currency_symbol # ₨

# to_country_alpha2

Convert alpha-3 country code or country name to alpha2 country code.

"India".to_country_alpha2 #IN
"IND".to_country_alpha2 #IN

# to_country_alpha3

Convert alpha-2 country code or country name to alpha3 country code.

"Australia".to_country_alpha2 #AUS
"AU".to_country_alpha2 #AUS

# to_country_name

Convert alpha-2/3 country code or country name to ISO3166 country name.

"GB".to_country_name #United Kingdom
"GBR".to_country_name #United Kingdom

# to_country_number

Convert alpha-2/3 country code or country name to ISO3166 country numeric code.

"India".to_country_number #356

# to_date

Convert string or timestamp to date. Can be formatted.

"12/24/2014 10:30 PM".to_date(format: "MM/DD/YYYY")

# to_f

Convert to float. Numbers will be rounded up or down according to regular rounding rules.

45.to_f #45.0

# to_hex

Converts binary string to its hex representation.


# to_i

Convert to integer. Decimals are always rounded down.

45.67.to_i #45

# to_json

Converts hash or array into JSON string.

{"a" => "c d", "2" => "3"}.to_json #"{"a":"c d","2":"3"}"

# to_phone

Convert string or number to a formatted phone number.

5551234.to_phone # 555-1234
1235551234.to_phone(area_code: true) # (123) 555-1234
1235551234.to_phone(delimiter: " ") # 123 555 1234
1235551234.to_phone(country_code: 1) # +1-123-555-1234

# to_param

Returns a string representation for use as a URL query string.

{name: 'Jake', age: '22'}.to_param #name=Jake&age=22

# to_s

Convert to string.

45.67.to_s #"45.67"

# to_state_code

Convert state name to code.

"California".to_state_code #CA

# to_state_name

Convert state code to name.

"CA".to_state_name #"CALIFORNIA"

# to_time

Convert string or date to timestamp.

"2014-11-21".to_time #2014-11-21 00:00:00 +0000

# to_xml

Converts hash or array into XML string.

{"name" => "Ken"}.to_xml(root: "user") # &#60;user&#62;&#60;name&#62;Ken&#60;/name&#62;&#60;/user&#62;

# today

Date today. Returns the date of the moment that the formula was executed, in Pacific time (UTC-8/UTC-7).

today #2016-07-13
today + 2.days #2016-07-15

# transliterate

Replaces non-ASCII characters with an ASCII approximation, or if none exists, a replacement character which defaults to '?'

'Chloé'.transliterate #Chloe

# upcase

Convert string to upper case.

"Convert to UPCASE".upcase #"CONVERT TO UPCASE"

# uniq

Return unique items in an array.

[1.0, 1.5, 1.0].uniq #[1.0, 1.5]

# unpack

Decodes a string into an array.

See unpack (opens new window) method definition.


# utc

Convert Time to UTC timezone.

See utc (opens new window) method definition.


# uuid

Creates a UUID. Useful when sending strings that are unique in a request.

workato.uuid #c52d735a-aee4-4d44-ba1e-bcfa3734f553 => "eyJhbGciO..."

# where

Filter array by given condition.


# while

While loop statement.

See ruby_loops (opens new window) method definition.


# wday

Returns day of the week where 1 is Monday


# wrap

Wraps its argument in an array unless it is already an array

The wrap method is often used in the execute block of the while loop statement.

execute: lambda do |connection, input|
{
    accounts: Array.wrap(get("/accounts", input)["records"])
  }
end

This ensures that the accounts variable is always an array in spite of whatever return. At Workato, we often use this to guard against unexpected returns from the various APIs we work with.

See wrap (opens new window) method definition.


# yday

Returns day of the year.

"2016-07-19 10:45:30".to_time.yday #201

# yweek

Returns week of the year.

"2016-07-19 10:45:30".to_time.yweek #29

# zip

Used as a method called by arrays. Converts any arguments to arrays, then merges elements of self with corresponding elements from each argument.

See zip (opens new window) method definition.


Last updated: 4/2/2024, 11:42:24 PM

On this page