Skip to content

Commit

Permalink
ref: func writeRecipe to method (r Recipe)Render
Browse files Browse the repository at this point in the history
func writeProfile to method (p Profile)Render
  • Loading branch information
mous1985 committed Jan 10, 2025
1 parent f64569a commit 4959189
Showing 1 changed file with 46 additions and 37 deletions.
83 changes: 46 additions & 37 deletions examples/gno.land/r/mouss/home/home.gno
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"gno.land/p/demo/mux"
"gno.land/p/demo/ufmt"

"gno.land/p/moul/addrset"
"gno.land/p/moul/md"
"gno.land/r/mouss/config"
Expand Down Expand Up @@ -44,16 +45,16 @@ var (
Email: "[email protected]",
Github: "https://github.com/mous1985",
LinkedIn: "https://www.linkedin.com/in/mustapha-benazzouz-88646887/",
Followers: make([]std.Address, 0),
Followers: addrset.Set{},
}
router = mux.NewRouter()
recipes []*Recipe
margheritaPizza = &Recipe{
Name: "Authentic Margherita Pizza 🤌",
Origin: "Naples, 🇮🇹",
Author: config.Address(),
Ingredients: " \n\n- 1kg 00 flour\n\n- 500ml water\n\n- 3g fresh yeast\n\n- 20g sea salt\n\n- San Marzano tomatoes\n\n- Fresh buffalo mozzarella\n\n- Fresh basil\n\n- Extra virgin olive oil",
Instructions: "\n\n1. Mix flour and water until incorporated\n\n2. Add yeast and salt, knead for 20 minutes\n\n3. Let rise for 2 hours at room temperature\n\n4. Divide into 250g balls\n\n5. Cold ferment for 24-48 hours\n\n6. Shape by hand, being gentle with the dough\n\n7. Top with crushed tomatoes, torn mozzarella, and basil\n\n8. Cook at 450°C for 60-90 seconds",
Ingredients: " 1kg 00 flour\n 500ml water\n 3g fresh yeast\n 20g sea salt\n San Marzano tomatoes\n Fresh buffalo mozzarella\n Fresh basil\n Extra virgin olive oil",
Instructions: " Mix flour and water until incorporated\n Add yeast and salt, knead for 20 minutes\n Let rise for 2 hours at room temperature\n Divide into 250g balls\n Cold ferment for 24-48 hours\n Shape by hand, being gentle with the dough\n Top with crushed tomatoes, torn mozzarella, and basil\n Cook at 450°C for 60-90 seconds",
Tips: "Use a pizza steel or stone preheated for at least 1 hour. The dough should be soft and extensible. For best results, cook in a wood-fired oven.",
}
)
Expand Down Expand Up @@ -101,8 +102,8 @@ func validateRecipe(name, ingredients, instructions string) error {
// If the caller is not authorized, it returns an error.
// If the address is already being followed, it returns an error.
// Otherwise, it adds the address to the list of followers and returns nil.
//TODO:any user can follow and to be followed by any other user
//TODO: add a function to unfollow
// TODO:any user can follow and to be followed by any other user
// TODO: add a function to unfollow

func Follow(addr std.Address) error {
caller := std.PrevRealm().Addr()
Expand All @@ -112,12 +113,12 @@ func Follow(addr std.Address) error {
if profile.Followers.Has(addr) {
return ufmt.Errorf("address %s is already following", addr)
}
profile.Followers.Add(addr)
profile.Followers.Add(addr) //can't add the same address twice
return nil
}

func isUser(addr std.Address) bool {
return !isAuthorized(addr) && !profile.Followers.Has(addr)
return !isAuthorized(addr)
}
func isAuthorized(addr std.Address) bool {
return addr == config.Address() || addr == config.Backup()
Expand All @@ -126,7 +127,8 @@ func isAuthorized(addr std.Address) bool {
func renderRecipes(res *mux.ResponseWriter, req *mux.Request) {
var b strings.Builder
b.WriteString("## World Kitchen\n\n------\n\n")
writeRecipe(&b, margheritaPizza)

b.WriteString(margheritaPizza.Render())

if len(recipes) == 0 {
b.WriteString("No recipes yet. Be the first to add one!\n")
Expand All @@ -135,45 +137,52 @@ func renderRecipes(res *mux.ResponseWriter, req *mux.Request) {
}

for _, recipe := range recipes {
writeRecipe(&b, recipe)
b.WriteString(recipe.Render())
}

res.Write(b.String())
}

func writeRecipe(b *strings.Builder, recipe *Recipe) {
b.WriteString(md.H2(recipe.Name))
b.WriteString(md.Bold("Author: ") + recipe.Author.String() + "\n\n")
b.WriteString(md.Bold("Origin: ") + recipe.Origin + "\n\n")
b.WriteString(md.Bold("Ingredients:") + "\n" + md.BulletList(strings.Split(recipe.Ingredients, "\n")) + "\n")
b.WriteString(md.Bold("Instructions:") + "\n" + md.OrderedList(strings.Split(recipe.Instructions, "\n")) + "\n")

if recipe.Tips != "" {
b.WriteString(md.Italic("💡 Tips: "+recipe.Tips) + "\n\n")
func (r Recipe) Render() string {
var b strings.Builder
b.WriteString(md.H2(r.Name))
b.WriteString(md.Bold("Author:") + "\n" + r.Author.String() + "\n\n")
b.WriteString(md.Bold("Origin:") + "\n" + r.Origin + "\n\n")
b.WriteString(md.Bold("Ingredients:") + "\n" + md.BulletList(strings.Split(r.Ingredients, "\n")) + "\n\n")
b.WriteString(md.Bold("Instructions:") + "\n" + md.OrderedList(strings.Split(r.Instructions, "\n")) + "\n\n")

if r.Tips != "" {
b.WriteString(md.Italic("💡 Tips:"+"\n"+r.Tips) + "\n\n")
}

b.WriteString(md.HorizontalRule() + "\n")
return b.String()
}

func renderHomepage(res *mux.ResponseWriter, req *mux.Request) {
var b strings.Builder
writeNavigation(&b)
writeProfile(&b)
b.WriteString(profile.Render())
res.Write(b.String())
}

func writeProfile(b *strings.Builder) {
func (p Profile) Render() string {
var b strings.Builder

b.WriteString(md.H1("Welcome to my Homepage") + "\n\n" + md.HorizontalRule() + "\n\n")
writeGnoArt(b)
writeGnoArt(&b)
b.WriteString(md.HorizontalRule() + "\n\n" + md.H2("About Me") + "\n\n")
b.WriteString(md.Image("avatar", profile.Avatar) + "\n\n")
b.WriteString(profile.AboutMe + "\n\n" + md.HorizontalRule() + "\n\n")
b.WriteString(md.Image("avatar", p.Avatar) + "\n\n")
b.WriteString(p.AboutMe + "\n\n" + md.HorizontalRule() + "\n\n")
b.WriteString(md.H3("Contact") + "\n\n")
b.WriteString(md.BulletList([]string{
"Email: " + profile.Email,
"GitHub: " + md.Link("@mous1985", profile.Github),
"LinkedIn: " + md.Link("Mustapha", profile.LinkedIn),
"Email: " + p.Email,
"GitHub: " + md.Link("@mous1985", p.Github),
"LinkedIn: " + md.Link("Mustapha", p.LinkedIn),
}))
b.WriteString("\n\n" + md.Bold("👤 Followers: ") + strconv.Itoa(profile.Followers.Size()))
b.WriteString("\n\n" + md.Bold("👤 Followers: ") + strconv.Itoa(p.Followers.Size()))

return b.String()
}
func writeNavigation(b *strings.Builder) {
navItems := []string{
Expand All @@ -189,16 +198,16 @@ func Render(path string) string {
func writeGnoArt(b *strings.Builder) {
b.WriteString("```\n")
for _, line := range []string{
" -==++. ",
" *@@@@= @- -@",
" #@@@@@: -==-.-- :-::===: .-++-. @- .===:.- .-.-==- .===:=@",
" #@@@@@@@: -@@%**%@@ #@@#*#@@- *@@**@@* @- +%=::-*@ +@=-:-@* +%=::-*@",
" +@%#**#%@@ %@+ :@@ *@+ #@=+@% %@+ @= :@: -@ +% +%.@: -@",
" -: - *@%:..+@@ *@+ #@=-@@: :@@= @- .@= =@ +@ *%.@= =@",
" --:==+=-:=. =%@%#*@@ *@+ #@+ =%@%%@%= #* %#=.:%*===*@ +% +% -%*===*@",
" -++++=++++. =-:::*@# . . .::. .. :: .:: . . .:: .",
" .-=+++=: .*###%#= ",
" :: ",
" -==++. ",
" *@@@@= @- -@",
" #@@@@@: -==-.-- :-::===: .-++-. @- .===:.- .-.-==- .===:=@",
" #@@@@@@@: -@@%**%@@ #@@#*#@@- *@@**@@* @- +%=::-*@ +@=-:-@* +%=::-*@",
" +@%#**#%@@ %@+ :@@ *@+ #@=+@% %@+ @= :@: -@ +% +%.@: -@",
" -: - *@%:..+@@ *@+ #@=-@@: :@@= @- .@= =@ +@ *%.@= =@",
" --:==+=-:=. =%@%#*@@ *@+ #@+ =%@%%@%= #* %#=.:%*===*@ +% +% -%*===*@",
" -++++=++++. =-:::*@# . . .::. .. :: .:: . . .:: .",
" .-=+++=: .*###%#= ",
" :: ",
} {
b.WriteString(line + "\n")
}
Expand Down

0 comments on commit 4959189

Please sign in to comment.