Module: ZenRuby

Extended by:
FFI::Library
Defined in:
lib/zen-engine-ruby.rb,
lib/zen-engine-ruby/version.rb

Defined Under Namespace

Modules: LibC Classes: Engine, Result, ZenCustomNodeResult, ZenDecisionLoaderResult, ZenDecisionResult, ZenEngineEvaluationOptions, ZenResult_ZenDecisionStruct, ZenResult_c_char, ZenResult_c_int

Constant Summary collapse

VERSION =
"0.0.2"

Class Method Summary collapse

Class Method Details

.evaluate_expression(expression, context) ⇒ Object



285
286
287
288
# File 'lib/zen-engine-ruby.rb', line 285

def self.evaluate_expression(expression, context)
  raw_result = ZenRuby.zen_evaluate_expression(expression, context.to_json)
  ZenRuby::Result.from_raw_result(raw_result)
end

.evaluate_expression!(expression, context) ⇒ Object



290
291
292
# File 'lib/zen-engine-ruby.rb', line 290

def self.evaluate_expression!(expression, context)
  ZenRuby.unwrap_result!(evaluate_expression(expression, context))
end

.evaluate_unary_expression(expression, context) ⇒ Object



294
295
296
297
298
299
300
301
302
# File 'lib/zen-engine-ruby.rb', line 294

def self.evaluate_unary_expression(expression, context)
  raw_result = ZenRuby.zen_evaluate_unary_expression(expression, context.to_json)
  if raw_result[:error] == 0
    value = raw_result[:result].read(:int)
    ZenRuby::Result.new(value == 1, false, 0, nil)
  else
    ZenRuby::Result.new(nil, true, raw_result[:error], raw_result[:details].read_string)
  end
end

.evaluate_unary_expression!(expression, context) ⇒ Object



304
305
306
# File 'lib/zen-engine-ruby.rb', line 304

def self.evaluate_unary_expression!(expression, context)
  ZenRuby.unwrap_result!(evaluate_unary_expression(expression, context))
end

.find_library_pathObject

Determine platform-specific library name and path



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/zen-engine-ruby.rb', line 15

def self.find_library_path
  os = case RbConfig::CONFIG['host_os']
  when /darwin|mac os/i
    'darwin'
  when /linux/i
    'linux'
  when /mswin|mingw|windows/i
    'windows'
  else
    raise "Unsupported operating system: #{RbConfig::CONFIG['host_os']}"
  end

  arch = case RbConfig::CONFIG['host_cpu']
  when /arm64|aarch64/i
    'arm64'
  when /x86_64|amd64/i
    'amd64'
  else
    raise "Unsupported architecture: #{RbConfig::CONFIG['host_cpu']}"
  end

  extension = os == 'windows' ? 'dll' : (os == 'darwin' ? 'dylib' : 'so')
  lib_name = "libzen_ffi.#{extension}"
  
  # Get the gem's vendor path
  gem_spec = Gem::Specification.find_by_name('zen-engine-ruby')
  lib_path = File.join(gem_spec.gem_dir, 'vendor', "#{os}_#{arch}", lib_name)
  
  unless File.exist?(lib_path)
    raise "Library not found for #{os}_#{arch} platform at #{lib_path}"
  end
  
  lib_path
end

.render_template(template, context) ⇒ Object



308
309
310
311
# File 'lib/zen-engine-ruby.rb', line 308

def self.render_template(template, context)
  raw_result = ZenRuby.zen_evaluate_template(template, context.to_json)
  ZenRuby::Result.from_raw_result(raw_result)
end

.render_template!(template, context) ⇒ Object



313
314
315
# File 'lib/zen-engine-ruby.rb', line 313

def self.render_template!(template, context)
  ZenRuby.unwrap_result!(render_template(template, context))
end

.unwrap_result!(result) ⇒ Object



280
281
282
283
# File 'lib/zen-engine-ruby.rb', line 280

def self.unwrap_result!(result)
  raise "Error evaluating: #{result.error_code} #{result.details}" if result.error
  result.result
end