diff --git a/cli/create_server_operation.go b/cli/create_server_operation.go index 81cabff..d22baaa 100755 --- a/cli/create_server_operation.go +++ b/cli/create_server_operation.go @@ -103,23 +103,20 @@ func (o *CreateServerOperation) registerFlags(cmd *cobra.Command) { Description: "User data to set on the server", Required: false, }, - } - - o.BodyAttributesFlags.Register(schema) -} - -func (o *CreateServerOperation) preRun(cmd *cobra.Command, args []string) { - projects := fetchUserProjects() - schema := &cmdflag.FlagsSchema{ &cmdflag.String{ Name: "project", Label: "Project", Description: "The project (ID or Slug) to deploy the server", Required: true, - Options: projects, }, } - o.BodyAttributesFlags.AppendFlags(schema) + + o.BodyAttributesFlags.Register(schema) +} + +func (o *CreateServerOperation) preRun(cmd *cobra.Command, args []string) { + projects := fetchUserProjects() + o.BodyAttributesFlags.AddFlagOption("project", projects) o.BodyAttributesFlags.PreRun(cmd, args) } diff --git a/cli/create_virtual_network_operation.go b/cli/create_virtual_network_operation.go index 8eab438..8a38d2d 100755 --- a/cli/create_virtual_network_operation.go +++ b/cli/create_virtual_network_operation.go @@ -57,23 +57,20 @@ func (o *CreateVirtualNetworkOperation) registerFlags(cmd *cobra.Command) { Options: virtualNetwork.SupportedSites, Required: false, }, - } - - o.BodyAttributesFlags.Register(schema) -} - -func (o *CreateVirtualNetworkOperation) preRun(cmd *cobra.Command, args []string) { - projects := fetchUserProjects() - schema := &cmdflag.FlagsSchema{ &cmdflag.String{ Name: "project", Label: "Project ID or Slug", Description: "Project ID or Slug", Required: true, - Options: projects, }, } - o.BodyAttributesFlags.AppendFlags(schema) + + o.BodyAttributesFlags.Register(schema) +} + +func (o *CreateVirtualNetworkOperation) preRun(cmd *cobra.Command, args []string) { + projects := fetchUserProjects() + o.BodyAttributesFlags.AddFlagOption("project", projects) o.BodyAttributesFlags.PreRun(cmd, args) } diff --git a/cli/delete_project_ssh_key_operation.go b/cli/delete_project_ssh_key_operation.go index eddcf7c..2fb566e 100755 --- a/cli/delete_project_ssh_key_operation.go +++ b/cli/delete_project_ssh_key_operation.go @@ -48,23 +48,20 @@ func (o *DeleteSSHKeyOperation) registerFlags(cmd *cobra.Command) { Description: "ID from the SSH Key you want to update", Required: true, }, - } - - o.PathParamFlags.Register(schema) -} - -func (o *DeleteSSHKeyOperation) preRun(cmd *cobra.Command, args []string) { - projects := fetchUserProjects() - schema := &cmdflag.FlagsSchema{ &cmdflag.String{ Name: "project", Label: "Project ID or Slug", Description: "Project ID or Slug", Required: true, - Options: projects, }, } - o.PathParamFlags.AppendFlags(schema) + + o.PathParamFlags.Register(schema) +} + +func (o *DeleteSSHKeyOperation) preRun(cmd *cobra.Command, args []string) { + projects := fetchUserProjects() + o.PathParamFlags.AddFlagOption("project", projects) o.PathParamFlags.PreRun(cmd, args) } diff --git a/cli/post_project_ssh_key_operation.go b/cli/post_project_ssh_key_operation.go index 4e6ee6d..49e4b7e 100755 --- a/cli/post_project_ssh_key_operation.go +++ b/cli/post_project_ssh_key_operation.go @@ -43,7 +43,13 @@ func (o *CreateSSHKeyOperation) registerFlags(cmd *cobra.Command) { o.PathParamFlags = cmdflag.Flags{FlagSet: cmd.Flags()} o.BodyAttributesFlags = cmdflag.Flags{FlagSet: cmd.Flags()} - pathParamsSchema := &cmdflag.FlagsSchema{} + pathParamsSchema := &cmdflag.FlagsSchema{ + &cmdflag.String{ + Name: "project", + Label: "Project ID or Slug", + Description: "Project ID or Slug", + Required: true, + }} bodyFlagsSchema := &cmdflag.FlagsSchema{ &cmdflag.String{ @@ -66,16 +72,7 @@ func (o *CreateSSHKeyOperation) registerFlags(cmd *cobra.Command) { func (o *CreateSSHKeyOperation) preRun(cmd *cobra.Command, args []string) { projects := fetchUserProjects() - schema := &cmdflag.FlagsSchema{ - &cmdflag.String{ - Name: "project", - Label: "ID or Slug from the project you want to add the SSH Key", - Description: "ID or Slug from the project you want to add the SSH Key", - Required: true, - Options: projects, - }, - } - o.PathParamFlags.AppendFlags(schema) + o.PathParamFlags.AddFlagOption("project", projects) o.PathParamFlags.PreRun(cmd, args) o.BodyAttributesFlags.PreRun(cmd, args) diff --git a/cli/put_project_ssh_key_operation.go b/cli/put_project_ssh_key_operation.go index 8ce92c7..9a8d6d0 100755 --- a/cli/put_project_ssh_key_operation.go +++ b/cli/put_project_ssh_key_operation.go @@ -50,6 +50,12 @@ func (o *UpdateSSHKeyOperation) registerFlags(cmd *cobra.Command) { Description: "ID from the SSH Key you want to update", Required: true, }, + &cmdflag.String{ + Name: "project", + Label: "Project ID or Slug", + Description: "Project ID or Slug", + Required: true, + }, } bodyFlagsSchema := &cmdflag.FlagsSchema{ @@ -73,16 +79,7 @@ func (o *UpdateSSHKeyOperation) registerFlags(cmd *cobra.Command) { func (o *UpdateSSHKeyOperation) preRun(cmd *cobra.Command, args []string) { projects := fetchUserProjects() - schema := &cmdflag.FlagsSchema{ - &cmdflag.String{ - Name: "project", - Label: "Project ID or Slug", - Description: "Project ID or Slug", - Required: true, - Options: projects, - }, - } - o.PathParamFlags.AppendFlags(schema) + o.PathParamFlags.AddFlagOption("project", projects) o.PathParamFlags.PreRun(cmd, args) o.BodyAttributesFlags.PreRun(cmd, args) diff --git a/internal/cmdflag/bool.go b/internal/cmdflag/bool.go index 65d63aa..d08fb98 100644 --- a/internal/cmdflag/bool.go +++ b/internal/cmdflag/bool.go @@ -51,3 +51,7 @@ func (f *Bool) description() string { return fmt.Sprintf("[Required] %v", f.Description) } + +func (f *Bool) UpdateOptions(options interface{}) { + //Function needed to implement interface +} diff --git a/internal/cmdflag/int64.go b/internal/cmdflag/int64.go index f1d5df6..aadf74a 100644 --- a/internal/cmdflag/int64.go +++ b/internal/cmdflag/int64.go @@ -51,3 +51,7 @@ func (f *Int64) description() string { return fmt.Sprintf("[Required] %v", f.Description) } + +func (f *Int64) UpdateOptions(options interface{}) { + //Function needed to implement interface +} diff --git a/internal/cmdflag/main.go b/internal/cmdflag/main.go index d7444ac..64ee4d2 100644 --- a/internal/cmdflag/main.go +++ b/internal/cmdflag/main.go @@ -13,6 +13,7 @@ import ( type FlagSchema interface { Register(f *pflag.FlagSet) + UpdateOptions(options interface{}) GetValue() interface{} GetName() string Prompt() prompt.PromptInput @@ -35,11 +36,11 @@ func (f *Flags) Register(s *FlagsSchema) { } } -func (f *Flags) AppendFlags(s *FlagsSchema) { - *f.schema = append(*f.schema, *s...) - - for _, v := range *s { - v.Register(f.FlagSet) +func (f *Flags) AddFlagOption(flagName string, option []string) { + for _, flag := range *f.schema { + if flag.GetName() == flagName { + flag.UpdateOptions(option) + } } } diff --git a/internal/cmdflag/string.go b/internal/cmdflag/string.go index bc29807..55a7469 100644 --- a/internal/cmdflag/string.go +++ b/internal/cmdflag/string.go @@ -57,3 +57,8 @@ func (f *String) description() string { return fmt.Sprintf("[Required] %v", f.Description) } + +func (f *String) UpdateOptions(options interface{}) { + option := options.([]string) + f.Options = append(f.Options, option...) +} diff --git a/internal/cmdflag/string_slice.go b/internal/cmdflag/string_slice.go index 1ed7f29..754bb5a 100644 --- a/internal/cmdflag/string_slice.go +++ b/internal/cmdflag/string_slice.go @@ -51,3 +51,7 @@ func (f *StringSlice) description() string { return fmt.Sprintf("[Required] %v", f.Description) } + +func (f *StringSlice) UpdateOptions(options interface{}) { + //Function needed to implement interface +}