Class: Babl::Nodes::TerminalValue

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/babl/nodes/terminal_value.rb

Overview

A TerminalValue node is always implicitly added to the end of the chain during compilation. It basically ensures that the output contains only primitives, arrays and hashes.

Defined Under Namespace

Classes: TerminalValueError

Instance Method Summary collapse

Instance Method Details

#dependenciesObject



19
20
21
# File 'lib/babl/nodes/terminal_value.rb', line 19

def dependencies
    Utils::Hash::EMPTY
end

#optimizeObject



44
45
46
# File 'lib/babl/nodes/terminal_value.rb', line 44

def optimize
    self
end

#pinned_dependenciesObject



23
24
25
# File 'lib/babl/nodes/terminal_value.rb', line 23

def pinned_dependencies
    Utils::Hash::EMPTY
end

#render(frame) ⇒ Object



27
28
29
30
31
# File 'lib/babl/nodes/terminal_value.rb', line 27

def render(frame)
    render_object(frame.object)
rescue TerminalValueError => e
    raise Errors::RenderingError, "#{e.message}\n" + frame.formatted_stack(e.babl_stack), e.backtrace
end

#render_object(obj, stack = nil) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/babl/nodes/terminal_value.rb', line 33

def render_object(obj, stack = nil)
    case obj
    when ::String, ::Integer, ::NilClass, ::TrueClass, ::FalseClass then obj
    when ::Numeric then obj.to_f
    when ::Symbol then obj.to_s
    when ::Hash then render_hash(obj, stack || [])
    when ::Array then render_array(obj, stack || [])
    else raise TerminalValueError.new("Only primitives can be serialized: #{obj.inspect}", stack || [])
    end
end

#schemaObject



15
16
17
# File 'lib/babl/nodes/terminal_value.rb', line 15

def schema
    Schema::Anything.instance
end