Skip to content

Commit

Permalink
refactor: rename field & member to property
Browse files Browse the repository at this point in the history
Fix #69
  • Loading branch information
mgechev committed Nov 18, 2018
1 parent b4f437a commit b3a51e9
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 52 deletions.
28 changes: 14 additions & 14 deletions README.md
Expand Up @@ -116,16 +116,16 @@ The library offers the following combinations of advices and join points:

## Accessors

- `beforeSetter(MemberSelector)` - invoked before setter call
- `afterSetter(MemberSelector)` - invoked after setter call
- `aroundSetter(MemberSelector)` - invoked around setter call
- `onThrowOfSetter(MemberSelector)` - invoked on throw of setter call
- `asyncOnThrowOfSetter(MemberSelector)` - invoked on throw of async setter call
- `beforeGetter(MemberSelector)` - invoked before getter call
- `afterGetter(MemberSelector)` - invoked after getter call
- `aroundGetter(MemberSelector)` - invoked around getter call
- `onThrowOfGetter(MemberSelector)` - invoked on throw of getter call
- `asyncOnThrowOfGetter(MemberSelector)` - invoked on throw of async getter call
- `beforeSetter(PropertySelector)` - invoked before setter call
- `afterSetter(PropertySelector)` - invoked after setter call
- `aroundSetter(PropertySelector)` - invoked around setter call
- `onThrowOfSetter(PropertySelector)` - invoked on throw of setter call
- `asyncOnThrowOfSetter(PropertySelector)` - invoked on throw of async setter call
- `beforeGetter(PropertySelector)` - invoked before getter call
- `afterGetter(PropertySelector)` - invoked after getter call
- `aroundGetter(PropertySelector)` - invoked around getter call
- `onThrowOfGetter(PropertySelector)` - invoked on throw of getter call
- `asyncOnThrowOfGetter(PropertySelector)` - invoked on throw of async getter call

## `MethodSelector`

Expand All @@ -138,14 +138,14 @@ export interface MethodSelector {
}
```

## `MemberSelector`
## `PropertySelector`

```ts
export interface MemberSelector {
export interface PropertySelector {
classNamePattern?: RegExp;
fieldNamePattern?: RegExp;
propertyNamePattern?: RegExp;
classes?: Function[];
methods?: PropertyDescriptor[];
properties?: PropertyDescriptor[];
}
```

Expand Down
2 changes: 1 addition & 1 deletion demo/index.ts
Expand Up @@ -30,7 +30,7 @@ class CacheAspect {
})
@afterGetter({
classNamePattern: /^(\w+Mapper|Http)$/,
fieldNamePattern: /^get/
propertyNamePattern: /^get/
})
after(meta: Metadata) {
console.log(
Expand Down
21 changes: 7 additions & 14 deletions lib/index.ts
@@ -1,17 +1,10 @@
import {MethodSelector, MemberSelector} from './src/join_points/selectors';
import {
BeforeAdvice,
AroundAdvice,
AfterAdvice,
OnThrowAdvice,

AsyncOnThrowAdvice,
} from './src/advices';
import {makeMethodCallAdviceDecorator, makeStaticMethodAdviceDecorator} from './src/join_points';
import {makeFieldGetAdviceDecorator, makeFieldSetAdviceDecorator} from './src/join_points';

export {Wove, Metadata, MethodMetadata, AspectRegistry as _AspectRegistry, Targets as _Targets} from './src/core';
export {MemberPrecondition} from './src/join_points';
import { MethodSelector, PropertySelector } from './src/join_points/selectors';
import { BeforeAdvice, AroundAdvice, AfterAdvice, OnThrowAdvice, AsyncOnThrowAdvice } from './src/advices';
import { makeMethodCallAdviceDecorator, makeStaticMethodAdviceDecorator } from './src/join_points';
import { makeFieldGetAdviceDecorator, makeFieldSetAdviceDecorator } from './src/join_points';

export { Wove, Metadata, MethodMetadata, AspectRegistry as _AspectRegistry, Targets as _Targets } from './src/core';
export { MemberPrecondition } from './src/join_points';

export const beforeMethod = makeMethodCallAdviceDecorator(BeforeAdvice);
export const afterMethod = makeMethodCallAdviceDecorator(AfterAdvice);
Expand Down
6 changes: 3 additions & 3 deletions lib/src/join_points/accessor_use.ts
Expand Up @@ -2,7 +2,7 @@ import { JoinPoint, Precondition } from '../core/join_point';
import { Advice } from '../core/advice';
import { Pointcut } from '../core/pointcut';
import { AspectRegistry, Targets, Aspect } from '../core/aspect';
import { MemberSelector } from './selectors';
import { PropertySelector } from './selectors';
import { MemberPrecondition } from './preconditions';

export type AccessorType = 'get' | 'set';
Expand Down Expand Up @@ -50,7 +50,7 @@ export class AccessorJoinPoint extends JoinPoint {
}

export function makeFieldGetAdviceDecorator(constr: new (...args: any[]) => Advice) {
return function(...selectors: MemberSelector[]): MethodDecorator {
return function(...selectors: PropertySelector[]): MethodDecorator {
return function<T>(target: Object, prop: string | symbol, descriptor: TypedPropertyDescriptor<T>) {
const joinpoints = selectors.map(selector => {
return new AccessorJoinPoint(new MemberPrecondition(selector), 'get');
Expand All @@ -68,7 +68,7 @@ export function makeFieldGetAdviceDecorator(constr: new (...args: any[]) => Advi
}

export function makeFieldSetAdviceDecorator(constr: new (...args: any[]) => Advice) {
return function(...selectors: MemberSelector[]): MethodDecorator {
return function(...selectors: PropertySelector[]): MethodDecorator {
return function<T>(target: Object, prop: string | symbol, descriptor: TypedPropertyDescriptor<T>) {
const joinpoints = selectors.map(selector => {
return new AccessorJoinPoint(new MemberPrecondition(selector), 'set');
Expand Down
12 changes: 6 additions & 6 deletions lib/src/join_points/preconditions.ts
@@ -1,5 +1,5 @@
import { Precondition } from '../core/join_point';
import { MethodSelector, MemberSelector } from './selectors';
import { MethodSelector, PropertySelector } from './selectors';
import { weave } from '../core/wove';

export class MethodPrecondition implements Precondition {
Expand Down Expand Up @@ -33,7 +33,7 @@ export class MethodPrecondition implements Precondition {
}

export class MemberPrecondition implements Precondition {
constructor(private selector: MemberSelector) {}
constructor(private selector: PropertySelector) {}

assert({ classDefinition, fieldName }: { classDefinition: any; fieldName: string }): boolean {
const s = this.selector;
Expand All @@ -50,10 +50,10 @@ export class MemberPrecondition implements Precondition {

const d = Object.getOwnPropertyDescriptor(classDefinition.prototype, fieldName);
return !!(
(!s.fieldNamePattern && !s.fields) ||
(s.fieldNamePattern && s.fieldNamePattern.test(fieldName)) ||
(s.fields &&
s.fields.some(f => {
(!s.propertyNamePattern && !s.properties) ||
(s.propertyNamePattern && s.propertyNamePattern.test(fieldName)) ||
(s.properties &&
s.properties.some(f => {
if (!f) {
throw new Error(
'Got invalid property descriptor for a member selector. Use Object.getOwnPropertyDescriptor(fn.prototype, name) if you are using field selectors.'
Expand Down
6 changes: 3 additions & 3 deletions lib/src/join_points/selectors.ts
Expand Up @@ -5,9 +5,9 @@ export interface MethodSelector {
methods?: Function[];
}

export interface MemberSelector {
export interface PropertySelector {
classNamePattern?: RegExp;
fieldNamePattern?: RegExp;
propertyNamePattern?: RegExp;
classes?: Function[];
fields?: PropertyDescriptor[];
properties?: PropertyDescriptor[];
}
4 changes: 2 additions & 2 deletions test/advices/sync_advices.spec.ts
Expand Up @@ -136,7 +136,7 @@ describe('sync advices', () => {
let demo;
let called = 0;
class Aspect {
@beforeGetter({ classNamePattern: /.*/, fieldNamePattern: /.*/ })
@beforeGetter({ classNamePattern: /.*/, propertyNamePattern: /.*/ })
before(metadata: Metadata) {
metadata.method.proceed = false;
const result = metadata.method.invoke(metadata.method.args);
Expand All @@ -163,7 +163,7 @@ describe('sync advices', () => {
let demo;
let called = 0;
class Aspect {
@beforeSetter({ classNamePattern: /.*/, fieldNamePattern: /.*/ })
@beforeSetter({ classNamePattern: /.*/, propertyNamePattern: /.*/ })
before(metadata: Metadata) {
metadata.method.proceed = false;
metadata.method.invoke('rainbow');
Expand Down
18 changes: 9 additions & 9 deletions test/core/preconditions.spec.ts
@@ -1,4 +1,4 @@
import { MemberSelector } from './../../lib/src/join_points/selectors';
import { PropertySelector } from './../../lib/src/join_points/selectors';
import { MemberPrecondition } from './../../lib/src/join_points/preconditions';

import { expect } from 'chai';
Expand All @@ -18,9 +18,9 @@ describe('Preconditions', () => {
}
}

const selector: MemberSelector = {
const selector: PropertySelector = {
classNamePattern: /Foo/,
fieldNamePattern: /bar/
propertyNamePattern: /bar/
};
const p = new MemberPrecondition(selector);
expect(p.assert({ classDefinition: Foo, fieldName: 'bar' })).equal(true);
Expand All @@ -40,9 +40,9 @@ describe('Preconditions', () => {
}
}

const selector: MemberSelector = {
const selector: PropertySelector = {
classes: [Foo],
fields: [Object.getOwnPropertyDescriptor(Foo.prototype, 'baz')]
properties: [Object.getOwnPropertyDescriptor(Foo.prototype, 'baz')]
};
const p = new MemberPrecondition(selector);
// expect(p.assert({ classDefinition: Foo, fieldName: 'baz' })).equal(true);
Expand All @@ -62,9 +62,9 @@ describe('Preconditions', () => {
}
}

const selector: MemberSelector = {
const selector: PropertySelector = {
classes: [Foo],
fields: [Foo.prototype.foobar]
properties: [Foo.prototype.foobar]
};
const p = new MemberPrecondition(selector);
expect(() => {
Expand All @@ -87,14 +87,14 @@ describe('Preconditions', () => {

const p1 = new MemberPrecondition({
classNamePattern: /Foo/,
fields: [Object.getOwnPropertyDescriptor(Foo.prototype, 'baz')]
properties: [Object.getOwnPropertyDescriptor(Foo.prototype, 'baz')]
});
expect(p1.assert({ classDefinition: Foo, fieldName: 'bar' })).equal(false);
expect(p1.assert({ classDefinition: Foo, fieldName: 'baz' })).equal(true);

const p2 = new MemberPrecondition({
classes: [Foo],
fieldNamePattern: /bar/
propertyNamePattern: /bar/
});
expect(p2.assert({ classDefinition: Foo, fieldName: 'bar' })).equal(true);
expect(p2.assert({ classDefinition: Foo, fieldName: 'foobar' })).equal(true);
Expand Down

0 comments on commit b3a51e9

Please sign in to comment.