File tree Expand file tree Collapse file tree 10 files changed +201
-0
lines changed
Expand file tree Collapse file tree 10 files changed +201
-0
lines changed Original file line number Diff line number Diff line change 1+ var GoldTransfer = ( function ( ) {
2+ function GoldTransfer ( ) {
3+ }
4+ GoldTransfer . prototype . SendPaymentOfGold = function ( amountOfGold , destination ) {
5+ var user = Security . GetCurrentUser ( ) ;
6+ if ( Security . IsAuthorized ( user , "SendPaymentOfGold" ) ) {
7+ //send actual payment
8+ } else {
9+ return { success : 0 , message : "Unauthorized" } ;
10+ }
11+ } ;
12+ return GoldTransfer ;
13+ } ) ( ) ;
14+
15+ var Security = ( function ( ) {
16+ function Security ( ) {
17+ }
18+ Security . IsAuthorized = function ( user , functionPoint ) {
19+ } ;
20+ Security . GetCurrentUser = function ( ) {
21+ } ;
22+ return Security ;
23+ } ) ( ) ;
Original file line number Diff line number Diff line change 1+ class GoldTransfer {
2+ SendPaymentOfGold ( amountOfGold , destination ) {
3+ var user = Security . GetCurrentUser ( ) ;
4+ if ( Security . IsAuthorized ( user , "SendPaymentOfGold" ) ) {
5+ //send actual payment
6+ }
7+ else {
8+ return { success : 0 , message :"Unauthorized" } ;
9+ }
10+ }
11+ }
12+
13+ class Security {
14+ static IsAuthorized ( user , functionPoint ) { }
15+ static GetCurrentUser ( ) { }
16+ }
Original file line number Diff line number Diff line change 1+ var ToWeaveIn = ( function ( ) {
2+ function ToWeaveIn ( ) {
3+ }
4+ ToWeaveIn . prototype . BeforeCall = function ( ) {
5+ console . log ( "Before!" ) ;
6+ } ;
7+ ToWeaveIn . prototype . AfterCall = function ( ) {
8+ console . log ( "After!" ) ;
9+ } ;
10+ return ToWeaveIn ;
11+ } ) ( ) ;
12+
13+ var GoldTransfer = ( function ( ) {
14+ function GoldTransfer ( ) {
15+ }
16+ GoldTransfer . prototype . SendPaymentOfGold = function ( amountOfGold , destination ) {
17+ /* @aspect (Security)*/
18+ //send actual payment
19+ console . log ( "Payment sent" ) ;
20+ } ;
21+ return GoldTransfer ;
22+ } ) ( ) ;
23+
24+ function weave ( toWeave , toWeaveIn , toWeaveInName ) {
25+ for ( var property in toWeave . prototype ) {
26+ var stringRepresentation = toWeave . prototype [ property ] . toString ( ) ;
27+
28+ console . log ( stringRepresentation ) ;
29+ if ( stringRepresentation . indexOf ( "@aspect(" + toWeaveInName + ")" ) >= 0 ) {
30+ toWeave . prototype [ property + "_wrapped" ] = toWeave . prototype [ property ] ;
31+ toWeave . prototype [ property ] = function ( ) {
32+ toWeaveIn . BeforeCall ( ) ;
33+ toWeave . prototype [ property + "_wrapped" ] ( ) ;
34+ toWeaveIn . AfterCall ( ) ;
35+ } ;
36+ }
37+ }
38+ }
39+
40+ weave ( GoldTransfer , new ToWeaveIn ( ) , "Security" ) ;
41+ var transfer = new GoldTransfer ( ) ;
42+ transfer . SendPaymentOfGold ( 50 , "Starks" ) ;
Original file line number Diff line number Diff line change 1+ class ToWeaveIn {
2+ BeforeCall ( ) {
3+ console . log ( "Before!" ) ;
4+ }
5+ AfterCall ( ) {
6+ console . log ( "After!" ) ;
7+ }
8+ }
9+
10+ class GoldTransfer {
11+
12+ SendPaymentOfGold ( amountOfGold , destination ) {
13+ /* @aspect (Security)*/
14+ //send actual payment
15+ console . log ( "Payment sent" ) ;
16+ }
17+ }
18+
19+ function weave ( toWeave , toWeaveIn , toWeaveInName ) {
20+ for ( var property in toWeave . prototype ) {
21+ var stringRepresentation = toWeave . prototype [ property ] . toString ( ) ;
22+
23+ console . log ( stringRepresentation ) ;
24+ if ( stringRepresentation . indexOf ( "@aspect(" + toWeaveInName + ")" ) >= 0 )
25+ {
26+ toWeave . prototype [ property + "_wrapped" ] = toWeave . prototype [ property ] ;
27+ toWeave . prototype [ property ] = function ( ) { toWeaveIn . BeforeCall ( ) ;
28+ toWeave . prototype [ property + "_wrapped" ] ( ) ;
29+ toWeaveIn . AfterCall ( ) ;
30+ }
31+ }
32+ }
33+ }
34+
35+ weave ( GoldTransfer , new ToWeaveIn ( ) , "Security" ) ;
36+ var transfer = new GoldTransfer ( ) ;
37+ transfer . SendPaymentOfGold ( 50 , "Starks" ) ;
Original file line number Diff line number Diff line change 1+ var UserManager = ( function ( ) {
2+ function UserManager ( database , userEmailer ) {
3+ this . database = database ;
4+ this . userEmailer = userEmailer ;
5+ }
6+ return UserManager ;
7+ } ) ( ) ;
8+
9+ var Database = ( function ( ) {
10+ function Database ( ) {
11+ }
12+ return Database ;
13+ } ) ( ) ;
14+
15+ var UserEmailer = ( function ( ) {
16+ function UserEmailer ( ) {
17+ }
18+ return UserEmailer ;
19+ } ) ( ) ;
Original file line number Diff line number Diff line change 1+ class UserManager {
2+ constructor ( public database , public userEmailer ) {
3+
4+ }
5+ }
6+
7+ class Database { }
8+
9+ class UserEmailer { }
Original file line number Diff line number Diff line change 1+ var Axe = ( function ( ) {
2+ function Axe ( handleLength , /*public*/ headHeight ) {
3+ }
4+ return Axe ;
5+ } ) ( ) ;
6+
7+ function publicParameters ( func ) {
8+ var stringRepresentation = func . toString ( ) ;
9+ var matches = stringRepresentation . match ( / ^ f u n c t i o n .* \( ( .* ) \) / ) ;
10+ var parameterString = matches [ 1 ] ;
11+ var parameters = parameterString . split ( "," ) ;
12+ var setterString = "" ;
13+ for ( var i = 0 ; i < parameters . length ; i ++ ) {
14+ if ( parameters [ i ] . indexOf ( "public" ) >= 0 ) {
15+ var parameterName = parameters [ i ] . split ( '/' ) [ parameters [ i ] . split ( '/' ) . length - 1 ] . trim ( ) ;
16+ setterString += "this." + parameterName + " = " + parameterName + ";\n" ;
17+ }
18+ }
19+ var functionParts = stringRepresentation . match ( / ( ^ .* { ) ( [ \s \S ] * ) / ) ;
20+ return functionParts [ 1 ] + setterString + functionParts [ 2 ] ;
21+ }
22+
23+ console . log ( publicParameters ( Axe ) ) ;
24+ eval ( publicParameters ( Axe ) ) ;
Original file line number Diff line number Diff line change 1+ class Axe {
2+ constructor ( handleLength , /*public*/ headHeight ) { }
3+ }
4+
5+ function publicParameters ( func ) {
6+ var stringRepresentation = func . toString ( ) ;
7+ var parameterString = stringRepresentation . match ( / ^ f u n c t i o n .* \( ( .* ) \) / ) [ 1 ] ;
8+ var parameters = parameterString . split ( "," ) ;
9+ var setterString = "" ;
10+ for ( var i = 0 ; i < parameters . length ; i ++ ) {
11+ if ( parameters [ i ] . indexOf ( "public" ) >= 0 ) {
12+ var parameterName = parameters [ i ] . split ( '/' ) [ parameters [ i ] . split ( '/' ) . length - 1 ] . trim ( ) ;
13+ setterString += "this." + parameterName + " = " + parameterName + ";\n" ;
14+ }
15+ }
16+ var functionParts = stringRepresentation . match ( / ( ^ .* { ) ( [ \s \S ] * ) / ) ;
17+ return functionParts [ 1 ] + setterString + functionParts [ 2 ] ;
18+ }
19+
20+ console . log ( publicParameters ( Axe ) ) ;
21+ eval ( publicParameters ( Axe ) ) ;
Original file line number Diff line number Diff line change 1+ var Axe = ( function ( ) {
2+ function Axe ( handleLength , headHeight ) {
3+ this . handleLength = handleLength ;
4+ this . headHeight = headHeight ;
5+ }
6+ return Axe ;
7+ } ) ( ) ;
Original file line number Diff line number Diff line change 1+ class Axe {
2+ constructor ( public handleLength , public headHeight ) { }
3+ }
You can’t perform that action at this time.
0 commit comments