1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 var schemaRegistry
= requireNative('schema_registry');
6 var CHECK
= requireNative('logging').CHECK
;
7 var WARNING
= requireNative('logging').WARNING
;
9 // An object forEach. Calls |f| with each (key, value) pair of |obj|, using
10 // |self| as the target.
11 function forEach(obj
, f
, self
) {
12 for (var key
in obj
) {
13 if ($Object
.hasOwnProperty(obj
, key
))
14 $Function
.call(f
, self
, key
, obj
[key
]);
18 // Assuming |array_of_dictionaries| is structured like this:
19 // [{id: 1, ... }, {id: 2, ...}, ...], you can use
20 // lookup(array_of_dictionaries, 'id', 2) to get the dictionary with id == 2.
21 function lookup(array_of_dictionaries
, field
, value
) {
22 var filter = function (dict
) {return dict
[field
] == value
;};
23 var matches
= array_of_dictionaries
.filter(filter
);
24 if (matches
.length
== 0) {
26 } else if (matches
.length
== 1) {
29 throw new Error("Failed lookup of field '" + field
+ "' with value '" +
34 function loadTypeSchema(typeName
, defaultSchema
) {
35 var parts
= $String
.split(typeName
, '.');
36 if (parts
.length
== 1) {
37 if (defaultSchema
== null) {
38 WARNING('Trying to reference "' + typeName
+ '" ' +
39 'with neither namespace nor default schema.');
42 var types
= defaultSchema
.types
;
44 var schemaName
= $Array
.join($Array
.slice(parts
, 0, parts
.length
- 1), '.');
45 var types
= schemaRegistry
.GetSchema(schemaName
).types
;
47 for (var i
= 0; i
< types
.length
; ++i
) {
48 if (types
[i
].id
== typeName
)
54 exports
.forEach
= forEach
;
55 exports
.loadTypeSchema
= loadTypeSchema
;
56 exports
.lookup
= lookup
;