|
1 | 1 | package mode |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
| 5 | + "strings" |
| 6 | + |
4 | 7 | goflags "github.com/ralvarezdev/go-flags" |
5 | 8 | ) |
6 | 9 |
|
7 | 10 | const ( |
8 | | - // FlagName is the name of the mode flag |
| 11 | + // FlagName is the name of the mode flag. |
9 | 12 | FlagName = "m" |
10 | 13 |
|
11 | | - // FlagUsage is the usage of the mode flag |
12 | | - FlagUsage = "Specify mode. Allowed values are: dev, prod, debug, migrate. Default is the dev mode" |
| 14 | + // FlagUsage is the usage of the mode flag. |
| 15 | + // It describes allowed values and the default mode. |
| 16 | + FlagUsage = "Specify mode. Allowed values are: %s. Default is the %s mode." |
13 | 17 | ) |
14 | 18 |
|
15 | 19 | type ( |
16 | | - // Mode is the environment mode |
| 20 | + // Mode represents the environment mode as a string. |
17 | 21 | Mode string |
18 | 22 |
|
19 | | - // Flag is a custom flag type for mode |
| 23 | + // Flag is a custom flag type for mode, embedding goflags.Flag. |
20 | 24 | Flag struct { |
21 | 25 | goflags.Flag |
22 | 26 | } |
23 | 27 | ) |
24 | 28 |
|
25 | 29 | var ( |
26 | | - // Dev is the development mode |
| 30 | + // Dev is the development mode. |
27 | 31 | Dev Mode = "dev" |
28 | 32 |
|
29 | | - // Prod is the production mode |
| 33 | + // Prod is the production mode. |
30 | 34 | Prod Mode = "prod" |
31 | 35 |
|
32 | | - // Debug is the debug mode |
| 36 | + // Debug is the debug mode. |
33 | 37 | Debug Mode = "debug" |
34 | 38 |
|
35 | | - // Migrate is the migration mode |
| 39 | + // Migrate is the migration mode. |
36 | 40 | Migrate Mode = "migrate" |
| 41 | + |
| 42 | + // DefaultMode is the default mode (development). |
| 43 | + DefaultMode = Dev |
| 44 | + |
| 45 | + // AllowedModes is the list of allowed modes. |
| 46 | + AllowedModes = []string{ |
| 47 | + string(Dev), string(Prod), string(Debug), string(Migrate), |
| 48 | + } |
| 49 | + |
| 50 | + // ModeFlag is the environment mode flag instance. |
| 51 | + ModeFlag = NewFlag( |
| 52 | + string(DefaultMode), |
| 53 | + nil, |
| 54 | + AllowedModes, |
| 55 | + FlagName, |
| 56 | + fmt.Sprintf( |
| 57 | + FlagUsage, |
| 58 | + strings.Join(AllowedModes, ", "), |
| 59 | + string(Dev), |
| 60 | + ), |
| 61 | + ) |
37 | 62 | ) |
38 | 63 |
|
39 | | -// NewFlag creates a new Flag with allowed values |
40 | | -func NewFlag(defaultValue string, allowed []string) *Flag { |
| 64 | +// NewFlag creates a new Flag with allowed values. |
| 65 | +// |
| 66 | +// Parameters: |
| 67 | +// |
| 68 | +// defaultValue - the default value for the flag. |
| 69 | +// value - pointer to a string to store the flag value (can be nil). |
| 70 | +// allowed - slice of allowed string values. |
| 71 | +// name - the flag name. |
| 72 | +// usage - the usage description for the flag. |
| 73 | +// |
| 74 | +// Returns: |
| 75 | +// |
| 76 | +// A pointer to the created Flag. |
| 77 | +func NewFlag( |
| 78 | + defaultValue string, |
| 79 | + value *string, |
| 80 | + allowed []string, |
| 81 | + name string, |
| 82 | + usage string, |
| 83 | +) *Flag { |
41 | 84 | return &Flag{ |
42 | | - Flag: *goflags.NewFlag(defaultValue, allowed), |
| 85 | + Flag: *goflags.NewFlag(defaultValue, value, allowed, name, usage), |
43 | 86 | } |
44 | 87 | } |
45 | 88 |
|
46 | | -// Mode returns the mode |
47 | | -func (f *Flag) Mode() Mode { |
48 | | - if f.IsProd() { |
49 | | - return Prod |
50 | | - } |
51 | | - if f.IsDev() { |
52 | | - return Dev |
53 | | - } |
54 | | - if f.IsDebug() { |
55 | | - return Debug |
56 | | - } |
57 | | - return Migrate |
| 89 | +// Default returns the default value of the flag. |
| 90 | +// |
| 91 | +// Returns: |
| 92 | +// |
| 93 | +// The default value. |
| 94 | +func (f *Flag) Default() string { |
| 95 | + return f.Default() |
58 | 96 | } |
59 | 97 |
|
60 | | -// IsDev returns true if it's the development mode |
| 98 | +// IsDev returns true if the current mode is development. |
| 99 | +// |
| 100 | +// Returns: |
| 101 | +// |
| 102 | +// True if development mode, false otherwise. |
61 | 103 | func (f *Flag) IsDev() bool { |
62 | 104 | return f.Value() == string(Dev) |
63 | 105 | } |
64 | 106 |
|
65 | | -// IsProd returns true if it's the production mode |
| 107 | +// IsProd returns true if the current mode is production. |
| 108 | +// |
| 109 | +// Returns: |
| 110 | +// |
| 111 | +// True if production mode, false otherwise. |
66 | 112 | func (f *Flag) IsProd() bool { |
67 | 113 | return f.Value() == string(Prod) |
68 | 114 | } |
69 | 115 |
|
70 | | -// IsDebug returns true if it's the debug mode |
| 116 | +// IsDebug returns true if the current mode is debug. |
| 117 | +// |
| 118 | +// Returns: |
| 119 | +// |
| 120 | +// True if debug mode, false otherwise. |
71 | 121 | func (f *Flag) IsDebug() bool { |
72 | 122 | return f.Value() == string(Debug) |
73 | 123 | } |
74 | 124 |
|
75 | | -// IsMigrate returns true if it's the migration mode |
| 125 | +// IsMigrate returns true if the current mode is migration. |
| 126 | +// |
| 127 | +// Returns: |
| 128 | +// |
| 129 | +// True if migration mode, false otherwise. |
76 | 130 | func (f *Flag) IsMigrate() bool { |
77 | 131 | return f.Value() == string(Migrate) |
78 | 132 | } |
79 | 133 |
|
80 | | -// ModeFlag is the environment mode |
81 | | -var ModeFlag = NewFlag( |
82 | | - string(Dev), |
83 | | - []string{string(Dev), string(Prod), string(Debug), string(Migrate)}, |
84 | | -) |
85 | | - |
86 | | -// init initializes the mode flag |
| 134 | +// init initializes the mode flag. |
87 | 135 | func init() { |
88 | | - goflags.SetFlag(ModeFlag, FlagName, FlagUsage) |
| 136 | + ModeFlag.SetFlag() |
89 | 137 | } |
0 commit comments