PageRenderTime 17ms CodeModel.GetById 13ms app.highlight 2ms RepoModel.GetById 1ms app.codeStats 0ms

/scalate-page/src/main/scala/org/fusesource/scalate/page/BlogHelper.scala

http://github.com/scalate/scalate
Scala | 53 lines | 26 code | 7 blank | 20 comment | 3 complexity | e0bb80a32bdad4af5287d424e6369c2c MD5 | raw file
 1/**
 2 * Copyright (C) 2009-2011 the original author or authors.
 3 * See the notice.md file distributed with this work for additional
 4 * information regarding copyright ownership.
 5 *
 6 * Licensed under the Apache License, Version 2.0 (the "License");
 7 * you may not use this file except in compliance with the License.
 8 * You may obtain a copy of the License at
 9 *
10 *     http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18package org.fusesource.scalate
19package page
20
21import org.fusesource.scalate.util.IOUtil._
22import java.io.File
23import util.Log
24
25object BlogHelper {
26  val log = Log(getClass)
27
28  /**
29   * Returns the blog posts from the current request's directory by default sorted in date order
30   */
31  def posts: List[Page] = {
32    val context = RenderContext()
33
34    val base = context.requestUri.replaceFirst("""/?[^/]+$""", "")
35    val dir = context.engine.resourceLoader.resource(base + "/index.page")
36      .flatMap(_.toFile)
37      .getOrElse(throw new Exception("index page not found."))
38      .getParentFile
39
40    log.info("Using dir: " + dir + " at request path: " + base)
41
42    val index = new File(dir, "index.page")
43    dir.descendants.filter(f => f != index && !f.isDirectory && f.name.endsWith(".page"))
44      .map { file =>
45        val page = PageFilter.parse(context, file)
46        page.link = file.relativeUri(dir).stripSuffix(".page") + ".html"
47        page
48      }
49      .toList
50      .sortBy(_.createdAt.getTime * -1)
51  }
52
53}