Class: Ruby::Rego::Value

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby/rego/value.rb

Overview

Base class for Rego values.

Constant Summary collapse

TYPE_NAME =
"value"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value = nil) ⇒ Value

Create a value wrapper.

Parameters:

  • value (Object) (defaults to: nil)

    underlying value



17
18
19
# File 'lib/ruby/rego/value.rb', line 17

def initialize(value = nil)
  @value = value
end

Instance Attribute Details

#valueObject (readonly)

The wrapped Ruby value.

Returns:

  • (Object)


24
25
26
# File 'lib/ruby/rego/value.rb', line 24

def value
  @value
end

Class Method Details

.from_ruby(value) ⇒ Value

Coerce Ruby values into Rego values.

Parameters:

  • value (Object)

    value to convert

Returns:

  • (Value)

    converted value

Raises:

  • (ArgumentError)


92
93
94
95
96
97
98
99
100
# File 'lib/ruby/rego/value.rb', line 92

def self.from_ruby(value)
  return value if value.is_a?(Value)
  return UndefinedValue.new if value.equal?(UndefinedValue::UNDEFINED)

  built_value = build_value(value)
  return built_value if built_value

  raise ArgumentError, "Unsupported value type: #{value.class}"
end

Instance Method Details

#==(other) ⇒ Boolean Also known as: eql?

Compare values by class and underlying Ruby value.

Parameters:

  • other (Object)

Returns:

  • (Boolean)


75
76
77
# File 'lib/ruby/rego/value.rb', line 75

def ==(other)
  other.is_a?(self.class) && other.to_ruby == to_ruby
end

#fetch_reference(_key) ⇒ Value

Resolve a reference on the value.

Parameters:

  • _key (Object)

    reference key

Returns:

  • (Value)

    resolved value or undefined



51
52
53
54
55
# File 'lib/ruby/rego/value.rb', line 51

def fetch_reference(_key)
  return self if undefined?

  UndefinedValue.new
end

#hashInteger

Hash for use in Ruby collections.

Returns:

  • (Integer)


84
85
86
# File 'lib/ruby/rego/value.rb', line 84

def hash
  [self.class.name, to_ruby].hash
end

#object_keyObject

Return a normalized object key representation.

Returns:

  • (Object)


67
68
69
# File 'lib/ruby/rego/value.rb', line 67

def object_key
  to_ruby
end

#to_rubyObject

Convert the value back to Ruby.

Returns:

  • (Object)


36
37
38
# File 'lib/ruby/rego/value.rb', line 36

def to_ruby
  value
end

#truthy?Boolean

Determine truthiness for Rego evaluation.

Returns:

  • (Boolean)


29
30
31
# File 'lib/ruby/rego/value.rb', line 29

def truthy?
  true
end

#type_nameString

Return the Rego type name.

Returns:

  • (String)


43
44
45
# File 'lib/ruby/rego/value.rb', line 43

def type_name
  self.class::TYPE_NAME
end

#undefined?Boolean

Check if the value is undefined.

Returns:

  • (Boolean)


60
61
62
# File 'lib/ruby/rego/value.rb', line 60

def undefined?
  is_a?(UndefinedValue)
end