lib/Stub/Factory.js   A
last analyzed

Complexity

Total Complexity 9
Complexity/F 1.13

Size

Lines of Code 58
Function Count 8

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 0
wmc 9
c 1
b 0
f 0
nc 1
mnd 1
bc 9
fnc 8
dl 0
loc 58
rs 10
bpm 1.125
cpm 1.125
noi 0

1 Function

Rating   Name   Duplication   Size   Complexity  
B Factory.create 0 39 1
1
var Sinon = require('sinon')
2
3
var Objects = require('../Utility/index').Objects
4
var Defaults = require('./GlobalDefaults')
5
6
/**
7
 * @namespace
8
 */
9
var Factory = {
10
  /**
11
   * @param {string} symbol
12
   * @param {TStubSettings} settings
13
   * @return {IStub}
14
   */
15
  create: function (symbol, settings) {
16
    var mock = function (configuration) {
17
      var self = this
18
      this.name = symbol
19
20
      this._setup = function (configuration) {
21
        var buffer = Objects.merge(Defaults, settings.defaults)
22
        buffer = Objects.merge(buffer, configuration || {})
23
        self._settings = buffer
24
      }
25
26
      this._reset = function () {
27
        self._state = Objects.copy(settings.state || {})
28
        var properties = settings.properties || {}
29
        Object.keys(properties).forEach(function (name) {
30
          self[name] = properties[name]
31
        })
32
        var handlers = settings.handlers || {}
33
        Object.keys(handlers).forEach(function (name) {
34
          self[name] = Sinon.spy(function () {
35
            var args = Array.prototype.slice.call(arguments)
36
            args.unshift(self)
37
            return handlers[name].apply(this, args)
38
          })
39
        })
40
      }
41
42
      this._flush = function () {
43
        if (typeof settings.onFlush === 'function') {
44
          settings.onFlush(self)
45
        }
46
      }
47
48
      this._setup(configuration)
49
      this._reset()
50
    }
51
    Object.defineProperty(mock, 'name', {value: symbol, writable: false})
52
    return mock
53
  }
54
}
55
56
module.exports = {
57
  Factory: Factory
58
}
59