Javascript MatchingItem

From Yate Documentation
(Difference between revisions)
Jump to: navigation, search
(Examples)
Line 70: Line 70:
 
== Examples ==
 
== Examples ==
  
 +
=== Build simple items ===
 +
String:
 +
// Same matching rule:
 +
var miStr = new Engine.MatchingItem("some_string","some_name");
 +
var miStr = new Engine.MatchingItem({value:"some_string",name:"some_name"});
 +
// The second variant allows adding properties:
 +
var miStrFull = new Engine.MatchingItem({value:"some_string",name:"some_name",negated:true,ignoreCase:true});
 +
 +
Regexp:
 +
// Same matching rule:
 +
var miRex = new Engine.MatchingItem(/^some_string/,"some_name");
 +
var miRex = new Engine.MatchingItem({value:/^some_string/,name:"some_name"});
 +
// The second variant allows adding properties:
 +
var miRex2 = new Engine.MatchingItem({value:/^some_string/,name:"some_name",negated:true});
 +
 +
Random:
 +
// Random percent match: 50%
 +
var miRand50 = new Engine.MatchingItem({type:"random",value:50,maxvalue:100});
 +
 +
List:
 +
var value = [];
 +
value.push({value:"some_string",name:"string"});
 +
value.push({value:/^some_string/,name:"regexp",negated:true});
 +
value.push({value:"some_string",name:"string_nocase_negated",ignoreCase:true,negated:true});
 +
// Include a list in this list. Set the included list 'any' property
 +
var valueItemList = [];
 +
valueItemList.push({value:/^some_string/,name:"regexp_nocase",ignoreCase:true});
 +
valueItemList.push({type:"random",value:50,maxvalue:100});
 +
value.push({value:valueItemList, any:true});
 +
var list = new Engine.MatchingItem(value);
 +
Output of '''list.dump(undefined,"\r\n","  ")''':
 +
string: 'some_string'
 +
regexp: [!] /^some_string/
 +
string_nocase_negated: [!i] 'some_string'
 +
List: [any]
 +
  regexp_nocase: [i] /^some_string/
 +
  RANDOM 50%
 +
Output of '''Engine.print_var_r(Engine.MatchingItem.validate(value))''':
 +
'match' = [object Object]
 +
  'name' = ''
 +
  'value' = [object Array]
 +
    '0' = [object Object]
 +
      'name' = 'string'
 +
      'value' = 'some_string'
 +
    '1' = [object Object]
 +
      'name' = 'regexp'
 +
      'value' = /^some_string/
 +
        'ignoreCase' = 'false'
 +
        'basicPosix' = 'false'
 +
      'negated' = true
 +
    '2' = [object Object]
 +
      'name' = 'string_nocase_negated'
 +
      'value' = 'some_string'
 +
      'ignoreCase' = true
 +
      'negated' = true
 +
    '3' = [object Object]
 +
      'name' = ''
 +
      'value' = [object Array]
 +
        '0' = [object Object]
 +
          'name' = 'regexp_nocase'
 +
          'value' = /^some_string/
 +
            'ignoreCase' = 'true'
 +
            'basicPosix' = 'false'
 +
        '1' = [object Object]
 +
          'name' = ''
 +
          'value' = [object Object]
 +
            'type' = 'random'
 +
            'value' = 50
 +
            'maxvalue' = 100
 +
      'any' = true
  
 
== Constructor ==
 
== Constructor ==

Revision as of 13:24, 4 September 2024

Contents

General

Object implementing complex matching.
May be set as filter in Message handler and post hook install (match one or more message parameter(s)).
May be used for matching individual values or javascript objects.


Description

This section describes the matching item types and associted properties.
When matching object properties (e.g. Message parameters) item name indicates a specific property name (message parameter name).


NOTE: Item properties listed here does not belong to a MatchingItem object. They are held in internal item structure and used during matching.
They are present in value returned by getDesc() function.
They are handled in MatchingItem build (constructor) or validate().

In the following example the negated property of mi object is ignored by matching:

var mi = new Engine.MatchingItem("some_value","some_name");
mi.negated = true;
var ok = mi.matches("some_value");
// ok will be true


NOTE: negated property indicates matches() will return true if item matching conditions are NOT fulfilled.
This is a pseudo-code describing it:

IF matching_conditions_fulfilled THEN
   matches = TRUE
ELSE
   matches = FALSE
IF negated THEN
   matches = NOT matches

String

String comparison.
Properties:
name Item name
value Value to compare with (string)
ignoreCase Boolean. Case insensitive comparison. Default: false
negated Boolean. Negated match. Default: false

RegExp

Regular expression match.
Properties:
name Item name
value Regular expression to match
negated Boolean. Negated match. Default: false

Random

Random match. Matches if value > RANDOM() % maxvalue Properties:
name Item name
value Numeric, handled as 32bit positive value. Default: 0.
maxvalue Numeric, handled as 32bit positive value. Default: 0.
negated Boolean. Negated match. Default: false

Default data when built:
value==0: Ignore maxvalue. Set it 100 - NEVER MATCH
value>0 AND maxvalue<2: Ignore value and maxvalue. Set both to 100 - ALWAYS MATCH

List

List matching. May contain any matching item including other list(s).
Properties:
name Item name
value Array of matching items
any Boolean. True: match if any item matches (logical OR). Default: false, match if all items match (logical AND).
negated Boolean. Negated match. Default: false


Examples

Build simple items

String:

// Same matching rule:
var miStr = new Engine.MatchingItem("some_string","some_name"); 
var miStr = new Engine.MatchingItem({value:"some_string",name:"some_name"});
// The second variant allows adding properties:
var miStrFull = new Engine.MatchingItem({value:"some_string",name:"some_name",negated:true,ignoreCase:true});

Regexp:

// Same matching rule:
var miRex = new Engine.MatchingItem(/^some_string/,"some_name"); 
var miRex = new Engine.MatchingItem({value:/^some_string/,name:"some_name"});
// The second variant allows adding properties:
var miRex2 = new Engine.MatchingItem({value:/^some_string/,name:"some_name",negated:true});

Random:

// Random percent match: 50%
var miRand50 = new Engine.MatchingItem({type:"random",value:50,maxvalue:100});

List:

var value = [];
value.push({value:"some_string",name:"string"});
value.push({value:/^some_string/,name:"regexp",negated:true});
value.push({value:"some_string",name:"string_nocase_negated",ignoreCase:true,negated:true});
// Include a list in this list. Set the included list 'any' property
var valueItemList = [];
valueItemList.push({value:/^some_string/,name:"regexp_nocase",ignoreCase:true});
valueItemList.push({type:"random",value:50,maxvalue:100});
value.push({value:valueItemList, any:true});
var list = new Engine.MatchingItem(value);

Output of list.dump(undefined,"\r\n"," "):

string: 'some_string'
regexp: [!] /^some_string/
string_nocase_negated: [!i] 'some_string'
List: [any]
  regexp_nocase: [i] /^some_string/
  RANDOM 50%

Output of Engine.print_var_r(Engine.MatchingItem.validate(value)):

'match' = [object Object]
  'name' = 
  'value' = [object Array]
    '0' = [object Object]
      'name' = 'string'
      'value' = 'some_string'
    '1' = [object Object]
      'name' = 'regexp'
      'value' = /^some_string/
        'ignoreCase' = 'false'
        'basicPosix' = 'false'
      'negated' = true
    '2' = [object Object]
      'name' = 'string_nocase_negated'
      'value' = 'some_string'
      'ignoreCase' = true
      'negated' = true
    '3' = [object Object]
      'name' = 
      'value' = [object Array]
        '0' = [object Object]
          'name' = 'regexp_nocase'
          'value' = /^some_string/
            'ignoreCase' = 'true'
            'basicPosix' = 'false'
        '1' = [object Object]
          'name' = 
          'value' = [object Object]
            'type' = 'random'
            'value' = 50
            'maxvalue' = 100
      'any' = true

Constructor

  • new Engine.MatchingItem(value[,name[,params])

Build a new MatchingItem object.
Parameters:
value: Value to match. May be another MatchingItem object (all other parameters will be ignored).
name: Parameter name.
params: Build parameters.

If value is a MatchingItem builds a copy of it.

Otherwise build a MatchingItem from received parameters.
See validate() method for processing.
Constructor will fail if validate() would not return an object.
If you are not sure of parameters (may be read from configuration): call validate() and pass the result to constructor:

var obj = Engine.MatchingItem.validate(some_value,some_name,params);
if (obj && "string" != typeof obj)
    obj = new Engine.MatchingItem(obj);
else if (undefined === obj) {
    // Empty ...
}
else {
    // Invalid. obj is an error string
}


Static methods

  • validate(value[,name[,params]])

Parameters:
value: Value to match.
name: Parameter name.
params: Build parameters.
Return:
Success: Object with matching properties. See the description section.
Success with empty optimized matching: undefined
Error: string describing the error


Methods

  • matches(value)

Check if a value matches this item.
Parameters:
value Value to match.
Return: True if item rules matches, false otherwise.


Matching null, undefined or non object:
Match string value. Item(s) name will be ignored.
Empty string is used for null or undefined


Matching object:
Check properties and values.
Item(s) name is used to retrieve object property.
Missing property or empty values are handled as empty string.


  • getDesc([params])

Retrieve the description of this item.
Parameters:
params Object with description generation parameters.
Return: Object. See description section for object properties.

Generation parameters:
force_bool_props Boolean. Fill properties with having default values (e.g. fill negated property even if set to false). Default: false.


  • dump([params[,indent,origIndent]])

Dump a string containing a printable description of this item.
Parameters:
params Dump parameters.
indent String. Indent for each item (line). Increased by 'origIndent' when depth advances.
origIndent String. Original (all items) indent.
Return: String

Dump parameters:
rex_enclose String, first character only. Character to use to enclose regular expression values. Default: /.
str_enclose String, first character only. Character to use to enclose string values. Default: '.
name_value_sep String. name/value separator to use when needed. Default: ": ".
prop_negated String, first character only. Character to use to dump indication of negated item. Default: !.
prop_caseinsensitive String, first character only. Character to use to dump indication of ignoreCase item property. Default: i.
prop_rex_basic String, first character only. Character to use to dump indication of basicPosix=true regexp property. Default: empty.
prop_rex_extended String, first character only. Character to use to dump indication of basicPosix=false regexp property. Default: empty.
flags: Comma separated list of dump flags:

  • no_initial_list_desc Boolean. True: don not dump initial list (this object) description. Default: false
Personal tools
Namespaces

Variants
Actions
Preface
Configuration
Administrators
Developers