Allow access of aliases as symbols or strings just like its param
Prior to this rev, parameter aliases can only be access via dot
notation. This change allows one to use any of the following:
keystone.request(:create_token) do |p|
p[:tenant_name] = 'name'
end
keystone.request(:create_token) do |p|
p['tenant_name'] = 'name'
end
keystone.request(:create_token) do |p|
p.tenant_name = 'name'
end
This commit is contained in:
@@ -134,21 +134,10 @@ module Aviator
|
||||
|
||||
|
||||
def params_class
|
||||
all_params = required_params + optional_params
|
||||
param_aliases = self.param_aliases
|
||||
all_params = required_params + optional_params
|
||||
|
||||
if all_params.length > 0
|
||||
@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
|
||||
if all_params.length > 0 && @params_class.nil?
|
||||
@params_class = build_params_class(all_params, self.param_aliases)
|
||||
end
|
||||
|
||||
@params_class
|
||||
@@ -178,6 +167,34 @@ module Aviator
|
||||
private
|
||||
|
||||
|
||||
def build_params_class(all_params, param_aliases)
|
||||
Struct.new(*all_params) do
|
||||
alias :param_getter :[]
|
||||
alias :param_setter :[]=
|
||||
|
||||
define_method :[] do |key|
|
||||
key = param_aliases[key.to_sym] if param_aliases.keys.include? key.to_sym
|
||||
param_getter(key)
|
||||
end
|
||||
|
||||
define_method :[]= do |key, value|
|
||||
key = param_aliases[key.to_sym] if param_aliases.keys.include? key.to_sym
|
||||
param_setter(key, value)
|
||||
end
|
||||
|
||||
param_aliases.each do |param_alias, param_name|
|
||||
define_method param_alias do
|
||||
param_getter(param_name)
|
||||
end
|
||||
|
||||
define_method "#{ param_alias }=" do |value|
|
||||
param_setter(param_name, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def link(rel, href)
|
||||
links << { rel: rel, href: href }
|
||||
end
|
||||
|
||||
@@ -243,6 +243,38 @@ class Aviator::Test
|
||||
req.params.the_param.must_equal param_val
|
||||
req.params.the_alias.must_equal param_val
|
||||
end
|
||||
|
||||
|
||||
it 'allows aliases to be accessible as symbols' 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
|
||||
|
||||
|
||||
it 'allows aliases to be accessible as strings' 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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user