Project

feelin

0.0
The project is in a healthy, maintained state
This gem uses embed V8 JavaScript engine and feelin JavaScript library to parse and evaluate DMN FEEL expressions
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

= 11.1.3
= 3.12.0

Runtime

~> 0.21
 Project Readme

Ruby feelin

This gem uses embed V8 JavaScript engine and feelin JavaScript library to parse and evaluate DMN FEEL expressions. Performance of this approach for executing JS in Ruby is comparable with V8 native performance.

Install

gem 'feelin'

Usage

Evaluate

# without context
FEELIN.evaluate('for a in [1, 2, 3] return a * 2') # [ 2, 4, 6 ]

# with context
FEELIN.evaluate("Mike's daughter.name", { 'Mike\'s daughter.name' => 'Lisa' }) # Lisa

Unary tests

# without context
FEELIN.unary_test('1', 1) # true

# with context
FEELIN.unary_test('[1..end]', 1, { 'end' => 10 }) # true

Custom functions

FEELIN.add_function('rates', proc { [10, 20] })
FEELIN.evaluate('every rate in rates() satisfies rate < 10') # false

Development

The gem embeds the feelin JavaScript library, pre-bundled into a single file that is loaded into the V8 context at runtime. The JavaScript sources live in lib/feelin/js.

Updating the JavaScript dependencies

cd lib/feelin/js
npm install                  # install the pinned versions
npm install feelin@<version> # bump feelin to a specific version

Building the bundle

feelin is distributed as an ES module, so it is bundled ahead of time with esbuild into lib/feelin/js/dist/feelin.js — an IIFE that exposes the feelin API on the global feel. The entry point is lib/feelin/js/entry.js.

cd lib/feelin/js
npm run build

Commit the regenerated dist/feelin.js together with the updated package.json / package-lock.json.

Running the tests

bundle exec rspec

Versioning policy

Because this library is a wrapper - it is released with the same major/minor version numbers as the underlying feelin library