Writing import modules with Ruby
Here's an example of a Ruby import module. Let's call
this file ruby_hello.rb:
#!/usr/bin/env ruby
require 'json'
input = JSON.parse( gets )
msg = 'hello ' + input['quux'] + ' from ruby'
puts msg
puts JSON.generate( { ENV['CLARIVE_RETURN'] => { "myvar" => { "msg" => msg } } } )
Warning
Don't forget to apply the execute flag +x to your import modules.
Clarive rules can only invoke modules that are executable.
Make sure that the shebang #! definition points to a valid
binary in the docker container image that will be used with
your module.
To test your Ruby import module from the command line, try the following command:
echo '{ "quux": "worlds" }' | CLARIVE_RETURN=1234 ./ruby_hello.rb
If everything went well, the following output should be shown.
hello worlds from ruby
{"1234":{"myvar":{"msg":"hello worlds from ruby"}}}
Using Ruby imports in your rulebook¶
To use a Ruby module you have to first check it into a Git repository managed by Clarive.
Let's suppose there is a project called MyProject set up in your system, and
that the project has a Git repository called MyRepo. Therefore the path to your
rulebook and module would be:
/MyProject/MyRepo/.clarive.yml
/MyProject/MyRepo/.clarive/imports/ruby_hello.rb
Now in your rulebook import the Ruby file with the import: directive.
You can try this using the the REPL.
image: ruby
workspace:
- MyProject/MyRepo
import:
- /MyProject/MyRepo/.clarive/imports/
do:
- echo: "and now for something completely different:"
- ruby_hello:
quux: "world"