Sha256: 4a71d44ec179f0361b59f1651e3c5f6e50e4b8c1df38f8822d8ceb5c5682cda8

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

module Capistrano
  module Template
    module Helpers
      class Renderer < SimpleDelegator
        attr_accessor :from, :reader, :locals

        def initialize(from, context, reader: File, locals: {})
          super context

          self.from = from
          self.reader = reader
          self.locals = locals
        end

        def locals=(new_locals)
          new_locals ||= {}
          new_locals = new_locals.each_with_object({}) { |(key, value), result| result[key.to_sym] = value }
          @locals = new_locals
        end

        def as_str
          @rendered_template ||= ERB.new(template_content, nil, '-').result(binding)
        end

        def as_io
          StringIO.new(as_str)
        end

        def method_missing(m, *args, &block)
          if locals.key?(m)
            locals[m]
          else
            super
          end
        end

        def respond_to_missing?(m, include_private)
          if locals.key?(m)
            true
          else
            super
          end
        end

        protected

        def template_content
          reader.read(from)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
capistrano-template-0.0.7 lib/capistrano/template/helpers/renderer.rb
capistrano-template-0.0.5 lib/capistrano/template/helpers/renderer.rb