blogposts: create new file for post and a helper func
This commit is contained in:
parent
1153a0a5bd
commit
00596a7c52
@ -1,15 +1,9 @@
|
|||||||
package blogposts
|
package blogposts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
"io/fs"
|
"io/fs"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Post struct {
|
|
||||||
Title, Description, Body string
|
|
||||||
Tags []string
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPostsFromFS(fileSystem fs.FS) ([]Post, error) {
|
func NewPostsFromFS(fileSystem fs.FS) ([]Post, error) {
|
||||||
dir, err := fs.ReadDir(fileSystem, ".")
|
dir, err := fs.ReadDir(fileSystem, ".")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -25,25 +19,3 @@ func NewPostsFromFS(fileSystem fs.FS) ([]Post, error) {
|
|||||||
}
|
}
|
||||||
return posts, nil
|
return posts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPost(fileSystem fs.FS, fileName string) (Post, error) {
|
|
||||||
postFile, err := fileSystem.Open(fileName)
|
|
||||||
if err != nil {
|
|
||||||
return Post{}, err
|
|
||||||
}
|
|
||||||
defer postFile.Close()
|
|
||||||
|
|
||||||
return newPost(postFile)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Does newPost have to be coupled to an fs.File ?
|
|
||||||
// Do we use all the methods and data from this type? What do we really need?
|
|
||||||
func newPost(postFile io.Reader) (Post, error) {
|
|
||||||
postData, err := io.ReadAll(postFile)
|
|
||||||
if err != nil {
|
|
||||||
return Post{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
post := Post{Title: string(postData)[7:]}
|
|
||||||
return post, nil
|
|
||||||
}
|
|
||||||
|
@ -33,7 +33,11 @@ func TestNewBlogPosts(t *testing.T) {
|
|||||||
|
|
||||||
got := posts[0]
|
got := posts[0]
|
||||||
want := Post{Title: "Post 1"}
|
want := Post{Title: "Post 1"}
|
||||||
|
assertPost(t, got, want)
|
||||||
|
}
|
||||||
|
|
||||||
|
func assertPost(t testing.TB, got Post, want Post) {
|
||||||
|
t.Helper()
|
||||||
if !reflect.DeepEqual(got, want) {
|
if !reflect.DeepEqual(got, want) {
|
||||||
t.Errorf("got %+v, want %+v", got, want)
|
t.Errorf("got %+v, want %+v", got, want)
|
||||||
}
|
}
|
||||||
|
33
blogposts/post.go
Normal file
33
blogposts/post.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package blogposts
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"io/fs"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Post struct {
|
||||||
|
Title, Description, Body string
|
||||||
|
Tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func getPost(fileSystem fs.FS, fileName string) (Post, error) {
|
||||||
|
postFile, err := fileSystem.Open(fileName)
|
||||||
|
if err != nil {
|
||||||
|
return Post{}, err
|
||||||
|
}
|
||||||
|
defer postFile.Close()
|
||||||
|
|
||||||
|
return newPost(postFile)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Does newPost have to be coupled to an fs.File ?
|
||||||
|
// Do we use all the methods and data from this type? What do we really need?
|
||||||
|
func newPost(postFile io.Reader) (Post, error) {
|
||||||
|
postData, err := io.ReadAll(postFile)
|
||||||
|
if err != nil {
|
||||||
|
return Post{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
post := Post{Title: string(postData)[7:]}
|
||||||
|
return post, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user