69 | render ( str ) { |
70 | |
71 | if ( !String.isString( str ) ) { |
72 | return str; |
73 | } |
74 | |
75 | var _this = this; |
76 | return str.replace( /\$?\{([^}]+)\}/g, function ( match, name ) { |
77 | var val = _this.get( name ) || match; |
78 | if ( val === undefined ) { |
79 | throw new Error( 'Error resolving variable ' + match ); |
80 | return val; |
81 | } |
82 | if ( val instanceof Function ) { |
83 | val = val( global, require, _this ); |
84 | } |
85 | else if ( val instanceof Object ) { |
86 | val = val.toString( _this ); |
87 | } |
88 | if ( String.isString( val ) && val != match ) { |
89 | val = _this.render( val ); |
90 | } |
91 | return val; |
92 | } ); |
93 | } |