Add Object adapter

Object adapter changes data to more useful format. Single value is reachable
as single value, property with more values is transformed to array.

https://fedorahosted.org/freeipa/ticket/5381

Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
This commit is contained in:
Pavel Vomacka
2016-06-29 15:41:58 +02:00
committed by Petr Vobornik
parent 044d3c25de
commit e7a55ef30b
+40
View File
@@ -1266,6 +1266,45 @@ field.SshKeysAdapter = declare([field.Adapter], {
}
});
/**
* ObjectAdapter is basic adapter which converts object to more usable format.
* All properties which have only one value are tranformed this way:
* property1: {"__base64__": "value1"} => property1: "value1",
* property2: {"value2"} => property2: "value2",
* Works for __base64__ as well as for __datetime__ and __dns_name__
*
* In case that the property has more values, then they are returned as array.
*
* @class
* @extends field.Adapter
*/
field.ObjectAdapter = declare([field.Adapter], {
normalize_object: function(obj) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
obj[property] = rpc.extract_objects([obj[property]]);
if (obj[property].length == 1) {
obj[property] = obj[property][0];
}
}
}
},
load: function(data) {
var record = this.get_record(data);
for (var i=0; i<record.length; i++) {
this.normalize_object(record[i]);
}
return record;
}
});
/**
* Field for enabling/disabling entity
*
@@ -1536,6 +1575,7 @@ field.register = function() {
v.register('same_password', field.same_password_validator);
l.register('adapter', field.Adapter);
l.register('object_adapter', field.ObjectAdapter);
};
phases.on('registration', field.register);