Mechanic filters
This page defines filters that are unique to Mechanic Liquid. Mechanic also supports many filters from Shopify Liquid.
Liquid filters should not be confused with event filters, which are used to conditionally ignore incoming events.
Data filters
browser
This filter converts a browser user agent string into an object that represents the browser itself. Data from Browserscope is used to match user agents.
csv, parse_csv
Supports converting a two-dimensional array to a CSV string, and back again.
The parse_csv filter accepts a "headers" option; when set to true
, this filter will interpret the first line of input as containing headers for the CSV table, and will return an array of hashes whose keys map to items in that header row.
date, parse_date
Mechanic's date filter is based on Shopify's date filter. Mechanic's implementation has all the functionality of Shopify's. It accepts a date format, using the same format as Ruby's strftime. (Sites like strfti.me offer convenient references for this format.) Under the hood, this filter uses ActiveSupport::TimeZone#strptime, and inherits its behavior with regard to missing upper components.
Choosing a timezone
Mechanic's date filter supports a tz
option, which accepts a timezone name from the TZ database. If given, the resulting time string will be in the specified timezone. If this option is not provided, the store's local timezone will be used instead.
Using the current time
This filter also accepts the special value "now"
, and values offset from now, as in "now + 5 days"
or "now - 5 weeks"
. In this way, the filter supports simple date math. Note that durations are calculated using variable duration lengths, given the naturally varying length of specific days, weeks, months, and years, given DST and other calendar variances, all informed by the store's timezone. This math is backed by ActiveSupport::TimeWithZone#+. An example, quoting from that documentation: "a time + 24.hours will advance exactly 24 hours, while a time + 1.day will advance 23-25 hours, depending on the day".
Parsing dates
Use parse_date to parse a date string, when its exact format is known. This filter is useful for strings that contain an ambiguous date value, like "01/01/01"
.
This filter returns an ISO8601 string, representing the parsed date value in the store's local timezone. If the supplied date string cannot be parsed successfully, the filter will return nil.
gzip, gunzip
These filters allow you to compress and decompress strings, using gzip compression.
In general, all strings passing through Mechanic must be UTF-8, and must ultimately be valid when represented as JSON. However, because gzip'd content may not be UTF-8, and because it may be important to preserve the original encoding, the gunzip filter supports a force_utf8: false
option. Use this when you're certain the original encoding must be preserved, if you ultimately intend to pass along the string in a JSON-friendly representation. (For example, you might gunzip a value, and then use the base64 filter to represent it safely within JSON.)
graphql_arguments
Useful for preparing key-value pairs of GraphQL query or mutation arguments.
Across the documentation and task library, you'll frequently see json
used for serializing argument values. Users have reported some rare cases where this filter is insufficient, and where graphql_arguments
does the trick instead.
graphql_arguments
is typically used for rendering GraphQL values into the final GraphQL query string itself. Instead, consider extracting your values as GraphQL variables. This approach can result in more reusable query code.
To try this using a Shopify action, use the GraphQL with variables syntax.
To try this using the shopify filter, use the variables argument.
This results in a GraphQL Shopify action containing the following GraphQL:
For a more complex example, see Set product or variant metafields values in bulk from the task library.
json, parse_json
Allows converting objects to their JSON representations, and parsing that JSON into hashes.
The parse_json filter raises an error when invalid JSON. To ignore parse errors, and to return null when an error is encountered, add silent: true
to the filter's options:
jsonl, parse_jsonl
Allows for rendering an iterable object (i.e. an array) as a series of JSON lines, separated by simple newlines.
The parse_jsonl filter can be used to parse a series of JSON strings, each on their own line, into an array of hashes. Useful when preparing stub data for bulk operations.
The parse_jsonl filter raises an error when invalid JSONL is received.
parse_xml
Use this filter to parse an XML string. (Under the hood, this filter calls Hash::from_xml.) Useful for processing output from third-party APIs, either by responding to "http" actions, or by parsing content from inbound webhooks.
shopify
This filter accepts a GraphQL query string, sends it to Shopify, and returns the full response â including "data"
and "errors"
.
Use Shopify's GraphiQL query builder to quickly and precisely assemble your queries.
GraphQL variables
This filter also supports GraphQL variables, via an optional named argument called variables
.
Variables can be a useful part of making queries reusable within a task, or for working around Shopify's 50,000 character limit for GraphQL queries.
String filters
e164
This filter accepts a phone number â country code is required! â and outputs it in standard E.164 format. If the number does not appear valid, the filter returns nil
.
match
Use this filter to match a string with a Ruby-compatible regular expression pattern (see Regexp).
This filter returns the entire matched string (i.e. MatchData#to_s). Use the "captures" or "named_captures" lookups to receive an array or hash of captures, respectively (i.e. MatchData#captures, MatchData#named_captures).
This filter only returns the first match found. To find all available matches in a string, use scan.
hmac_sha512
Works like hmac_sha256 from Shopify Liquid, but uses SHA-512 instead.
rsa_sha256, rsa_sha512
Accepts string input, given an RSA PEM key string as a filter option.
This filter is useful for generating JSON Web Signatures!
scan
Use this filter to find all available matches in a string, using a Ruby-compatible regular expression pattern (see Regexp).
This filter returns an array of matches, consisting of each matched string (i.e. MatchData#to_s). Use the "captures" or "named_captures" lookups on individual matches to receive an array or hash of captures, respectively (i.e. MatchData#captures, MatchData#named_captures).
This filter returns an array of matches. To only find the first match, use match.
sha512
Works like sha256 from Shopify Liquid, but uses SHA-512 instead.
unindent
Use this filter on strings to remove indentation from strings.
Math filters
currency
Formats a number (given as an integer, float, or string) as currency. Called with no arguments, this filter uses the store's primary currency and default locale.
A three-character ISO currency code may be specified as the first argument; currency support is drawn from the money project. The locale may be overridden as a named option; locale support is drawn from rails-i18n.
Note that this filter does not automatically append the currency ISO code (e.g. it will not generate output resembling "âŦ100,000.00 EUR"). To add the ISO code manually, use one of these examples:
Array filters
in_groups
This filter is an implementation of Array#in_groups. It accepts an array, and an integer count, and â optionally â a "fill_with" option.
in_groups_of
This filter is an implementation of Array#in_groups_of. It accepts an array, and an integer count, and â optionally â a "fill_with" option.
This filter is particularly useful when performing work in batches, by making it easy to split an array of potentially large size into smaller pieces of controlled size.
index_by
This filter accepts the name of an object property or attribute, and returns a hash that whose values are every element in the array, keyed by every element's corresponding property or attribute.
push
This filter appends any number of arguments onto the provided array, returning a new array, leaving the original unmodified.
sample
This filter can be used on any array. Used without any arguments, it returns a single random element from the array. Provide an integer argument to return another array of that size, containing a random subset of the input array.
slice
When applied to an array, this filter accepts an integer offset, and an optional integer length (defaulting to 1). If the length is 1, it returns the single element found at that index of the input array. Otherwise, it returns a slice of the array, beginning at the provided index, having the provided length.
Negative offsets begin counting from the end of the array.
sort_naturally
Sorts an array uses the human-friendly sort order defined by naturally. Accepts a single optional parameter, specifying an attribute to sort.
This filter complements Shopify Liquid's sort and sort_natural filters. Choose your sort filter intentionally: machine audiences are typically happier with "sort", and human audiences are typically happier with "sort_naturally".
unshift
This filter prepends any number of arguments onto the provided array, returning a new array, leaving the original unmodified.
Hash filters
compact
When applied to a hash, this filter returns a new hash which omits all keys having nil values.
except
This filter accepts one or more string arguments, corresponding to keys that should be left out of the output. The filter returns a new hash, containing all the key/value pairs of the original hash except those keys named as arguments.
keys
Returns an array of keys found in the supplied hash.
slice
When applied to a hash, the slice filter accepts one or more string arguments, corresponding to keys that the hash may contain. This filter will then return a new hash, containing only matching key/value pairs from the original hash.
values
Returns an array of values found in the supplied hash.
Last updated