[ruby-talk:444664] [ANN} cel 0.3.0 released

cel 0.3.0 has been released. cel is a pure Ruby implementation of Google Common Expression Language, https://opensource.google/projects/cel. The Common Expression Language (CEL) implements common semantics for expression evaluation, enabling different applications to more easily interoperate. ```ruby require "cel" # set the environment env = Cel::Environment.new(name: :string, group: :string) # parse ast = env.compile('name.startsWith("/groups/" + group)') # check prg = env.program(ast) # evaluate prg.evaluate(name: Cel::String.new("/groups/acme.co/documents/secret-stuff "), group: Cel::String.new("acme.co")) #=> true # or do it all in one go env.evaluate('name.startsWith("/groups/" + group)', name: Cel::String.new("/groups/acme.co/documents/secret-stuff"), group: Cel::String.new("acme.co") ) ``` Here are the updates since the last release: # [0.3.0] - 2025-06-12 ### Features * Integration with `google-protobuf` (optional dependency) by evaluating messages to protobuf stubs, and making them an integral part of the CEL type set. Some examples: * auto-conversion of protobuf wrapper types. * enums support ### Improvements * More correct parsing, checking and evaluation of CEL expressions, thanks to the issues identified by conformance tests. ### Chore * Incorporation of the oficial cel-spec conformance tests into the test suite, to ensure feature correctness. * `bigdecimal` added as explicit dependency. ## [0.2.3] - 2023-09-19 ### Bugfixes * `cel` is loadable without the need to install `google/protobuf` again. + expressions containing te operator `<=` were failing while parsing. ## [0.2.2] - 2023-08-17 * Reimplements `Cel::Literal#==` in a simpler way, to avoid several comparison issues arising from the previous implementation. * fix initialization of `Cel::Duration` and `Cel::Timestamp` from string notation. * fix protobuf-to-cel parsing of negative literals. * more consistent usage of Cel types internally. * fix condition clause evaluation. ## [0.2.1] - 2023-07-26 ### Improvements Collection type declarations are now better supported, i.e. declaring "an array of strings" is now possible: ```ruby Cel::Types[:list, :string] # array of strings Cel::Environment.new( names: Cel::Types[:list, :string], owned_by: Cel::Types[:map, :string] # hash map of string keys ) ``` ### Bugfixes Collections passed as variables of an expression are now correctly cast to Cel types: ```ruby env.evaluate("a", { a: [1, 2, 3] }) #=> now returns a Cel::List ``` Conversely, custom functions now expose ruby types in the blocks, instead of its Cel counterparts: ```ruby func = Cel::Function(:list, :list, return_type: :list) do |a, b| # a is now a ruby array, b as well a & b # function returns a ruby array, will be converted to a Cel::List for use in the expression end ```
participants (1)
-
Tiago Cardoso