Module: Wunderbar::Template
- Defined in:
- lib/wunderbar/sinatra.rb,
lib/wunderbar/script.rb
Overview
Tilt template implementation
Defined Under Namespace
Modules: Js, Json, Text Classes: Base, Html, Xhtml
Constant Summary collapse
- PASSABLE =
[Numeric, String, Hash, Array]
Class Method Summary collapse
Class Method Details
.locals(scope, args) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/wunderbar/sinatra.rb', line 163 def self.locals(scope, args) args.push({}) if args.length == 1 return unless Hash === args.last and not args.last[:locals] locals = {} scope.instance_variables.each do |ivar| next if [:@env, :@params].include? ivar value = scope.instance_variable_get(ivar) next unless PASSABLE.find {|klass| klass === value} locals[ivar] = value end args.last[:locals] = locals end |
.register(language, base = Base) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/wunderbar/sinatra.rb', line 180 def self.register(language, base=Base) template = Class.new(Template::Base) do self.default_mime_type = language.mime include language end SinatraHelpers.send :define_method, language.ext do |*args, &block| # parse json if env['CONTENT_TYPE'] =~ /^\w+\/json/ json = JSON.parse(env['rack.input'].read) @params.merge! json if Hash === json end ::Template.locals(self, args) if Hash === args.last and args.last[:locals] @params.each do |name, value| args.last[:locals]["@#{name}".to_sym] = value end end template.evaluate(language.ext, self, *args, &block) end Tilt.register language.ext.to_s, template end |