Home | History | Annotate | Download | only in extensions
      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.
      4 
      5 var schemaRegistry = requireNative('schema_registry');
      6 var CHECK = requireNative('logging').CHECK;
      7 var WARNING = requireNative('logging').WARNING;
      8 
      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]);
     15   }
     16 }
     17 
     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) {
     25     return undefined;
     26   } else if (matches.length == 1) {
     27     return matches[0]
     28   } else {
     29     throw new Error("Failed lookup of field '" + field + "' with value '" +
     30                     value + "'");
     31   }
     32 }
     33 
     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.');
     40       return null;
     41     }
     42     var types = defaultSchema.types;
     43   } else {
     44     var schemaName = $Array.join($Array.slice(parts, 0, parts.length - 1), '.');
     45     var types = schemaRegistry.GetSchema(schemaName).types;
     46   }
     47   for (var i = 0; i < types.length; ++i) {
     48     if (types[i].id == typeName)
     49       return types[i];
     50   }
     51   return null;
     52 }
     53 
     54 exports.forEach = forEach;
     55 exports.loadTypeSchema = loadTypeSchema;
     56 exports.lookup = lookup;
     57