It seems pretty odd that param initialization can do different things depending on the type of the 3rd argument. I think it is easier to understand if the 3rd argument always means 'options', and the 4th argument always means 'description'.
Luckily most of the callers were already conforming to this pattern; just a few of them had to be changed to add an additional argument between the [:required, :optional] declaration and the description. Along with this, rationalize the param declarations in features.rb so that the options are set to [], instead of nil. This matches what param declarations do by default. Signed-off-by: Chris Lalancette <[email protected]> --- server/lib/deltacloud/base_driver/features.rb | 14 ++++++-------- server/lib/deltacloud/validation.rb | 8 ++------ server/server.rb | 6 +++--- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/server/lib/deltacloud/base_driver/features.rb b/server/lib/deltacloud/base_driver/features.rb index 65c4cba..4d557e6 100644 --- a/server/lib/deltacloud/base_driver/features.rb +++ b/server/lib/deltacloud/base_driver/features.rb @@ -151,22 +151,21 @@ module Deltacloud declare_feature :images, :owner_id do description "Filter images using owner id" operation :index do - param :owner_id, :string, :optional, nil, "Owner ID" + param :owner_id, :string, :optional, [], "Owner ID" end end declare_feature :instances, :user_name do description "Accept a user-defined name on instance creation" operation :create do - param :name, :string, :optional, nil, - "The user-defined name" + param :name, :string, :optional, [], "The user-defined name" end end declare_feature :instances, :user_data do description "Make user-defined data available on a special webserver" operation :create do - param :user_data, :string, :optional, nil, + param :user_data, :string, :optional, [], "Base64 encoded user data will be published to internal webserver" end end @@ -175,7 +174,7 @@ module Deltacloud description "Accept up to 5 files to be placed into the instance before launch." operation :create do 1.upto(5) do |i| - param :"path#{i}", :string, :optional, nil, + param :"path#{i}", :string, :optional, [], "Path where to place the #{i.ordinalize} file, up to 255 characters" param :"content#{i}", :string, :optional, nil, "Contents for the #{i.ordinalize} file, up to 10 kB, Base64 encoded" @@ -186,15 +185,14 @@ module Deltacloud declare_feature :instances, :security_group do description "Put instance in one or more security groups on launch" operation :create do - param :security_group, :array, :optional, nil, + param :security_group, :array, :optional, [], "Array of security group names" end end declare_feature :instances, :authentication_key do operation :create do - param :keyname, :string, :optional, nil - "EC2 key authentification method" + param :keyname, :string, :optional, [], "Key authentification method" end operation :show do end diff --git a/server/lib/deltacloud/validation.rb b/server/lib/deltacloud/validation.rb index 0375c29..5c75d18 100644 --- a/server/lib/deltacloud/validation.rb +++ b/server/lib/deltacloud/validation.rb @@ -35,12 +35,8 @@ module Deltacloud::Validation @name = args[0] @klass = args[1] || :string @type = args[2] || :optional - if args[3] and args[3].class.eql?(String) - @description = args[3] - @options = [] - end - @options ||= args[3] || [] - @description ||= args[4] || '' + @options = args[3] || [] + @description = args[4] || '' end def required? diff --git a/server/server.rb b/server/server.rb index a27b7ef..07ccc9b 100644 --- a/server/server.rb +++ b/server/server.rb @@ -437,9 +437,9 @@ END END with_capability :run_on_instance param :id, :string, :required - param :cmd, :string, :required, "Shell command to run on instance" - param :private_key, :string, :optional, "Private key in PEM format for authentication" - param :password, :string, :optional, "Password used for authentication" + param :cmd, :string, :required, [], "Shell command to run on instance" + param :private_key, :string, :optional, [], "Private key in PEM format for authentication" + param :password, :string, :optional, [], "Password used for authentication" control do @output = driver.run_on_instance(credentials, params) respond_to do |format| -- 1.7.4.4
