Skip to content

Commit

Permalink
rename funcs and types, fix #2
Browse files Browse the repository at this point in the history
  • Loading branch information
mna committed Jul 17, 2013
1 parent a758c9d commit 2f696ba
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 28 deletions.
2 changes: 1 addition & 1 deletion examples/amber/public/rss
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title></title><description></description><link></link><lastBuildDate>17 Jul 13 12:16 EDT</lastBuildDate><generator>trofaf (https://github.com/PuerkitoBio/trofaf)</generator><item><title>Ce blogue a déménagé sur GitHub</title><link>/010-demenagement</link><description>Suite à l&#39;annonce de la fermeture de Calepin.co, j&#39;ai déménagé ce blogue sur http://hypermegatop.github.com. Veuillez mettre à jour vos favoris!</description><author>Martin Angers</author><category></category><pubDate>30 Apr 12 00:00 UTC</pubDate></item><item><title>Je suis venu te dire que je m&#39;en vais</title><link>/009-je-men-vais</link><description>Ou plutôt, &#34;je suis venu te dire qu&#39;on m&#39;évince&#34;, mais ça &#34;punch&#34; moins... En effet, mon coup de foudre pour le blogiciel Calepin aura finalement été son baiser de la mort. Sur Twitter la semaine dernière, via le canal officiel du site, on apprenait que c&#39;était la fin des haricots.</description><author>Martin Angers</author><category></category><pubDate>23 Apr 12 00:00 UTC</pubDate></item><item><title>Propriétés calculées avec Backbone</title><link>/008-backbone-computed-properties</link><description>La beauté de l&#39;univers du code libre est que lorsqu&#39;il manque une fonctionnalité, on peut se retrousser les manches, ouvrir le code et l&#39;ajouter. Voici ma petite histoire des propriétés calculées avec Backbone.</description><author>Martin Angers</author><category></category><pubDate>13 Apr 12 00:00 UTC</pubDate></item><item><title>implement.js: typage fort et Javascript</title><link>/007-implement-js</link><description>L&#39;injection de dépendance avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l&#39;instance reçue seront celles attendues.</description><author>Martin Angers</author><category></category><pubDate>02 Apr 12 00:00 UTC</pubDate></item><item><title>Expérimentations sur l&#39;injection de dépendance avec node.js</title><link>/006-dependency-injection</link><description>L&#39;injection de dépendance permet de découpler les différentes composantes d&#39;une application pour en faciliter l&#39;entretien, la testabilité, circonscrire l&#39;impact des changements, mais aussi pour imposer une façon d&#39;aborder la création de l&#39;application en une aggrégation de pièces simples, à la responsabilité ciblée, et à l&#39;API bien défini.</description><author>Martin Angers</author><category></category><pubDate>27 Mar 12 00:00 UTC</pubDate></item></channel></rss>
<rss version="2.0"><channel><title></title><description></description><link></link><lastBuildDate>17 Jul 13 19:50 EDT</lastBuildDate><generator>trofaf (https://github.com/PuerkitoBio/trofaf)</generator><item><title>Ce blogue a déménagé sur GitHub</title><link>/010-demenagement</link><description>Suite à l&#39;annonce de la fermeture de Calepin.co, j&#39;ai déménagé ce blogue sur http://hypermegatop.github.com. Veuillez mettre à jour vos favoris!</description><author>Martin Angers</author><category></category><pubDate>30 Apr 12 00:00 UTC</pubDate></item><item><title>Je suis venu te dire que je m&#39;en vais</title><link>/009-je-men-vais</link><description>Ou plutôt, &#34;je suis venu te dire qu&#39;on m&#39;évince&#34;, mais ça &#34;punch&#34; moins... En effet, mon coup de foudre pour le blogiciel Calepin aura finalement été son baiser de la mort. Sur Twitter la semaine dernière, via le canal officiel du site, on apprenait que c&#39;était la fin des haricots.</description><author>Martin Angers</author><category></category><pubDate>23 Apr 12 00:00 UTC</pubDate></item><item><title>Propriétés calculées avec Backbone</title><link>/008-backbone-computed-properties</link><description>La beauté de l&#39;univers du code libre est que lorsqu&#39;il manque une fonctionnalité, on peut se retrousser les manches, ouvrir le code et l&#39;ajouter. Voici ma petite histoire des propriétés calculées avec Backbone.</description><author>Martin Angers</author><category></category><pubDate>13 Apr 12 00:00 UTC</pubDate></item><item><title>implement.js: typage fort et Javascript</title><link>/007-implement-js</link><description>L&#39;injection de dépendance avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l&#39;instance reçue seront celles attendues.</description><author>Martin Angers</author><category></category><pubDate>02 Apr 12 00:00 UTC</pubDate></item><item><title>Expérimentations sur l&#39;injection de dépendance avec node.js</title><link>/006-dependency-injection</link><description>L&#39;injection de dépendance permet de découpler les différentes composantes d&#39;une application pour en faciliter l&#39;entretien, la testabilité, circonscrire l&#39;impact des changements, mais aussi pour imposer une façon d&#39;aborder la création de l&#39;application en une aggrégation de pièces simples, à la responsabilité ciblée, et à l&#39;API bien défini.</description><author>Martin Angers</author><category></category><pubDate>27 Mar 12 00:00 UTC</pubDate></item></channel></rss>
56 changes: 30 additions & 26 deletions gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ var (
)

// This type is a slice of *LongPost that implements the sort.Interface, to sort in PubTime order.
type sortableLongPost []*LongPost
type sortablePosts []*LongPost

func (s sortableLongPost) Len() int { return len(s) }
func (s sortableLongPost) Less(i, j int) bool { return s[i].PubTime.Before(s[j].PubTime) }
func (s sortableLongPost) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s sortablePosts) Len() int { return len(s) }
func (s sortablePosts) Less(i, j int) bool { return s[i].PubTime.Before(s[j].PubTime) }
func (s sortablePosts) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

// Filter cleans the slice of FileInfo to leave only `.md` files (markdown)
func Filter(fi []os.FileInfo) []os.FileInfo {
func filter(fi []os.FileInfo) []os.FileInfo {
for i := 0; i < len(fi); {
if fi[i].IsDir() || filepath.Ext(fi[i].Name()) != ".md" {
fi[i], fi = fi[len(fi)-1], fi[:len(fi)-1]
Expand All @@ -55,15 +55,15 @@ func Filter(fi []os.FileInfo) []os.FileInfo {
}

// Compile the Post template.
func compileTemplate() error {
func compileTemplates() error {
ap := filepath.Join(TemplatesDir, postTplNm)
if _, err := os.Stat(ap); os.IsNotExist(err) {
// Amber post template does not exist, compile the native Go templates
postTpl, err = template.ParseGlob(filepath.Join(TemplatesDir, "*.html"))
if err != nil {
return fmt.Errorf("error parsing templates: %s", err)
}
postTplNm = "post" // TODO : Validate this...
postTplNm = "post"
} else {
c := amber.New()
if err := c.ParseFile(ap); err != nil {
Expand Down Expand Up @@ -97,38 +97,42 @@ func clearPublicDir() error {
return nil
}

// Generate the whole site.
func generateSite() error {
// First compile the template(s)
if err := compileTemplate(); err != nil {
return err
}
// Now read the posts
fis, err := ioutil.ReadDir(PostsDir)
if err != nil {
return err
}
// Remove directories from the list, keep only .md files
fis = Filter(fis)

// Get all posts.
all := make(sortableLongPost, 0, len(fis))
func getPosts(fis []os.FileInfo) (all, recent []*LongPost) {
all = make([]*LongPost, 0, len(fis))
for _, fi := range fis {
lp, err := newLongPost(fi)
if err == nil {
all = append(all, lp)
} else {
log.Printf("post skipped: %s; error: %s\n", fi.Name(), err)
log.Printf("post ignored: %s; error: %s\n", fi.Name(), err)
}
}
// Then sort in reverse order (newer first)
sort.Sort(sort.Reverse(all))
sort.Sort(sort.Reverse(sortablePosts(all)))
cnt := Options.RecentPostsCount
if l := len(all); l < cnt {
cnt = l
}
// Slice to get only recent posts
recent := all[:cnt]
recent = all[:cnt]
return
}

// Generate the whole site.
func generateSite() error {
// First compile the template(s)
if err := compileTemplates(); err != nil {
return err
}
// Now read the posts
fis, err := ioutil.ReadDir(PostsDir)
if err != nil {
return err
}
// Remove directories from the list, keep only .md files
fis = filter(fis)
// Get all posts.
all, recent := getPosts(fis)
// Delete current public directory files
if err := clearPublicDir(); err != nil {
return err
Expand Down
2 changes: 1 addition & 1 deletion gen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func mustParse(s string) time.Time {
}

func TestSort(t *testing.T) {
ps := make(sortableLongPost, 5)
ps := make(sortablePosts, 5)
ps[0] = &LongPost{
ShortPost: &ShortPost{
Title: "a",
Expand Down

0 comments on commit 2f696ba

Please sign in to comment.