2eae62979c24162a30c39dcd2750cce50e130d00
[platform/framework/web/crosswalk-tizen.git] /
1 define(['./forOwn', '../lang/isArray'], function(forOwn, isArray) {
2
3     function containsMatch(array, pattern) {
4         var i = -1, length = array.length;
5         while (++i < length) {
6             if (deepMatches(array[i], pattern)) {
7                 return true;
8             }
9         }
10
11         return false;
12     }
13
14     function matchArray(target, pattern) {
15         var i = -1, patternLength = pattern.length;
16         while (++i < patternLength) {
17             if (!containsMatch(target, pattern[i])) {
18                 return false;
19             }
20         }
21
22         return true;
23     }
24
25     function matchObject(target, pattern) {
26         var result = true;
27         forOwn(pattern, function(val, key) {
28             if (!deepMatches(target[key], val)) {
29                 // Return false to break out of forOwn early
30                 return (result = false);
31             }
32         });
33
34         return result;
35     }
36
37     /**
38      * Recursively check if the objects match.
39      */
40     function deepMatches(target, pattern){
41         if (target && typeof target === 'object') {
42             if (isArray(target) && isArray(pattern)) {
43                 return matchArray(target, pattern);
44             } else {
45                 return matchObject(target, pattern);
46             }
47         } else {
48             return target === pattern;
49         }
50     }
51
52     return deepMatches;
53
54 });