-
-
Notifications
You must be signed in to change notification settings - Fork 36
Bind sendCommand to the current instance #227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -345,4 +345,31 @@ describe('redis store test', () => { | |||||||||||||||||||||||
| // With NEW script we expect a fresh window: hits=1 and ttl reset | ||||||||||||||||||||||||
| expect(result.totalHits).toEqual(1) | ||||||||||||||||||||||||
| }) | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| it('should bind sendCommand to this', async () => { | ||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you please add a similar test for
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hi @gamemaker1
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @gamemaker1 I have pushed a commit for testing |
||||||||||||||||||||||||
| // A custom sendCommand that verifies `this` is bound to the RedisStore instance | ||||||||||||||||||||||||
| const customSendCommand = async function ( | ||||||||||||||||||||||||
| this: RedisStore, | ||||||||||||||||||||||||
| ...args: string[] | ||||||||||||||||||||||||
| ) { | ||||||||||||||||||||||||
| if (!(this instanceof RedisStore)) { | ||||||||||||||||||||||||
| throw new TypeError('this is not bound to RedisStore instance') | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| return sendCommand(...args) | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| class CustomRedisStore extends RedisStore { | ||||||||||||||||||||||||
| constructor() { | ||||||||||||||||||||||||
| super({ | ||||||||||||||||||||||||
| sendCommand: customSendCommand, | ||||||||||||||||||||||||
| }) | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| const store = new CustomRedisStore() | ||||||||||||||||||||||||
|
Comment on lines
368
to
380
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry I missed this yesterday, but I don't think we need the new class here (?) I think this would work:
Suggested change
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This test case is being used here for approaching and presenting subclassing, where a class inherits
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have updated
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok, I understand what you're doing better now. I think I can go with this. |
||||||||||||||||||||||||
| store.init({ windowMs: 60 } as Options) | ||||||||||||||||||||||||
| const key = 'test-store' | ||||||||||||||||||||||||
| const { totalHits } = await store.increment(key) | ||||||||||||||||||||||||
| expect(totalHits).toEqual(1) | ||||||||||||||||||||||||
| }) | ||||||||||||||||||||||||
| }) | ||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This isn't a huge deal, but could we bind sendCommand & sendCommandCluster once rather than every time they're called?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I pushed a new commit for binding the given
sendCommandbefore using it inside the wrapper func.https://github.com/express-rate-limit/rate-limit-redis/pull/227/files#diff-5c2516e9822679491492c832b9ace79b6945bdd891586e07b0232ebef1c7e0b1R97
The
sendCommandClusterfunction is already bound once.