Module: Ruby::Rego::Builtins::Comparisons::Casts

Defined in:
lib/ruby/rego/builtins/comparisons/casts.rb

Overview

Casting and conversion helpers.

Class Method Summary collapse

Class Method Details

.cast_array(value) ⇒ Ruby::Rego::ArrayValue

Parameters:

Returns:



52
53
54
55
56
57
# File 'lib/ruby/rego/builtins/comparisons/casts.rb', line 52

def self.cast_array(value)
  return value if value.is_a?(ArrayValue)

  Base.assert_type(value, expected: [ArrayValue, SetValue], context: "cast_array")
  ArrayValue.new(value.value.to_a)
end

.cast_boolean(value) ⇒ Ruby::Rego::BooleanValue

Parameters:

Returns:



40
41
42
43
44
45
46
47
48
# File 'lib/ruby/rego/builtins/comparisons/casts.rb', line 40

def self.cast_boolean(value)
  return value if value.is_a?(BooleanValue)

  raw = value.value
  return boolean_from_string(raw) if value.is_a?(StringValue)
  return boolean_from_number(raw) if value.is_a?(NumberValue)

  raise_type_mismatch("cast_boolean", "boolean, string, or number", value.class.name)
end

.cast_object(value) ⇒ Ruby::Rego::ObjectValue

Parameters:

Returns:



70
71
72
73
74
# File 'lib/ruby/rego/builtins/comparisons/casts.rb', line 70

def self.cast_object(value)
  object = value # @type var object: ObjectValue
  Base.assert_type(object, expected: ObjectValue, context: "cast_object")
  object
end

.cast_set(value) ⇒ Ruby::Rego::SetValue

Parameters:

Returns:



61
62
63
64
65
66
# File 'lib/ruby/rego/builtins/comparisons/casts.rb', line 61

def self.cast_set(value)
  return value if value.is_a?(SetValue)

  Base.assert_type(value, expected: [SetValue, ArrayValue], context: "cast_set")
  SetValue.new(value.value)
end

.cast_string(value) ⇒ Ruby::Rego::StringValue

Parameters:

Returns:



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ruby/rego/builtins/comparisons/casts.rb', line 25

def self.cast_string(value)
  Base.assert_type(
    value,
    expected: [StringValue, NumberValue, BooleanValue, NullValue],
    context: "cast_string"
  )

  return value if value.is_a?(StringValue)
  return StringValue.new("null") if value.is_a?(NullValue)

  StringValue.new(Base.to_ruby(value).to_s)
end

.to_number(value) ⇒ Ruby::Rego::NumberValue

Parameters:

Returns:



15
16
17
18
19
20
21
# File 'lib/ruby/rego/builtins/comparisons/casts.rb', line 15

def self.to_number(value)
  raw = value.value
  return NumberValue.new(raw) if value.is_a?(NumberValue)
  return NumberValue.new(number_from_string(raw)) if value.is_a?(StringValue)

  raise_type_mismatch("to_number", "number or string", value.class.name)
end