Sha256: af4081890093a579bb3b892b3cea66d454f08e619b5b573b33169961299571db

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

module Nocode
  module Util
    # Built on top of StringTemplate but instead of only working for a string, this will
    # recursively evaluate all strings within an object.  Heuristics:
    #    - Strings evaluate using StringTemplate
    #    - Hashes will have their keys and values traversed
    #    - Arrays will have their entries traversed
    #    - All other types will simply return themselves
    class ObjectTemplate
      attr_reader :object

      def initialize(object)
        @object = object

        freeze
      end

      def evaluate(values = {})
        recursive_evaluate(object, values)
      end

      private

      def recursive_evaluate(expression, values)
        case expression
        when Array
          expression.map { |o| recursive_evaluate(o, values) }
        when Hash
          expression.to_h do |k, v|
            [recursive_evaluate(k, values), recursive_evaluate(v, values)]
          end
        when String
          Nay.evaluate(expression, values)
        else
          expression
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nocode-0.0.9 lib/nocode/util/object_template.rb