Sha256: 9065f0f32346b6e184afd9bc0b6690c8737b7d490c27f5c497ad25a6f4b3591b

Contents?: true

Size: 1.8 KB

Versions: 24

Compression:

Stored size: 1.8 KB

Contents

module Puppet::Pops
module Evaluator
# Literal values for
# String (not containing interpolation)
# Numbers
# Booleans
# Undef (produces nil)
# Array
# Hash
# QualifiedName
# Default (produced :default)
# Regular Expression (produces ruby regular expression)
# QualifiedReference
# AccessExpresion
#
class LiteralEvaluator

  COMMA_SEPARATOR = ', '.freeze

  def initialize
    @@literal_visitor ||= Visitor.new(self, "literal", 0, 0)
  end

  def literal(ast)
    @@literal_visitor.visit_this_0(self, ast)
  end

  def literal_Object(o)
    throw :not_literal
  end

  def literal_Factory(o)
    literal(o.model)
  end

  def literal_Program(o)
    literal(o.body)
  end

  def literal_LiteralString(o)
    o.value
  end

  def literal_QualifiedName(o)
    o.value
  end

  def literal_LiteralNumber(o)
    o.value
  end

  def literal_LiteralBoolean(o)
    o.value
  end

  def literal_LiteralUndef(o)
    nil
  end

  def literal_LiteralDefault(o)
    :default
  end

  def literal_LiteralRegularExpression(o)
    o.value
  end

  def literal_QualifiedReference(o)
    o.value
  end

  def literal_AccessExpression(o)
    # to prevent parameters with [[]] like Optional[[String]]
    throw :not_literal if o.keys.size == 1 && o.keys[0].is_a?(Model::LiteralList)
    o.keys.map { |v| literal(v) }
  end

  def literal_UnaryMinusExpression(o)
    -literal(o.expr)
  end

  def literal_ConcatenatedString(o)
    # use double quoted string value if there is no interpolation
    throw :not_literal unless o.segments.size == 1 && o.segments[0].is_a?(Model::LiteralString)
    o.segments[0].value
  end

  def literal_LiteralList(o)
    o.values.map {|v| literal(v) }
  end

  def literal_LiteralHash(o)
    o.entries.reduce({}) do |result, entry|
      result[literal(entry.key)] = literal(entry.value)
      result
    end
  end
end
end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
puppet-7.34.0 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.34.0-x86-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.34.0-x64-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.34.0-universal-darwin lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.33.0 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.33.0-x86-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.33.0-x64-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.33.0-universal-darwin lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.32.1 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.32.1-x86-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.32.1-x64-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.32.1-universal-darwin lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.31.0 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.31.0-x86-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.31.0-x64-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.31.0-universal-darwin lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.30.0 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.30.0-x86-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.30.0-x64-mingw32 lib/puppet/pops/evaluator/literal_evaluator.rb
puppet-7.30.0-universal-darwin lib/puppet/pops/evaluator/literal_evaluator.rb