Sha256: 0a456096dc1507058e69f7bc228c4b04aaacbfcd9f2db9ac378eb4f464be3fe2

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

require 'erb/view/version'
require 'erb'
require 'pathname'

module Erb
  def root=(path)
    @root = Pathname.new(path).expand_path
  end

  def root
    @root ||= Pathname.new(__FILE__).join('../../lib/templates')
  end
  module_function :root, :root=

  module View
    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      def template(name = nil)
        if name
          @template = name
        else
          @template
        end
      end

      def exposes(keys = nil)
        @exposes ||= []

        if keys
          @exposes.concat(Array(keys))
        else
          @exposes
        end
      end
    end

    def initialize
      self.class.exposes.each do |method|
        next if respond_to?(method)
        define_singleton_method(method) do
          @data.fetch(method)
        end
      end
    end

    def render(data = {})
      @data = data
      erb(self.class.template.to_s).result(binding)
    end

    private

    def erb(template)
      ERB.new(File.read(root.join("#{template}.erb")))
    end

    def root
      Erb.root
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
erb-view-0.2.0 lib/erb/view.rb
erb-view-0.1.0 lib/erb/view.rb