Skip to content

Commit 4d1a2a6

Browse files
moving structs and styling to separate packages (#106)
1 parent 9d17efa commit 4d1a2a6

File tree

10 files changed

+231
-165
lines changed

10 files changed

+231
-165
lines changed

cmd/ability.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"github.com/digitalghost-dev/poke-cli/connections"
77
"github.com/digitalghost-dev/poke-cli/flags"
8+
"github.com/digitalghost-dev/poke-cli/styling"
89
"golang.org/x/text/cases"
910
"golang.org/x/text/language"
1011
"os"
@@ -14,13 +15,13 @@ import (
1415
func AbilityCommand() {
1516

1617
flag.Usage = func() {
17-
helpMessage := helpBorder.Render(
18+
helpMessage := styling.HelpBorder.Render(
1819
"Get details about a specific ability.\n\n",
19-
styleBold.Render("USAGE:"),
20-
fmt.Sprintf("\n\t%s %s %s %s", "poke-cli", styleBold.Render("ability"), "<ability-name>", "[flag]"),
21-
fmt.Sprintf("\n\t%-30s", styleItalic.Render("Use a hyphen when typing a name with a space.")),
20+
styling.StyleBold.Render("USAGE:"),
21+
fmt.Sprintf("\n\t%s %s %s %s", "poke-cli", styling.StyleBold.Render("ability"), "<ability-name>", "[flag]"),
22+
fmt.Sprintf("\n\t%-30s", styling.StyleItalic.Render("Use a hyphen when typing a name with a space.")),
2223
"\n\n",
23-
styleBold.Render("FLAGS:"),
24+
styling.StyleBold.Render("FLAGS:"),
2425
fmt.Sprintf("\n\t%-30s %s", "-p, --pokemon", "Prints Pokémon that learn this ability."),
2526
fmt.Sprintf("\n\t%-30s %s", "-h, --help", "Prints the help menu."),
2627
)
@@ -69,7 +70,7 @@ func AbilityCommand() {
6970
}
7071

7172
capitalizedEffect := cases.Title(language.English).String(strings.Replace(abilityName, "-", " ", -1))
72-
fmt.Println(styleBold.Render(capitalizedEffect))
73+
fmt.Println(styling.StyleBold.Render(capitalizedEffect))
7374
fmt.Println("Effect:", englishShortEffect)
7475

7576
if *pokemonFlag || *shortPokemonFlag {

cmd/natures.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@ import (
55
"fmt"
66
"github.com/charmbracelet/lipgloss"
77
"github.com/charmbracelet/lipgloss/table"
8+
"github.com/digitalghost-dev/poke-cli/styling"
89
"os"
910
)
1011

1112
func NaturesCommand() {
1213

1314
flag.Usage = func() {
14-
helpMessage := helpBorder.Render(
15-
"Get details about Pokémon natures.\n\n",
16-
styleBold.Render("USAGE:"),
17-
fmt.Sprintf("\n\t%s %s %s", "poke-cli", styleBold.Render("natures"), "[flag]"),
18-
"\n\n",
19-
styleBold.Render("FLAGS:"),
20-
fmt.Sprintf("\n\t%-30s %s", "-h, --help", "Prints out the help menu."),
15+
helpMessage := styling.HelpBorder.Render(
16+
"Get details about all natures.\n\n",
17+
styling.StyleBold.Render("USAGE:"),
18+
fmt.Sprintf("\n\t%s %s", "poke-cli", styling.StyleBold.Render("natures")),
2119
)
2220
fmt.Println(helpMessage)
2321
}
@@ -32,20 +30,20 @@ func NaturesCommand() {
3230
fmt.Println("Natures affect the growth of a Pokémon.\n" +
3331
"Each nature increases one of its stats by 10% and decreases one by 10%.\n" +
3432
"Five natures increase and decrease the same stat and therefore have no effect.\n\n" +
35-
styleBold.Render("Nature Chart:"))
33+
styling.StyleBold.Render("Nature Chart:"))
3634

3735
chart := [][]string{
38-
{" ", red.Render("-Attack"), red.Render("-Defense"), red.Render("-Sp. Atk"), red.Render("-Sp. Def"), red.Render("Speed")},
39-
{green.Render("+Attack"), "Hardy", "Lonely", "Adamant", "Naughty", "Brave"},
40-
{green.Render("+Defense"), "Bold", "Docile", "Impish", "Lax", "Relaxed"},
41-
{green.Render("+Sp. Atk"), "Modest", "Mild", "Bashful", "Rash", "Quiet"},
42-
{green.Render("+Sp. Def"), "Calm", "Gentle", "Careful", "Quirky", "Sassy"},
43-
{green.Render("Speed"), "Timid", "Hasty", "Jolly", "Naive", "Serious"},
36+
{" ", styling.Red.Render("-Attack"), styling.Red.Render("-Defense"), styling.Red.Render("-Sp. Atk"), styling.Red.Render("-Sp. Def"), styling.Red.Render("Speed")},
37+
{styling.Green.Render("+Attack"), "Hardy", "Lonely", "Adamant", "Naughty", "Brave"},
38+
{styling.Green.Render("+Defense"), "Bold", "Docile", "Impish", "Lax", "Relaxed"},
39+
{styling.Green.Render("+Sp. Atk"), "Modest", "Mild", "Bashful", "Rash", "Quiet"},
40+
{styling.Green.Render("+Sp. Def"), "Calm", "Gentle", "Careful", "Quirky", "Sassy"},
41+
{styling.Green.Render("Speed"), "Timid", "Hasty", "Jolly", "Naive", "Serious"},
4442
}
4543

4644
t := table.New().
4745
Border(lipgloss.NormalBorder()).
48-
BorderStyle(lipgloss.NewStyle().Foreground(gray)).
46+
BorderStyle(lipgloss.NewStyle().Foreground(styling.Gray)).
4947
BorderRow(true).
5048
BorderColumn(true).
5149
Rows(chart...).

cmd/pokemon.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"github.com/digitalghost-dev/poke-cli/connections"
77
"github.com/digitalghost-dev/poke-cli/flags"
8+
"github.com/digitalghost-dev/poke-cli/styling"
89
"golang.org/x/text/cases"
910
"golang.org/x/text/language"
1011
"math"
@@ -15,16 +16,16 @@ import (
1516
// PokemonCommand processes the Pokémon command
1617
func PokemonCommand() {
1718

18-
hintMessage := styleItalic.Render("options: [sm, md, lg]")
19+
hintMessage := styling.StyleItalic.Render("options: [sm, md, lg]")
1920

2021
flag.Usage = func() {
21-
helpMessage := helpBorder.Render(
22+
helpMessage := styling.HelpBorder.Render(
2223
"Get details about a specific Pokémon.\n\n",
23-
styleBold.Render("USAGE:"),
24-
fmt.Sprintf("\n\t%s %s %s %s", "poke-cli", styleBold.Render("pokemon"), "<pokemon-name>", "[flag]"),
25-
fmt.Sprintf("\n\t%-30s", styleItalic.Render("Use a hyphen when typing a name with a space.")),
24+
styling.StyleBold.Render("USAGE:"),
25+
fmt.Sprintf("\n\t%s %s %s %s", "poke-cli", styling.StyleBold.Render("pokemon"), "<pokemon-name>", "[flag]"),
26+
fmt.Sprintf("\n\t%-30s", styling.StyleItalic.Render("Use a hyphen when typing a name with a space.")),
2627
"\n\n",
27-
styleBold.Render("FLAGS:"),
28+
styling.StyleBold.Render("FLAGS:"),
2829
fmt.Sprintf("\n\t%-30s %s", "-a, --abilities", "Prints the Pokémon's abilities."),
2930
fmt.Sprintf("\n\t%-30s %s", "-i=xx, --image=xx", "Prints out the Pokémon's default sprite."),
3031
fmt.Sprintf("\n\t%5s%-15s", "", hintMessage),
@@ -42,15 +43,15 @@ func PokemonCommand() {
4243
// Pre-parse validation for empty image flag values
4344
for _, arg := range args {
4445
if strings.HasPrefix(arg, "-i=") && len(arg) == 3 {
45-
fmt.Println(errorBorder.Render(errorColor.Render("Error!"), "\nThe image flag (-i or --image) requires a non-empty value.\nValid sizes are: lg, md, sm."))
46+
fmt.Println(styling.ErrorBorder.Render(styling.ErrorColor.Render("Error!"), "\nThe image flag (-i or --image) requires a non-empty value.\nValid sizes are: lg, md, sm."))
4647
os.Exit(1)
4748
}
4849
if strings.HasPrefix(arg, "--image=") && len(arg) == 8 {
49-
fmt.Println(errorBorder.Render(errorColor.Render("Error!"), "\nThe image flag (-i or --image) requires a non-empty value.\nValid sizes are: lg, md, sm."))
50+
fmt.Println(styling.ErrorBorder.Render(styling.ErrorColor.Render("Error!"), "\nThe image flag (-i or --image) requires a non-empty value.\nValid sizes are: lg, md, sm."))
5051
os.Exit(1)
5152
}
5253
if strings.HasPrefix(arg, "-image=") && len(arg) == 7 {
53-
fmt.Println(errorBorder.Render(errorColor.Render("Error!"), "\nThe image flag (-i or --image) requires a non-empty value.\nValid sizes are: lg, md, sm."))
54+
fmt.Println(styling.ErrorBorder.Render(styling.ErrorColor.Render("Error!"), "\nThe image flag (-i or --image) requires a non-empty value.\nValid sizes are: lg, md, sm."))
5455
os.Exit(1)
5556
}
5657
}

cmd/types.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/charmbracelet/lipgloss"
99
"github.com/charmbracelet/x/term"
1010
"github.com/digitalghost-dev/poke-cli/connections"
11+
"github.com/digitalghost-dev/poke-cli/styling"
1112
"golang.org/x/text/cases"
1213
"golang.org/x/text/language"
1314
"os"
@@ -48,9 +49,9 @@ func (m model) View() string {
4849
}
4950
// Otherwise, display the table
5051
return "Select a type!\n" +
51-
typesTableBorder.Render(m.table.View()) +
52+
styling.TypesTableBorder.Render(m.table.View()) +
5253
"\n" +
53-
keyMenu.Render("↑ (move up) • ↓ (move down)\nctrl+c | esc (quit) • enter (select)")
54+
styling.KeyMenu.Render("↑ (move up) • ↓ (move down)\nctrl+c | esc (quit) • enter (select)")
5455
}
5556

5657
// Function to display type details after a type is selected
@@ -69,11 +70,11 @@ func displayTypeDetails(typesName string, endpoint string) {
6970

7071
// Format selected type
7172
selectedType := cases.Title(language.English).String(typeName)
72-
coloredType := lipgloss.NewStyle().Foreground(lipgloss.Color(getTypeColor(typeName))).Render(selectedType)
73+
coloredType := lipgloss.NewStyle().Foreground(lipgloss.Color(styling.GetTypeColor(typeName))).Render(selectedType)
7374

7475
fmt.Printf("You selected the %s type.\nNumber of Pokémon with type: %d\nNumber of moves with type: %d\n", coloredType, len(typesStruct.Pokemon), len(typesStruct.Moves))
7576
fmt.Println("----------")
76-
fmt.Println(styleBold.Render("Damage Chart:"))
77+
fmt.Println(styling.StyleBold.Render("Damage Chart:"))
7778

7879
physicalWidth, _, _ := term.GetSize(uintptr(int(os.Stdout.Fd())))
7980
doc := strings.Builder{}
@@ -82,7 +83,7 @@ func displayTypeDetails(typesName string, endpoint string) {
8283
buildListItems := func(items []struct{ Name, URL string }) string {
8384
var itemList []string
8485
for _, item := range items {
85-
color := getTypeColor(item.Name)
86+
color := styling.GetTypeColor(item.Name)
8687
coloredStyle := lipgloss.NewStyle().Foreground(lipgloss.Color(color))
8788
coloredItem := coloredStyle.Render(cases.Title(language.English).String(item.Name))
8889
itemList = append(itemList, listItem(coloredItem))
@@ -187,12 +188,12 @@ func tableGeneration(endpoint string) table.Model {
187188
func TypesCommand() {
188189

189190
flag.Usage = func() {
190-
helpMessage := helpBorder.Render(
191+
helpMessage := styling.HelpBorder.Render(
191192
"Get details about a specific typing.\n\n",
192-
styleBold.Render("USAGE:"),
193-
fmt.Sprintf("\n\t%s %s %s", "poke-cli", styleBold.Render("types"), "[flag]"),
193+
styling.StyleBold.Render("USAGE:"),
194+
fmt.Sprintf("\n\t%s %s %s", "poke-cli", styling.StyleBold.Render("types"), "[flag]"),
194195
"\n\n",
195-
styleBold.Render("FLAGS:"),
196+
styling.StyleBold.Render("FLAGS:"),
196197
fmt.Sprintf("\n\t%-30s %s", "-h, --help", "Prints out the help menu."),
197198
)
198199
fmt.Println(helpMessage)

cmd/validateargs.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"flag"
55
"fmt"
6+
"github.com/digitalghost-dev/poke-cli/styling"
67
"os"
78
)
89

@@ -21,12 +22,12 @@ func ValidateAbilityArgs(args []string) error {
2122
handleHelpFlag(args)
2223

2324
if len(args) > 4 {
24-
errMessage := errorBorder.Render(errorColor.Render("Error!"), "\nToo many arguments")
25+
errMessage := styling.ErrorBorder.Render(styling.ErrorColor.Render("Error!"), "\nToo many arguments")
2526
return fmt.Errorf("%s", errMessage)
2627
}
2728

2829
if len(args) == 2 {
29-
errMessage := errorBorder.Render(errorColor.Render("Error!"), "\nPlease specify an ability")
30+
errMessage := styling.ErrorBorder.Render(styling.ErrorColor.Render("Error!"), "\nPlease specify an ability")
3031
return fmt.Errorf("%s", errMessage)
3132
}
3233

@@ -38,17 +39,17 @@ func ValidateNaturesArgs(args []string) error {
3839
handleHelpFlag(args)
3940

4041
if len(args) > 3 {
41-
errMessage := errorBorder.Render(errorColor.Render("Error!"), "\nToo many arguments")
42+
errMessage := styling.ErrorBorder.Render(styling.ErrorColor.Render("Error!"), "\nToo many arguments")
4243
return fmt.Errorf("%s", errMessage)
4344
}
4445

4546
// Check if there are exactly 3 arguments and the third argument is neither '-h' nor '--help'
4647
// If true, return an error message since only '-h' and '--help' are allowed after 'types'
4748
if len(args) == 3 && (args[2] != "-h" && args[2] != "--help") {
48-
errorTitle := errorColor.Render("Error!")
49+
errorTitle := styling.ErrorColor.Render("Error!")
4950
errorString := "\nThe only currently available options\nafter [natures] command are '-h' or '--help'"
5051
finalErrorMessage := errorTitle + errorString
51-
renderedError := errorBorder.Render(finalErrorMessage)
52+
renderedError := styling.ErrorBorder.Render(finalErrorMessage)
5253
return fmt.Errorf("%s", renderedError)
5354
}
5455

@@ -61,8 +62,8 @@ func ValidatePokemonArgs(args []string) error {
6162

6263
// Check if the number of arguments is less than 3
6364
if len(args) < 3 {
64-
errMessage := errorBorder.Render(
65-
errorColor.Render("Error!"),
65+
errMessage := styling.ErrorBorder.Render(
66+
styling.ErrorColor.Render("Error!"),
6667
"\nPlease declare a Pokémon's name after the [pokemon] command",
6768
"\nRun 'poke-cli pokemon -h' for more details",
6869
"\nerror: insufficient arguments",
@@ -72,8 +73,8 @@ func ValidatePokemonArgs(args []string) error {
7273

7374
// Check if there are too many arguments
7475
if len(args) > 7 {
75-
errMessage := errorBorder.Render(
76-
errorColor.Render("Error!"),
76+
errMessage := styling.ErrorBorder.Render(
77+
styling.ErrorColor.Render("Error!"),
7778
"\nToo many arguments",
7879
)
7980
return fmt.Errorf("%s", errMessage)
@@ -84,34 +85,34 @@ func ValidatePokemonArgs(args []string) error {
8485
for _, arg := range args[3:] {
8586
// Check for single `-` or `--` which are invalid
8687
if arg == "-" || arg == "--" {
87-
errorTitle := errorColor.Render("Error!")
88+
errorTitle := styling.ErrorColor.Render("Error!")
8889
errorString := fmt.Sprintf(
8990
"\nInvalid argument '%s'. Single '-' or '--' is not allowed.\nPlease use valid flags.",
9091
arg,
9192
)
9293
finalErrorMessage := errorTitle + errorString
93-
renderedError := errorBorder.Render(finalErrorMessage)
94+
renderedError := styling.ErrorBorder.Render(finalErrorMessage)
9495
return fmt.Errorf("%s", renderedError)
9596
}
9697

9798
// Check if the argument starts with a flag prefix but is invalid
9899
if arg[0] != '-' {
99-
errorTitle := errorColor.Render("Error!")
100+
errorTitle := styling.ErrorColor.Render("Error!")
100101
errorString := fmt.Sprintf(
101102
"\nInvalid argument '%s'.\nOnly flags are allowed after declaring a Pokémon's name",
102103
arg,
103104
)
104105
finalErrorMessage := errorTitle + errorString
105-
renderedError := errorBorder.Render(finalErrorMessage)
106+
renderedError := styling.ErrorBorder.Render(finalErrorMessage)
106107
return fmt.Errorf("%s", renderedError)
107108
}
108109
}
109110
}
110111

111112
// Add a check for invalid Pokémon names (e.g., names starting with `-`)
112113
if len(args[2]) > 0 && args[2][0] == '-' {
113-
errMessage := errorBorder.Render(
114-
errorColor.Render("Error!"),
114+
errMessage := styling.ErrorBorder.Render(
115+
styling.ErrorColor.Render("Error!"),
115116
"\nPokémon not found. Perhaps a typo in the name?",
116117
)
117118
return fmt.Errorf("%s", errMessage)
@@ -126,17 +127,17 @@ func ValidateTypesArgs(args []string) error {
126127
handleHelpFlag(args)
127128

128129
if len(args) > 3 {
129-
errMessage := errorBorder.Render(errorColor.Render("Error!"), "\nToo many arguments")
130+
errMessage := styling.ErrorBorder.Render(styling.ErrorColor.Render("Error!"), "\nToo many arguments")
130131
return fmt.Errorf("%s", errMessage)
131132
}
132133

133134
// Check if there are exactly 3 arguments and the third argument is neither '-h' nor '--help'
134135
// If true, return an error message since only '-h' and '--help' are allowed after 'types'
135136
if len(args) == 3 && (args[2] != "-h" && args[2] != "--help") {
136-
errorTitle := errorColor.Render("Error!")
137+
errorTitle := styling.ErrorColor.Render("Error!")
137138
errorString := "\nThe only currently available options\nafter [types] command are '-h' or '--help'"
138139
finalErrorMessage := errorTitle + errorString
139-
renderedError := errorBorder.Render(finalErrorMessage)
140+
renderedError := styling.ErrorBorder.Render(finalErrorMessage)
140141
return fmt.Errorf("%s", renderedError)
141142
}
142143

0 commit comments

Comments
 (0)