blob: 183c5179e920e45054e9893e531af5ca5af76ef4 [file] [log] [blame] [view]
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-->
## Creating and invoking Ruby actions
The process of creating Ruby actions is similar to that of [other actions](actions.md#the-basics).
The following sections guide you through creating and invoking a single Ruby action,
and demonstrate how to bundle multiple Ruby files and third party dependencies.
Ruby actions are executed using Ruby 2.5. To use this runtime, specify the `wsk` CLI parameter
`--kind ruby:2.5` when creating or updating an action. This is the default when creating an action
with file that has a `.rb` extension.
An action is simply a top-level Ruby method. For example, create a file called `hello.rb`
with the following source code:
```ruby
def main(args)
name = args["name"] || "stranger"
greeting = "Hello #{name}!"
puts greeting
{ "greeting" => greeting }
end
```
An action supports not only a JSON object but also a JSON array as a return value.
It would be a simple example that uses an array as a return value:
```ruby
def main(args)
nums = Array["a","b"]
nums
end
```
You can also create a sequence action with actions accepting an array param and returning an array result.
You can easily figure out the parameters with the following example:
```ruby
def main(args)
args
end
```
Ruby actions always consume a Hash and return a Hash.
The entry method for the action is `main` by default but may be specified explicitly
when creating the action with the `wsk` CLI using `--main`, as with any other action type.
You can create an OpenWhisk action called `hello_ruby` from this function as follows:
```
wsk action create hello_ruby hello.rb
```
The CLI automatically infers the type of the action from the source file extension.
For `.rb` source files, the action runs using a Ruby 2.5 runtime.
Action invocation is the same for Ruby actions as it is for [any other action](actions.md#the-basics).
```
wsk action invoke --result hello_ruby --param name World
```
```json
{
"greeting": "Hello World!"
}
```
Find out more about parameters in the [Working with parameters](./parameters.md) section.
## Packaging Ruby actions in zip files
You can package a Ruby action along with other files and dependent packages in a zip file.
The filename of the source file containing the entry point (e.g., `main`) must be `main.rb`.
For example, to create an action that includes a second file called `helper.rb`,
first create an archive containing your source files:
```bash
zip -r hello_ruby.zip main.rb helper.rb
```
and then create the action:
```bash
wsk action create hello_ruby --kind ruby:2.5 hello_ruby.zip
```
A few Ruby gems such as `mechanize` and `jwt` are available in addition to the default and bundled gems.
You can use arbitrary gems so long as you use zipped actions to package all the dependencies.