Class: Slimmer::Skin

Inherits:
Object
  • Object
show all
Defined in:
lib/slimmer.rb

Instance Method Summary collapse

Constructor Details

#initialize(asset_host, use_cache = false) ⇒ Skin

TODO: Extract the cache to something we can pass in instead of using true/false and an in-memory cache.



263
264
265
266
267
# File 'lib/slimmer.rb', line 263

def initialize asset_host, use_cache = false
  self.asset_host = asset_host
  self.templated_cache = {}
  self.use_cache = false
end

Instance Method Details

#admin(request, body) ⇒ Object



319
320
321
322
323
324
325
326
327
328
329
# File 'lib/slimmer.rb', line 319

def admin(request,body)
  processors = [
    TitleInserter.new(),
    TagMover.new(),
    AdminTitleInserter.new,
    FooterRemover.new,
    BodyInserter.new(),
    BodyClassCopier.new
  ]
  process(processors,body,template('admin'))
end

#cache(name, template) ⇒ Object



282
283
284
285
# File 'lib/slimmer.rb', line 282

def cache name, template
  return unless use_cache
  templated_cache[name] = template
end

#cached_template(name) ⇒ Object



278
279
280
# File 'lib/slimmer.rb', line 278

def cached_template name
  templated_cache[name]
end

#error(request, template_name, body) ⇒ Object



301
302
303
304
305
306
# File 'lib/slimmer.rb', line 301

def error(request, template_name, body)
  processors = [
    TitleInserter.new()
  ]
  process(processors, body, template(template_name))
end

#load_template(template_name) ⇒ Object



287
288
289
290
291
292
293
# File 'lib/slimmer.rb', line 287

def load_template template_name
  url = template_url template_name
  source = open(url, "r:UTF-8").read
  template = ERB.new(source).result binding
  cache template_name, template
  template
end

#process(processors, body, template) ⇒ Object



308
309
310
311
312
313
314
315
316
317
# File 'lib/slimmer.rb', line 308

def process(processors,body,template)
  src = Nokogiri::HTML.parse(body.to_s)
  dest = Nokogiri::HTML.parse(template)

  processors.each do |p|
    p.filter(src,dest)
  end

  return dest.to_html
end

#success(request, body) ⇒ Object



331
332
333
334
335
336
337
338
339
340
341
342
# File 'lib/slimmer.rb', line 331

def success(request,body)
  processors = [
    TitleInserter.new(),
    TagMover.new(),
    BodyInserter.new(),
    BodyClassCopier.new,
    SectionInserter.new()
  ]

  template_name = request.env.has_key?(TEMPLATE_HEADER) ? request.env[TEMPLATE_HEADER] : 'wrapper'
  process(processors,body,template(template_name))
end

#template(template_name) ⇒ Object



269
270
271
272
# File 'lib/slimmer.rb', line 269

def template(template_name)
  return cached_template(template_name) if template_cached? template_name
  load_template template_name
end

#template_cached?(name) ⇒ Boolean

Returns:

  • (Boolean)


274
275
276
# File 'lib/slimmer.rb', line 274

def template_cached? name
  !cached_template(name).nil?
end

#template_url(template_name) ⇒ Object



295
296
297
298
299
# File 'lib/slimmer.rb', line 295

def template_url template_name
  host = asset_host.dup
  host += '/' unless host =~ /\/$/
  "#{host}templates/#{template_name}.html.erb"
end