Merge pull request #57 from relaxdiego/feature/28
Add ability to specify an alias for a given request param
This allows us to call params with the more familiar Ruby
case/capitalization. For instance, defining the following:
param :imageRef, alias: :image_ref
in a request file makes the following possible:
session.compute_service.request :create_server do |params|
params[:imageRef] = 'something'
end
session.compute_service.request :create_server do |params|
params.image_ref = 'something'
end
NOTE: At this point, params can only be called via method
calls and not via the [] accessor.
This commit is contained in:
@@ -128,11 +128,27 @@ module Aviator
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def param_aliases
|
||||||
|
@param_aliases ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
def params_class
|
def params_class
|
||||||
all_params = required_params + optional_params
|
all_params = required_params + optional_params
|
||||||
|
param_aliases = self.param_aliases
|
||||||
|
|
||||||
if all_params.length > 0
|
if all_params.length > 0
|
||||||
@params_class ||= Struct.new(*all_params)
|
@params_class ||= Struct.new(*all_params) do
|
||||||
|
param_aliases.each do |param_alias, param_name|
|
||||||
|
define_method param_alias do
|
||||||
|
self[param_name]
|
||||||
|
end
|
||||||
|
|
||||||
|
define_method "#{ param_alias }=" do |value|
|
||||||
|
self[param_name] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@params_class
|
@params_class
|
||||||
@@ -182,6 +198,10 @@ module Aviator
|
|||||||
opts = opts.with_indifferent_access
|
opts = opts.with_indifferent_access
|
||||||
list = (opts[:required] == false ? optional_params : required_params)
|
list = (opts[:required] == false ? optional_params : required_params)
|
||||||
list << param_name unless optional_params.include?(param_name)
|
list << param_name unless optional_params.include?(param_name)
|
||||||
|
|
||||||
|
if opts[:alias]
|
||||||
|
self.param_aliases[opts[:alias]] = param_name
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ module Aviator
|
|||||||
|
|
||||||
param :id, required: true
|
param :id, required: true
|
||||||
param :name, required: true
|
param :name, required: true
|
||||||
param :flavorRef, required: true
|
param :flavorRef, required: true, alias: :flavor_ref
|
||||||
|
|
||||||
|
|
||||||
def body
|
def body
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ module Aviator
|
|||||||
link 'additional spec',
|
link 'additional spec',
|
||||||
'https://answers.launchpad.net/nova/+question/228462'
|
'https://answers.launchpad.net/nova/+question/228462'
|
||||||
|
|
||||||
param :adminPass, required: true
|
param :adminPass, required: true, alias: :admin_pass
|
||||||
param :id, required: true
|
param :id, required: true
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ module Aviator
|
|||||||
link 'documentation',
|
link 'documentation',
|
||||||
'http://docs.openstack.org/api/openstack-compute/2/content/CreateServers.html'
|
'http://docs.openstack.org/api/openstack-compute/2/content/CreateServers.html'
|
||||||
|
|
||||||
param :accessIPv4, required: false
|
param :accessIPv4, required: false, alias: :access_ipv4
|
||||||
param :accessIPv6, required: false
|
param :accessIPv6, required: false, alias: :access_ipv6
|
||||||
param :adminPass, required: false
|
param :adminPass, required: false, alias: :admin_pass
|
||||||
param :imageRef, required: true
|
param :imageRef, required: true, alias: :image_ref
|
||||||
param :flavorRef, required: true
|
param :flavorRef, required: true, alias: :flavor_ref
|
||||||
param :metadata, required: false
|
param :metadata, required: false
|
||||||
param :name, required: true
|
param :name, required: true
|
||||||
param :networks, required: false
|
param :networks, required: false
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ module Aviator
|
|||||||
|
|
||||||
|
|
||||||
param :id, required: true
|
param :id, required: true
|
||||||
param :networkID, required: false
|
param :networkID, required: false, alias: :network_id
|
||||||
|
|
||||||
|
|
||||||
def headers
|
def headers
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ module Aviator
|
|||||||
'http://docs.openstack.org/api/openstack-compute/2/content/List_Flavors-d1e4188.html'
|
'http://docs.openstack.org/api/openstack-compute/2/content/List_Flavors-d1e4188.html'
|
||||||
|
|
||||||
param :details, required: false
|
param :details, required: false
|
||||||
param :minDisk, required: false
|
param :minDisk, required: false, alias: :min_disk
|
||||||
param :minRam, required: false
|
param :minRam, required: false, alias: :min_ram
|
||||||
param :marker, required: false
|
param :marker, required: false
|
||||||
param :limit, required: false
|
param :limit, required: false
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ module Aviator
|
|||||||
param :server, required: false
|
param :server, required: false
|
||||||
param :name, required: false
|
param :name, required: false
|
||||||
param :status, required: false
|
param :status, required: false
|
||||||
param 'changes-since', required: false
|
param 'changes-since', required: false, alias: :changes_since
|
||||||
param :marker, required: false
|
param :marker, required: false
|
||||||
param :limit, required: false
|
param :limit, required: false
|
||||||
param :type, required: false
|
param :type, required: false
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ module Aviator
|
|||||||
param :marker, required: false
|
param :marker, required: false
|
||||||
param :server, required: false
|
param :server, required: false
|
||||||
param :status, required: false
|
param :status, required: false
|
||||||
param 'changes-since', required: false
|
param 'changes-since', required: false, alias: :changes_since
|
||||||
|
|
||||||
|
|
||||||
def headers
|
def headers
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ module Aviator
|
|||||||
link 'documentation',
|
link 'documentation',
|
||||||
'http://docs.openstack.org/api/openstack-compute/2/content/Rebuild_Server-d1e3538.html'
|
'http://docs.openstack.org/api/openstack-compute/2/content/Rebuild_Server-d1e3538.html'
|
||||||
|
|
||||||
param :accessIPv4, required: false
|
param :accessIPv4, required: false, alias: :access_ipv4
|
||||||
param :accessIPv6, required: false
|
param :accessIPv6, required: false, alias: :access_ipv6
|
||||||
param :adminPass, required: true
|
param :adminPass, required: true, alias: :admin_pass
|
||||||
param :id, required: true
|
param :id, required: true
|
||||||
param :imageRef, required: true
|
param :imageRef, required: true, alias: :image_ref
|
||||||
param :metadata, required: false
|
param :metadata, required: false
|
||||||
param :name, required: true
|
param :name, required: true
|
||||||
param :personality, required: false
|
param :personality, required: false
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ module Aviator
|
|||||||
link 'documentation',
|
link 'documentation',
|
||||||
'http://docs.openstack.org/api/openstack-compute/2/content/ServerUpdate.html'
|
'http://docs.openstack.org/api/openstack-compute/2/content/ServerUpdate.html'
|
||||||
|
|
||||||
param :accessIPv4, required: false
|
param :accessIPv4, required: false, alias: :access_ipv4
|
||||||
param :accessIPv6, required: false
|
param :accessIPv6, required: false, alias: :access_ipv6
|
||||||
param :id, required: true
|
param :id, required: true
|
||||||
param :name, required: false
|
param :name, required: false
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ module Aviator
|
|||||||
|
|
||||||
param :email, required: false
|
param :email, required: false
|
||||||
param :enabled, required: false
|
param :enabled, required: false
|
||||||
param :tenantId, required: false
|
param :tenantId, required: false, alias: :tenant_id
|
||||||
|
|
||||||
|
|
||||||
def body
|
def body
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ module Aviator
|
|||||||
param :password, required: false
|
param :password, required: false
|
||||||
param :email, required: false
|
param :email, required: false
|
||||||
param :enabled, required: false
|
param :enabled, required: false
|
||||||
param :tenantId, required: false
|
param :tenantId, required: false, alias: :tenant_id
|
||||||
|
|
||||||
|
|
||||||
def body
|
def body
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ module Aviator
|
|||||||
|
|
||||||
param :username, required: false
|
param :username, required: false
|
||||||
param :password, required: false
|
param :password, required: false
|
||||||
param :tokenId, required: false
|
param :tokenId, required: false, alias: :token_id
|
||||||
param :tenantName, required: false
|
param :tenantName, required: false, alias: :tenant_name
|
||||||
param :tenantId, required: false
|
param :tenantId, required: false, alias: :tenant_id
|
||||||
|
|
||||||
|
|
||||||
def body
|
def body
|
||||||
|
|||||||
@@ -212,6 +212,38 @@ class Aviator::Test
|
|||||||
error.message.must_include "private method"
|
error.message.must_include "private method"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
it 'accepts an alias for a given parameter' do
|
||||||
|
klass = Class.new(Aviator::Request) do
|
||||||
|
param :the_param, required: true, alias: :the_alias
|
||||||
|
end
|
||||||
|
|
||||||
|
param_val = 999
|
||||||
|
|
||||||
|
req = klass.new do |params|
|
||||||
|
params.the_param = param_val
|
||||||
|
end
|
||||||
|
|
||||||
|
req.params.the_param.must_equal param_val
|
||||||
|
req.params.the_alias.must_equal param_val
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
it 'makes the param alias assignable' do
|
||||||
|
klass = Class.new(Aviator::Request) do
|
||||||
|
param :the_param, required: true, alias: :the_alias
|
||||||
|
end
|
||||||
|
|
||||||
|
param_val = 999
|
||||||
|
|
||||||
|
req = klass.new do |params|
|
||||||
|
params.the_alias = param_val
|
||||||
|
end
|
||||||
|
|
||||||
|
req.params.the_param.must_equal param_val
|
||||||
|
req.params.the_alias.must_equal param_val
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,15 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
flavor_ref: :flavorRef
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_attr :url do
|
validate_attr :url do
|
||||||
service_spec = get_session_data[:access][:serviceCatalog].find{|s| s[:type] == 'compute' }
|
service_spec = get_session_data[:access][:serviceCatalog].find{|s| s[:type] == 'compute' }
|
||||||
url = "#{ service_spec[:endpoints][0][:publicURL] }/servers/#{ server[:id] }/action"
|
url = "#{ service_spec[:endpoints][0][:publicURL] }/servers/#{ server[:id] }/action"
|
||||||
|
|||||||
@@ -93,6 +93,15 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
admin_pass: :adminPass
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_attr :url do
|
validate_attr :url do
|
||||||
service_spec = get_session_data[:access][:serviceCatalog].find{|s| s[:type] == 'compute' }
|
service_spec = get_session_data[:access][:serviceCatalog].find{|s| s[:type] == 'compute' }
|
||||||
server_id = '105b09f0b6500d36168480ad84'
|
server_id = '105b09f0b6500d36168480ad84'
|
||||||
|
|||||||
@@ -121,6 +121,19 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
access_ipv4: :accessIPv4,
|
||||||
|
access_ipv6: :accessIPv6,
|
||||||
|
admin_pass: :adminPass,
|
||||||
|
image_ref: :imageRef,
|
||||||
|
flavor_ref: :flavorRef
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'parameters are provided' do
|
validate_response 'parameters are provided' do
|
||||||
image_id = session.compute_service.request(:list_images).body[:images].first[:id]
|
image_id = session.compute_service.request(:list_images).body[:images].first[:id]
|
||||||
flavor_id = session.compute_service.request(:list_flavors).body[:flavors].first[:id]
|
flavor_id = session.compute_service.request(:list_flavors).body[:flavors].first[:id]
|
||||||
|
|||||||
@@ -108,6 +108,15 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
network_id: :networkID
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'a valid server id is provided' do
|
validate_response 'a valid server id is provided' do
|
||||||
server_id = session.compute_service.request(:list_servers).body[:servers].first[:id]
|
server_id = session.compute_service.request(:list_servers).body[:servers].first[:id]
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,16 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
min_disk: :minDisk,
|
||||||
|
min_ram: :minRam
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'no parameters are provided' do
|
validate_response 'no parameters are provided' do
|
||||||
response = session.compute_service.request :list_flavors
|
response = session.compute_service.request :list_flavors
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,15 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
changes_since: 'changes-since'
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'no parameters are provided' do
|
validate_response 'no parameters are provided' do
|
||||||
service = Aviator::Service.new(
|
service = Aviator::Service.new(
|
||||||
provider: 'openstack',
|
provider: 'openstack',
|
||||||
|
|||||||
@@ -136,6 +136,15 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
changes_since: 'changes-since'
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'no parameters are provided' do
|
validate_response 'no parameters are provided' do
|
||||||
service = Aviator::Service.new(
|
service = Aviator::Service.new(
|
||||||
provider: 'openstack',
|
provider: 'openstack',
|
||||||
|
|||||||
@@ -118,6 +118,18 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
access_ipv4: :accessIPv4,
|
||||||
|
access_ipv6: :accessIPv6,
|
||||||
|
admin_pass: :adminPass,
|
||||||
|
image_ref: :imageRef
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'valid params are provided' do
|
validate_response 'valid params are provided' do
|
||||||
server = session.compute_service.request(:list_servers).body[:servers].first
|
server = session.compute_service.request(:list_servers).body[:servers].first
|
||||||
server_id = server[:id]
|
server_id = server[:id]
|
||||||
|
|||||||
@@ -107,6 +107,16 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
access_ipv4: :accessIPv4,
|
||||||
|
access_ipv6: :accessIPv6
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'valid server id is provided' do
|
validate_response 'valid server id is provided' do
|
||||||
server = session.compute_service.request(:list_servers).body[:servers].first
|
server = session.compute_service.request(:list_servers).body[:servers].first
|
||||||
server_id = server[:id]
|
server_id = server[:id]
|
||||||
|
|||||||
@@ -119,6 +119,15 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
tenant_id: :tenantId
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'invalid param is provided' do
|
validate_response 'invalid param is provided' do
|
||||||
service = session.identity_service
|
service = session.identity_service
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,15 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
tenant_id: :tenantId
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'valid user id is provided' do
|
validate_response 'valid user id is provided' do
|
||||||
# must be hardcoded so as not to inadvertently alter random resources
|
# must be hardcoded so as not to inadvertently alter random resources
|
||||||
# in case the corresponding cassette is deleted
|
# in case the corresponding cassette is deleted
|
||||||
|
|||||||
@@ -92,6 +92,17 @@ class Aviator::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
validate_attr :param_aliases do
|
||||||
|
aliases = {
|
||||||
|
token_id: :tokenId,
|
||||||
|
tenant_name: :tenantName,
|
||||||
|
tenant_id: :tenantId
|
||||||
|
}
|
||||||
|
|
||||||
|
klass.param_aliases.must_equal aliases
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
validate_response 'parameters are invalid' do
|
validate_response 'parameters are invalid' do
|
||||||
service = Aviator::Service.new(
|
service = Aviator::Service.new(
|
||||||
provider: 'openstack',
|
provider: 'openstack',
|
||||||
|
|||||||
Reference in New Issue
Block a user