Skip to content

Commit be06fd5

Browse files
rix0rrrmergify[bot]
authored andcommitted
fix(rule): make ruleName accessible on Rule object (#4252)
`ruleName` was missing. Add it. Fixes #3809.
1 parent ee1283d commit be06fd5

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

packages/@aws-cdk/aws-events/lib/rule-ref.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,11 @@ export interface IRule extends IResource {
88
* @attribute
99
*/
1010
readonly ruleArn: string;
11+
12+
/**
13+
* The name event rule
14+
*
15+
* @attribute
16+
*/
17+
readonly ruleName: string;
1118
}

packages/@aws-cdk/aws-events/lib/rule.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,17 @@ export interface RuleProps {
7878
export class Rule extends Resource implements IRule {
7979

8080
public static fromEventRuleArn(scope: Construct, id: string, eventRuleArn: string): IRule {
81+
const parts = Stack.of(scope).parseArn(eventRuleArn);
82+
8183
class Import extends Resource implements IRule {
8284
public ruleArn = eventRuleArn;
85+
public ruleName = parts.resourceName || '';
8386
}
8487
return new Import(scope, id);
8588
}
8689

8790
public readonly ruleArn: string;
91+
public readonly ruleName: string;
8892

8993
private readonly targets = new Array<CfnRule.TargetProperty>();
9094
private readonly eventPattern: EventPattern = { };
@@ -112,6 +116,7 @@ export class Rule extends Resource implements IRule {
112116
resource: 'rule',
113117
resourceName: this.physicalName,
114118
});
119+
this.ruleName = this.getResourceNameAttribute(resource.ref);
115120

116121
this.addEventPattern(props.eventPattern);
117122
this.scheduleExpression = props.schedule && props.schedule.expressionString;

packages/@aws-cdk/aws-events/test/test.rule.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { expect, haveResource, haveResourceLike } from '@aws-cdk/assert';
22
import iam = require('@aws-cdk/aws-iam');
33
import { ServicePrincipal } from '@aws-cdk/aws-iam';
44
import cdk = require('@aws-cdk/core');
5-
import { Stack } from '@aws-cdk/core';
5+
import { CfnResource, Stack } from '@aws-cdk/core';
66
import { Test } from 'nodeunit';
77
import { EventField, IRule, IRuleTarget, RuleTargetConfig, RuleTargetInput, Schedule } from '../lib';
88
import { Rule } from '../lib/rule';
@@ -31,6 +31,26 @@ export = {
3131
test.done();
3232
},
3333

34+
'can get rule name'(test: Test) {
35+
const stack = new cdk.Stack();
36+
const rule = new Rule(stack, 'MyRule', {
37+
schedule: Schedule.rate(cdk.Duration.minutes(10)),
38+
});
39+
40+
new CfnResource(stack, 'Res', {
41+
type: 'Test::Resource',
42+
properties: {
43+
RuleName: rule.ruleName
44+
}
45+
});
46+
47+
expect(stack).to(haveResource('Test::Resource', {
48+
RuleName: { Ref: 'MyRuleA44AB831' }
49+
}));
50+
51+
test.done();
52+
},
53+
3454
'rule with physical name'(test: Test) {
3555
// GIVEN
3656
const stack = new cdk.Stack();
@@ -366,10 +386,11 @@ export = {
366386
const stack = new Stack();
367387

368388
// WHEN
369-
const importedRule = Rule.fromEventRuleArn(stack, 'ImportedRule', 'arn:of:rule');
389+
const importedRule = Rule.fromEventRuleArn(stack, 'ImportedRule', 'arn:aws:events:us-east-2:123456789012:rule/example');
370390

371391
// THEN
372-
test.deepEqual(importedRule.ruleArn, 'arn:of:rule');
392+
test.deepEqual(importedRule.ruleArn, 'arn:aws:events:us-east-2:123456789012:rule/example');
393+
test.deepEqual(importedRule.ruleName, 'example');
373394
test.done();
374395
},
375396

0 commit comments

Comments
 (0)