Module: Elastics::ClassProxy::Templates

Includes:
Doc, Search
Defined in:
lib/elastics/class_proxy/templates.rb,
lib/elastics/class_proxy/templates/doc.rb,
lib/elastics/class_proxy/templates/search.rb

Defined Under Namespace

Modules: Doc, Search

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Search

#count_search, #define_search, #multi_search, #scan_search

Methods included from Doc

#doc, #find, #usage

Instance Attribute Details

#partialsObject (readonly)

Returns the value of attribute partials.



5
6
7
# File 'lib/elastics/class_proxy/templates.rb', line 5

def partials
  @partials
end

#templatesObject (readonly)

Returns the value of attribute templates.



5
6
7
# File 'lib/elastics/class_proxy/templates.rb', line 5

def templates
  @templates
end

Instance Method Details

#initObject



9
10
11
12
13
# File 'lib/elastics/class_proxy/templates.rb', line 9

def init
  @sources   = []
  @templates = {}
  @partials  = {}
end

#load_api_source(source = nil, source_vars = nil) ⇒ Object

loads a API Template source



34
35
36
# 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) ⇒ Object

loads a Search Template source



44
45
46
# 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) ⇒ Object

loads a SlimSearch Template source



49
50
51
# 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) ⇒ Object

loads a Generic Template source



39
40
41
# 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) ⇒ Object

accepts a path to a file or YAML string

Raises:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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!Object

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



54
55
56
# 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) ⇒ Object



67
68
69
# File 'lib/elastics/class_proxy/templates.rb', line 67

def render(name, *vars)
  templates[name].render(*vars)
end

#wrap(*methods, &block) ⇒ Object



58
59
60
61
62
63
64
65
# 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