Sha256: 782128e7c7be95d6e260c33b166c33649acf856b224b8ccd4e65797f0f6d3103

Contents?: true

Size: 1.71 KB

Versions: 2

Compression:

Stored size: 1.71 KB

Contents

module Slippers
  class TemplateGroupDirectory < TemplateGroup
    def initialize(directory_path, params={})
      @directory_path = directory_path
      @super_group = params[:super_group]
    end
    attr_reader :directory_path
    
    def find(subtemplate)
      file_name = @directory_path + '/' + subtemplate + '.st'
      return find_renderer(subtemplate) unless File.exist?(file_name)
      Engine.new(FileTemplate.new(file_name).template, :template_group => self)
      
    end
    def has_registered?(class_name)
       return false unless @super_group
       @super_group.has_registered?(class_name)  
    end
    
    def render(item)
      return '' unless @super_group
      @super_group.render(item)
    end
    

    def eql?(other)
      return false unless other
      directory_path.eql?(other.directory_path)
    end
    def hash
      @directory_path.hash
    end
    
    private
      def find_renderer(subtemplate)
        file_name = @directory_path + '/' + subtemplate + '.rb'
        return find_in_super_group(subtemplate) unless File.exist?(file_name)
        renderer_name = subtemplate.split('/')[-1]
        load File.expand_path(file_name)
        create_renderer renderer_name
      end
      
      def find_in_super_group(subtemplate)
        return nil unless @super_group 
        @super_group.find(subtemplate)
      end
      
      def create_renderer(renderer_name)
        camelCase = renderer_name.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
        classes = camelCase.split('::')
        classes.shift if classes.empty? or classes.first.empty?
        const = classes.inject(Object){ |constant, class_name| constant.const_get(class_name) }
        const.new
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
starapor-slippers-0.0.6 lib/engine/template_group_directory.rb
starapor-slippers-0.0.8 lib/engine/template_group_directory.rb