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:
@@ -53,7 +53,7 @@ module Aviator
|
|||||||
def links
|
def links
|
||||||
self.class.links
|
self.class.links
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def optional_params
|
def optional_params
|
||||||
self.class.optional_params
|
self.class.optional_params
|
||||||
@@ -83,7 +83,7 @@ module Aviator
|
|||||||
def querystring?
|
def querystring?
|
||||||
self.class.querystring?
|
self.class.querystring?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def url?
|
def url?
|
||||||
self.class.url?
|
self.class.url?
|
||||||
@@ -121,18 +121,34 @@ module Aviator
|
|||||||
def headers?
|
def headers?
|
||||||
instance_methods.include? :headers
|
instance_methods.include? :headers
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def links
|
def links
|
||||||
@links ||= []
|
@links ||= []
|
||||||
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
|
||||||
@@ -147,12 +163,12 @@ module Aviator
|
|||||||
def querystring?
|
def querystring?
|
||||||
instance_methods.include? :querystring
|
instance_methods.include? :querystring
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def required_params
|
def required_params
|
||||||
@required_params ||= []
|
@required_params ||= []
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def url?
|
def url?
|
||||||
instance_methods.include? :url
|
instance_methods.include? :url
|
||||||
@@ -176,12 +192,16 @@ module Aviator
|
|||||||
self.class.send(attr_name)
|
self.class.send(attr_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def param(param_name, opts={})
|
def param(param_name, opts={})
|
||||||
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
|
||||||
|
@@ -211,6 +211,38 @@ class Aviator::Test
|
|||||||
error.message.wont_be_nil
|
error.message.wont_be_nil
|
||||||
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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user