module Flex::ClassProxy::Templates
Attributes
partials[R]
templates[R]
Public Instance Methods
init()
click to toggle source
# File lib/flex/class_proxy/templates.rb, line 9 def init @sources = [] @templates = {} @partials = {} end
load_search_source(source=nil, source_vars=nil)
click to toggle source
load_slim_search_source(source=nil, source_vars=nil)
click to toggle source
loads a SlimSearch Template
source
# File lib/flex/class_proxy/templates.rb, line 44 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/flex/class_proxy/templates.rb, line 34 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
Calls superclass method
# File lib/flex/class_proxy/templates.rb, line 16 def load_source_for(klass, source, source_vars) if source.nil? || source !~ /\n/m paths = [ "#{Conf.flex_dir}/#{source}.yml", "#{Conf.flex_dir}/#{Utils.class_name_to_type(context.name)}.yml", source.to_s ] source = paths.find {|p| File.exist?(p)} end raise ArgumentError, "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/flex/class_proxy/templates.rb, line 49 def reload! @sources.each {|k,s,v| do_load_source(k,s,v)} end
render(name, *vars)
click to toggle source
# File lib/flex/class_proxy/templates.rb, line 62 def render(name, *vars) templates[name].render(*vars) end
wrap(*methods, &block)
click to toggle source
# File lib/flex/class_proxy/templates.rb, line 53 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/flex/class_proxy/templates.rb, line 76 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::FlexTemplateMethods.send(:define_method, name) do |*vars| raise ArgumentError, "#{flex.context}.#{name} expects a list of Hashes, got #{vars.map(&:inspect).join(', ')}" \ unless vars.all?{|i| i.nil? || i.is_a?(Hash)} flex.render(name,*vars) end end end
do_load_source(klass, source, source_vars)
click to toggle source
# File lib/flex/class_proxy/templates.rb, line 68 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/flex/class_proxy/templates.rb, line 91 def meta_context class << context; self end end