module Elastics::ClassProxy::Templates

Attributes

partials[R]
templates[R]

Public Instance Methods

init() click to toggle source
# File lib/elastics/class_proxy/templates.rb, line 9
def init
  @sources   = []
  @templates = {}
  @partials  = {}
end
load_api_source(source=nil, source_vars=nil) click to toggle source

loads a API Template source

# File lib/elastics/class_proxy/templates.rb, line 34
def load_api_source(source=nil, source_vars=nil)
  load_source_for(Elastics::Template::Api, source, source_vars)
end
load_search_source(source=nil, source_vars=nil) click to toggle source

loads a Search Template source

# File lib/elastics/class_proxy/templates.rb, line 44
def load_search_source(source=nil, source_vars=nil)
  load_source_for(Template::Search, source, source_vars)
end
load_slim_search_source(source=nil, source_vars=nil) click to toggle source

loads a SlimSearch Template source

# File lib/elastics/class_proxy/templates.rb, line 49
def load_slim_search_source(source=nil, source_vars=nil)
  load_source_for(Template::SlimSearch, source, source_vars)
end
load_source(source=nil, source_vars=nil) click to toggle source

loads a Generic Template source

# File lib/elastics/class_proxy/templates.rb, line 39
def load_source(source=nil, source_vars=nil)
  load_source_for(Template, source, source_vars)
end
load_source_for(klass, source, source_vars) click to toggle source

accepts a path to a file or YAML string

# File lib/elastics/class_proxy/templates.rb, line 16
def load_source_for(klass, source, source_vars)
  if source.nil? || source !~ /\n/m
    base_names = [source, Utils.class_name_to_path(context.name), Utils.class_name_to_type(context.name)]
    paths      = base_names.map{|bn| ["#{Conf.elastics_dir}/#{bn}.yml", "#{Conf.elastics_dir}/#{bn}.yml.erb"]}.flatten
    paths     << source.to_s
    source     = paths.find {|p| File.exist?(p)}
  end
  raise ArgumentError, "Unable to load the source: expected a string, got #{source.inspect}" \
        unless source.is_a?(String)
  @sources << [klass, source, source_vars]
  do_load_source(klass, source, source_vars)
  # fixes the legacy empty stubs, which should call super instead
  # @templates.keys.each do |name|
  #   meta_context.send(:define_method, name){|*vars| super *vars }
  # end
end
reload!() click to toggle source

reloads the sources (useful in the console and used internally)

# File lib/elastics/class_proxy/templates.rb, line 54
def reload!
  @sources.each {|k,s,v| do_load_source(k,s,v)}
end
render(name, *vars) click to toggle source
# File lib/elastics/class_proxy/templates.rb, line 67
def render(name, *vars)
  templates[name].render(*vars)
end
wrap(*methods, &block) click to toggle source
# File lib/elastics/class_proxy/templates.rb, line 58
def wrap(*methods, &block)
  methods = templates.keys if methods.empty?
  methods.each do |name|
    raise MissingTemplateMethodError, "#{name} is not a template method" \
          unless templates.include?(name)
    meta_context.send(:define_method, name, &block)
  end
end

Private Instance Methods

define_template(klass, name, args, source_vars) click to toggle source
# File lib/elastics/class_proxy/templates.rb, line 81
def define_template(klass, name, args, source_vars)
  name = name.to_sym
  args = [args] unless args.is_a?(Array)
  if name.to_s[0] == '_' # partial
    partials[name] = Template::Partial.new(*args).setup(self, name)
  else
    templates[name] = klass.new(*args).setup(self, name, source_vars)
    context::ElasticsTemplateMethods.send(:define_method, name) do |*vars|
      raise ArgumentError, "#{elastics.context}.#{name} expects a list of Hashes, got #{vars.map(&:inspect).join(', ')}" \
            unless vars.all?{|i| i.nil? || i.is_a?(Hash)}
      elastics.render(name,*vars)
    end
  end
end
do_load_source(klass, source, source_vars) click to toggle source
# File lib/elastics/class_proxy/templates.rb, line 73
def do_load_source(klass, source, source_vars)
  source = Utils.erb_process(source) unless source.match("\n") # skips non-path
  hash   = Utils.parse_source(source)
  Utils.delete_allcaps_keys(hash).each do |name, args|
    define_template klass, name, args, source_vars
  end
end
meta_context() click to toggle source
# File lib/elastics/class_proxy/templates.rb, line 96
def meta_context
  class << context; self end
end