From 2f696ba01a71075ac2e4b9e1f7737a15109eec3e Mon Sep 17 00:00:00 2001 From: Martin Angers Date: Wed, 17 Jul 2013 19:51:12 -0400 Subject: [PATCH] rename funcs and types, fix #2 --- examples/amber/public/rss | 2 +- gen.go | 56 +++++++++++++++++++++------------------ gen_test.go | 2 +- 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/examples/amber/public/rss b/examples/amber/public/rss index e2ebed5..f4d32da 100644 --- a/examples/amber/public/rss +++ b/examples/amber/public/rss @@ -1,2 +1,2 @@ -17 Jul 13 12:16 EDTtrofaf (https://github.com/PuerkitoBio/trofaf)Ce blogue a déménagé sur GitHub/010-demenagementSuite à l'annonce de la fermeture de Calepin.co, j'ai déménagé ce blogue sur http://hypermegatop.github.com. Veuillez mettre à jour vos favoris!Martin Angers30 Apr 12 00:00 UTCJe suis venu te dire que je m'en vais/009-je-men-vaisOu plutôt, "je suis venu te dire qu'on m'évince", mais ça "punch" 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'était la fin des haricots.Martin Angers23 Apr 12 00:00 UTCPropriétés calculées avec Backbone/008-backbone-computed-propertiesLa beauté de l'univers du code libre est que lorsqu'il manque une fonctionnalité, on peut se retrousser les manches, ouvrir le code et l'ajouter. Voici ma petite histoire des propriétés calculées avec Backbone.Martin Angers13 Apr 12 00:00 UTCimplement.js: typage fort et Javascript/007-implement-jsL'injection de dépendance avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l'instance reçue seront celles attendues.Martin Angers02 Apr 12 00:00 UTCExpérimentations sur l'injection de dépendance avec node.js/006-dependency-injectionL'injection de dépendance permet de découpler les différentes composantes d'une application pour en faciliter l'entretien, la testabilité, circonscrire l'impact des changements, mais aussi pour imposer une façon d'aborder la création de l'application en une aggrégation de pièces simples, à la responsabilité ciblée, et à l'API bien défini.Martin Angers27 Mar 12 00:00 UTC \ No newline at end of file +17 Jul 13 19:50 EDTtrofaf (https://github.com/PuerkitoBio/trofaf)Ce blogue a déménagé sur GitHub/010-demenagementSuite à l'annonce de la fermeture de Calepin.co, j'ai déménagé ce blogue sur http://hypermegatop.github.com. Veuillez mettre à jour vos favoris!Martin Angers30 Apr 12 00:00 UTCJe suis venu te dire que je m'en vais/009-je-men-vaisOu plutôt, "je suis venu te dire qu'on m'évince", mais ça "punch" 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'était la fin des haricots.Martin Angers23 Apr 12 00:00 UTCPropriétés calculées avec Backbone/008-backbone-computed-propertiesLa beauté de l'univers du code libre est que lorsqu'il manque une fonctionnalité, on peut se retrousser les manches, ouvrir le code et l'ajouter. Voici ma petite histoire des propriétés calculées avec Backbone.Martin Angers13 Apr 12 00:00 UTCimplement.js: typage fort et Javascript/007-implement-jsL'injection de dépendance avec Javascript a comme conséquence de ne pouvoir assumer que les fonctionnalités offertes par l'instance reçue seront celles attendues.Martin Angers02 Apr 12 00:00 UTCExpérimentations sur l'injection de dépendance avec node.js/006-dependency-injectionL'injection de dépendance permet de découpler les différentes composantes d'une application pour en faciliter l'entretien, la testabilité, circonscrire l'impact des changements, mais aussi pour imposer une façon d'aborder la création de l'application en une aggrégation de pièces simples, à la responsabilité ciblée, et à l'API bien défini.Martin Angers27 Mar 12 00:00 UTC \ No newline at end of file diff --git a/gen.go b/gen.go index 8a87715..45b7863 100644 --- a/gen.go +++ b/gen.go @@ -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] @@ -55,7 +55,7 @@ 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 @@ -63,7 +63,7 @@ func compileTemplate() error { 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 { @@ -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 diff --git a/gen_test.go b/gen_test.go index 6774384..713f8f9 100644 --- a/gen_test.go +++ b/gen_test.go @@ -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",