-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add KnexDriver and KnexQueryBuilderFactory
- Loading branch information
Showing
18 changed files
with
275 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import { NajsEloquent as NajsEloquentLib } from 'najs-eloquent'; | ||
import { KnexQueryBuilderFactory } from './KnexQueryBuilderFactory'; | ||
export declare class KnexDriver<T extends NajsEloquentLib.Driver.Record = NajsEloquentLib.Driver.Record> extends NajsEloquentLib | ||
.Driver.DriverBase<T> { | ||
protected recordManager: NajsEloquent.Feature.IRecordManager<T>; | ||
static Name: string; | ||
constructor(); | ||
getClassName(): string; | ||
getRecordManager(): NajsEloquent.Feature.IRecordManager<T>; | ||
makeQueryBuilderFactory(): KnexQueryBuilderFactory; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
"use strict"; | ||
/// <reference types="najs-eloquent" /> | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const najs_binding_1 = require("najs-binding"); | ||
const najs_eloquent_1 = require("najs-eloquent"); | ||
const constants_1 = require("../constants"); | ||
const KnexQueryBuilderFactory_1 = require("./KnexQueryBuilderFactory"); | ||
const KnexExecutorFactory_1 = require("./KnexExecutorFactory"); | ||
class KnexDriver extends najs_eloquent_1.NajsEloquent | ||
.Driver.DriverBase { | ||
constructor() { | ||
super(); | ||
this.recordManager = najs_binding_1.make(najs_eloquent_1.NajsEloquent.Driver.RecordManager, [najs_binding_1.make(KnexExecutorFactory_1.KnexExecutorFactory.className)]); | ||
} | ||
getClassName() { | ||
return constants_1.ClassNames.Driver.KnexDriver; | ||
} | ||
getRecordManager() { | ||
return this.recordManager; | ||
} | ||
makeQueryBuilderFactory() { | ||
return najs_binding_1.make(KnexQueryBuilderFactory_1.KnexQueryBuilderFactory.className); | ||
} | ||
} | ||
KnexDriver.Name = 'mongodb'; | ||
exports.KnexDriver = KnexDriver; | ||
najs_binding_1.register(KnexDriver, constants_1.ClassNames.Driver.KnexDriver); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import { KnexQueryBuilder } from './KnexQueryBuilder'; | ||
export declare class KnexQueryBuilderFactory implements NajsEloquent.QueryBuilder.IQueryBuilderFactory { | ||
static className: string; | ||
getClassName(): string; | ||
make(model: NajsEloquent.Model.IModel): KnexQueryBuilder<any>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
"use strict"; | ||
/// <reference types="najs-eloquent" /> | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const najs_binding_1 = require("najs-binding"); | ||
const constants_1 = require("../constants"); | ||
const KnexQueryBuilder_1 = require("./KnexQueryBuilder"); | ||
const KnexQueryBuilderHandler_1 = require("./KnexQueryBuilderHandler"); | ||
class KnexQueryBuilderFactory { | ||
getClassName() { | ||
return constants_1.ClassNames.Driver.KnexQueryBuilderFactory; | ||
} | ||
make(model) { | ||
return new KnexQueryBuilder_1.KnexQueryBuilder(new KnexQueryBuilderHandler_1.KnexQueryBuilderHandler(model)); | ||
} | ||
} | ||
KnexQueryBuilderFactory.className = constants_1.ClassNames.Driver.KnexQueryBuilderFactory; | ||
exports.KnexQueryBuilderFactory = KnexQueryBuilderFactory; | ||
najs_binding_1.register(KnexQueryBuilderFactory, constants_1.ClassNames.Driver.KnexQueryBuilderFactory, true, true); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
import 'jest'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
require("jest"); | ||
const Sinon = require("sinon"); | ||
const NajsBinding = require("najs-binding"); | ||
const najs_eloquent_1 = require("najs-eloquent"); | ||
const KnexDriver_1 = require("../../lib/driver/KnexDriver"); | ||
const KnexQueryBuilderFactory_1 = require("../../lib/driver/KnexQueryBuilderFactory"); | ||
describe('KnexDriver', function () { | ||
it('extends DriverBase, implements Autoload under name "NajsEloquent.Driver.KnexDriver"', function () { | ||
const driver = new KnexDriver_1.KnexDriver(); | ||
expect(driver).toBeInstanceOf(najs_eloquent_1.NajsEloquent.Driver.DriverBase); | ||
expect(driver.getClassName()).toEqual('NajsEloquent.Driver.KnexDriver'); | ||
}); | ||
describe('constructor()', function () { | ||
it('makes RecordManager from "NajsEloquent.Feature.RecordManager" class', function () { | ||
const makeSpy = Sinon.spy(NajsBinding, 'make'); | ||
const driver = new KnexDriver_1.KnexDriver(); | ||
expect(makeSpy.lastCall.calledWith(najs_eloquent_1.NajsEloquent.Driver.RecordManager)).toBe(true); | ||
expect(driver['recordManager']).toBeInstanceOf(najs_eloquent_1.NajsEloquent.Driver.RecordManager); | ||
makeSpy.restore(); | ||
}); | ||
}); | ||
describe('.getClassName()', function () { | ||
it('implements Autoload under name "NajsEloquent.Driver.KnexDriver"', function () { | ||
const driver = new KnexDriver_1.KnexDriver(); | ||
expect(driver.getClassName()).toEqual('NajsEloquent.Driver.KnexDriver'); | ||
}); | ||
}); | ||
describe('.getRecordManager()', function () { | ||
it('simply returns property "recordManager"', function () { | ||
const driver = new KnexDriver_1.KnexDriver(); | ||
expect(driver.getRecordManager() === driver['recordManager']).toBe(true); | ||
}); | ||
}); | ||
describe('.makeQueryBuilderFactory()', function () { | ||
it('creates and returns an instance of KnexQueryBuilderFactory', function () { | ||
const driver = new KnexDriver_1.KnexDriver(); | ||
const factory1 = driver.makeQueryBuilderFactory(); | ||
const factory2 = driver.makeQueryBuilderFactory(); | ||
expect(factory1 === factory2).toBe(true); | ||
expect(factory1).toBeInstanceOf(KnexQueryBuilderFactory_1.KnexQueryBuilderFactory); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
import 'jest'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
require("jest"); | ||
const najs_binding_1 = require("najs-binding"); | ||
const KnexQueryBuilder_1 = require("../../lib/driver/KnexQueryBuilder"); | ||
const KnexQueryBuilderFactory_1 = require("../../lib/driver/KnexQueryBuilderFactory"); | ||
describe('KnexQueryBuilderFactory', function () { | ||
it('implements IAutoload and register with singleton option = true', function () { | ||
const a = najs_binding_1.make(KnexQueryBuilderFactory_1.KnexQueryBuilderFactory.className); | ||
const b = najs_binding_1.make(KnexQueryBuilderFactory_1.KnexQueryBuilderFactory.className); | ||
expect(a.getClassName()).toEqual('NajsEloquent.Driver.Knex.KnexQueryBuilderFactory'); | ||
expect(a === b).toBe(true); | ||
}); | ||
describe('.make()', function () { | ||
it('creates new instance of KnexQueryBuilder', function () { | ||
const model = { | ||
getRecordName() { | ||
return 'model'; | ||
} | ||
}; | ||
const factory = najs_binding_1.make(KnexQueryBuilderFactory_1.KnexQueryBuilderFactory.className); | ||
const qb1 = factory.make(model); | ||
const qb2 = factory.make(model); | ||
expect(qb1).toBeInstanceOf(KnexQueryBuilder_1.KnexQueryBuilder); | ||
expect(qb1 === qb2).toBe(false); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/// <reference types="najs-eloquent" /> | ||
|
||
import { register, make } from 'najs-binding' | ||
import { NajsEloquent as NajsEloquentLib } from 'najs-eloquent' | ||
import { ClassNames } from '../constants' | ||
import { KnexQueryBuilderFactory } from './KnexQueryBuilderFactory' | ||
import { KnexExecutorFactory } from './KnexExecutorFactory' | ||
|
||
export class KnexDriver<T extends NajsEloquentLib.Driver.Record = NajsEloquentLib.Driver.Record> extends NajsEloquentLib | ||
.Driver.DriverBase<T> { | ||
protected recordManager: NajsEloquent.Feature.IRecordManager<T> | ||
static Name = 'mongodb' | ||
|
||
constructor() { | ||
super() | ||
|
||
this.recordManager = make(NajsEloquentLib.Driver.RecordManager, [make(KnexExecutorFactory.className)]) | ||
} | ||
|
||
getClassName() { | ||
return ClassNames.Driver.KnexDriver | ||
} | ||
|
||
getRecordManager() { | ||
return this.recordManager | ||
} | ||
|
||
makeQueryBuilderFactory() { | ||
return make<KnexQueryBuilderFactory>(KnexQueryBuilderFactory.className) | ||
} | ||
} | ||
register(KnexDriver, ClassNames.Driver.KnexDriver) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/// <reference types="najs-eloquent" /> | ||
|
||
import { register } from 'najs-binding' | ||
import { ClassNames } from '../constants' | ||
import { KnexQueryBuilder } from './KnexQueryBuilder' | ||
import { KnexQueryBuilderHandler } from './KnexQueryBuilderHandler' | ||
|
||
export class KnexQueryBuilderFactory implements NajsEloquent.QueryBuilder.IQueryBuilderFactory { | ||
static className: string = ClassNames.Driver.KnexQueryBuilderFactory | ||
|
||
getClassName() { | ||
return ClassNames.Driver.KnexQueryBuilderFactory | ||
} | ||
|
||
make(model: NajsEloquent.Model.IModel): KnexQueryBuilder<any> { | ||
return new KnexQueryBuilder(new KnexQueryBuilderHandler(model)) | ||
} | ||
} | ||
register(KnexQueryBuilderFactory, ClassNames.Driver.KnexQueryBuilderFactory, true, true) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
import 'jest' | ||
import * as Sinon from 'sinon' | ||
import * as NajsBinding from 'najs-binding' | ||
import { NajsEloquent as NajsEloquentLib } from 'najs-eloquent' | ||
import { KnexDriver } from '../../lib/driver/KnexDriver' | ||
import { KnexQueryBuilderFactory } from '../../lib/driver/KnexQueryBuilderFactory' | ||
|
||
describe('KnexDriver', function() { | ||
it('extends DriverBase, implements Autoload under name "NajsEloquent.Driver.KnexDriver"', function() { | ||
const driver = new KnexDriver() | ||
expect(driver).toBeInstanceOf(NajsEloquentLib.Driver.DriverBase) | ||
expect(driver.getClassName()).toEqual('NajsEloquent.Driver.KnexDriver') | ||
}) | ||
|
||
describe('constructor()', function() { | ||
it('makes RecordManager from "NajsEloquent.Feature.RecordManager" class', function() { | ||
const makeSpy = Sinon.spy(NajsBinding, 'make') | ||
const driver = new KnexDriver() | ||
expect(makeSpy.lastCall.calledWith(NajsEloquentLib.Driver.RecordManager)).toBe(true) | ||
expect(driver['recordManager']).toBeInstanceOf(NajsEloquentLib.Driver.RecordManager) | ||
makeSpy.restore() | ||
}) | ||
}) | ||
|
||
describe('.getClassName()', function() { | ||
it('implements Autoload under name "NajsEloquent.Driver.KnexDriver"', function() { | ||
const driver = new KnexDriver() | ||
expect(driver.getClassName()).toEqual('NajsEloquent.Driver.KnexDriver') | ||
}) | ||
}) | ||
|
||
describe('.getRecordManager()', function() { | ||
it('simply returns property "recordManager"', function() { | ||
const driver = new KnexDriver() | ||
expect(driver.getRecordManager() === driver['recordManager']).toBe(true) | ||
}) | ||
}) | ||
|
||
describe('.makeQueryBuilderFactory()', function() { | ||
it('creates and returns an instance of KnexQueryBuilderFactory', function() { | ||
const driver = new KnexDriver() | ||
const factory1 = driver.makeQueryBuilderFactory() | ||
const factory2 = driver.makeQueryBuilderFactory() | ||
expect(factory1 === factory2).toBe(true) | ||
expect(factory1).toBeInstanceOf(KnexQueryBuilderFactory) | ||
}) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import 'jest' | ||
import { make } from 'najs-binding' | ||
import { KnexQueryBuilder } from '../../lib/driver/KnexQueryBuilder' | ||
import { KnexQueryBuilderFactory } from '../../lib/driver/KnexQueryBuilderFactory' | ||
|
||
describe('KnexQueryBuilderFactory', function() { | ||
it('implements IAutoload and register with singleton option = true', function() { | ||
const a = make<KnexQueryBuilderFactory>(KnexQueryBuilderFactory.className) | ||
const b = make<KnexQueryBuilderFactory>(KnexQueryBuilderFactory.className) | ||
expect(a.getClassName()).toEqual('NajsEloquent.Driver.Knex.KnexQueryBuilderFactory') | ||
expect(a === b).toBe(true) | ||
}) | ||
|
||
describe('.make()', function() { | ||
it('creates new instance of KnexQueryBuilder', function() { | ||
const model: any = { | ||
getRecordName() { | ||
return 'model' | ||
} | ||
} | ||
const factory = make<KnexQueryBuilderFactory>(KnexQueryBuilderFactory.className) | ||
const qb1 = factory.make(model) | ||
const qb2 = factory.make(model) | ||
expect(qb1).toBeInstanceOf(KnexQueryBuilder) | ||
expect(qb1 === qb2).toBe(false) | ||
}) | ||
}) | ||
}) |