suite ".disallowFrom()", ()->
	test "Updates to subscribers can be prevented if the the update is coming from a specific publisher", ()->
		SimplyBind.defaultOptions.updateOnBind = false
		SimplyBind.defaultOptions.updateEvenIfSame = true
		invokeCount = 0
		currentValue = 1
		receiver = 'value':null
		publisherA = 'prop':1
		publisherB = 'prop':1
		publisherProxy = 'prop':1
		publisherMaster = 'prop':1

		SimplyBind('prop').of(publisherMaster)
			.to('prop').of(publisherA)
			.and.to('prop').of(publisherB)

		SimplyBind('prop').of(publisherA)
			.to('prop').of(publisherProxy)

		SimplyBind('prop').of(publisherB)
			.to('prop').of(publisherProxy)

		SimplyBind('prop').of(publisherProxy)
			.to('value').of(receiver)
				.transform (value)-> invokeCount++; value
			.disallowFrom('prop').of(publisherB)

		expect(publisherMaster.prop).to.equal 1
		expect(publisherA.prop).to.equal 1
		expect(publisherB.prop).to.equal 1
		expect(receiver.value).to.equal null
		expect(invokeCount).to.equal 0

		publisherA.prop = ++currentValue
		expect(publisherMaster.prop).to.equal 1
		expect(publisherA.prop).to.equal 2
		expect(publisherB.prop).to.equal 1
		expect(receiver.value).to.equal 2
		expect(invokeCount).to.equal 1

		publisherB.prop = ++currentValue
		expect(publisherMaster.prop).to.equal 1
		expect(publisherA.prop).to.equal 2
		expect(publisherB.prop).to.equal 3
		expect(receiver.value).to.equal 2
		expect(invokeCount).to.equal 1

		publisherMaster.prop = ++currentValue
		expect(publisherMaster.prop).to.equal 4
		expect(publisherA.prop).to.equal 4
		expect(publisherB.prop).to.equal 4
		expect(receiver.value).to.equal 4
		expect(invokeCount).to.equal 3

		publisherMaster.prop = ++currentValue
		expect(publisherMaster.prop).to.equal 5
		expect(publisherA.prop).to.equal 5
		expect(publisherB.prop).to.equal 5
		expect(receiver.value).to.equal 5
		expect(invokeCount).to.equal 5

		SimplyBind('prop').of(publisherMaster).to('prop').of(publisherA).unBind()

		publisherMaster.prop = ++currentValue
		expect(publisherMaster.prop).to.equal 6
		expect(publisherA.prop).to.equal 5
		expect(publisherB.prop).to.equal 6
		expect(receiver.value).to.equal 6
		expect(invokeCount).to.equal 6


		SimplyBind.defaultOptions.updateOnBind = true
		SimplyBind.defaultOptions.updateEvenIfSame = false


	test "Disallowing updated from an ObjectProp will only disallow updates form that prop and not any other props", ()->
		SimplyBind.defaultOptions.updateOnBind = false
		SimplyBind.defaultOptions.updateEvenIfSame = true
		invokeCount = 0
		currentValue = 1
		receiver = 'value':null
		publisher = 'propA':1, 'propB':1, 'propC':1
		proxy = 'prop':1

		SimplyBind('propA').of(publisher).to('prop').of(proxy)
		SimplyBind('propB').of(publisher).to('prop').of(proxy)		
		SimplyBind('propC').of(publisher).to('prop').of(proxy)

		SimplyBind('prop').of(proxy)
			.to('value').of(receiver)
				.transform (value)-> invokeCount++; value
			.disallowFrom('propB').of(publisher)

		expect(publisher.propA).to.equal 1
		expect(publisher.propB).to.equal 1
		expect(publisher.propC).to.equal 1
		expect(proxy.prop).to.equal 1
		expect(receiver.value).to.equal null
		expect(invokeCount).to.equal 0

		publisher.propA = ++currentValue
		expect(publisher.propA).to.equal 2
		expect(publisher.propB).to.equal 1
		expect(publisher.propC).to.equal 1
		expect(proxy.prop).to.equal 2
		expect(receiver.value).to.equal 2
		expect(invokeCount).to.equal 1

		publisher.propB = ++currentValue
		expect(publisher.propA).to.equal 2
		expect(publisher.propB).to.equal 3
		expect(publisher.propC).to.equal 1
		expect(proxy.prop).to.equal 3
		expect(receiver.value).to.equal 2
		expect(invokeCount).to.equal 1

		publisher.propC = ++currentValue
		expect(publisher.propA).to.equal 2
		expect(publisher.propB).to.equal 3
		expect(publisher.propC).to.equal 4
		expect(proxy.prop).to.equal 4
		expect(receiver.value).to.equal 4
		expect(invokeCount).to.equal 2


		SimplyBind.defaultOptions.updateOnBind = true
		SimplyBind.defaultOptions.updateEvenIfSame = false


	test "Multiple disallows can be specified", ()->
		SimplyBind.defaultOptions.updateOnBind = false
		SimplyBind.defaultOptions.updateEvenIfSame = true
		invokeCount = 0
		currentValue = 1
		receiver = 'value':null
		publisherA = 'propA':1, 'propB':1, 'propC':1
		publisherB = 'propA':1, 'propB':1, 'propC':1
		proxy = 'prop':1

		SimplyBind('propA').of(publisherA).to('prop').of(proxy)
		SimplyBind('propB').of(publisherA).to('prop').of(proxy)		
		SimplyBind('propC').of(publisherA).to('prop').of(proxy)
		SimplyBind('propA').of(publisherB).to('prop').of(proxy)
		SimplyBind('propB').of(publisherB).to('prop').of(proxy)		
		SimplyBind('propC').of(publisherB).to('prop').of(proxy)

		SimplyBind('prop').of(proxy)
			.to('value').of(receiver)
				.transform (value)-> invokeCount++; value
			.disallowFrom('propB').of(publisherA)
			.disallowFrom('propA').of(publisherB)
			.disallowFrom('propC').of(publisherB)

		expect(publisherA.propA).to.equal 1
		expect(publisherA.propB).to.equal 1
		expect(publisherA.propC).to.equal 1
		expect(publisherB.propA).to.equal 1
		expect(publisherB.propB).to.equal 1
		expect(publisherB.propC).to.equal 1
		expect(proxy.prop).to.equal 1
		expect(receiver.value).to.equal null
		expect(invokeCount).to.equal 0

		publisherA.propA = ++currentValue
		expect(publisherA.propA).to.equal 2
		expect(publisherA.propB).to.equal 1
		expect(publisherA.propC).to.equal 1
		expect(publisherB.propA).to.equal 1
		expect(publisherB.propB).to.equal 1
		expect(publisherB.propC).to.equal 1
		expect(proxy.prop).to.equal 2
		expect(receiver.value).to.equal 2
		expect(invokeCount).to.equal 1

		publisherA.propB = ++currentValue
		expect(publisherA.propA).to.equal 2
		expect(publisherA.propB).to.equal 3
		expect(publisherA.propC).to.equal 1
		expect(publisherB.propA).to.equal 1
		expect(publisherB.propB).to.equal 1
		expect(publisherB.propC).to.equal 1
		expect(proxy.prop).to.equal 3
		expect(receiver.value).to.equal 2
		expect(invokeCount).to.equal 1

		publisherA.propC = ++currentValue
		expect(publisherA.propA).to.equal 2
		expect(publisherA.propB).to.equal 3
		expect(publisherA.propC).to.equal 4
		expect(publisherB.propA).to.equal 1
		expect(publisherB.propB).to.equal 1
		expect(publisherB.propC).to.equal 1
		expect(proxy.prop).to.equal 4
		expect(receiver.value).to.equal 4
		expect(invokeCount).to.equal 2

		publisherB.propA = ++currentValue
		expect(publisherA.propA).to.equal 2
		expect(publisherA.propB).to.equal 3
		expect(publisherA.propC).to.equal 4
		expect(publisherB.propA).to.equal 5
		expect(publisherB.propB).to.equal 1
		expect(publisherB.propC).to.equal 1
		expect(proxy.prop).to.equal 5
		expect(receiver.value).to.equal 4
		expect(invokeCount).to.equal 2

		publisherB.propB = ++currentValue
		expect(publisherA.propA).to.equal 2
		expect(publisherA.propB).to.equal 3
		expect(publisherA.propC).to.equal 4
		expect(publisherB.propA).to.equal 5
		expect(publisherB.propB).to.equal 6
		expect(publisherB.propC).to.equal 1
		expect(proxy.prop).to.equal 6
		expect(receiver.value).to.equal 6
		expect(invokeCount).to.equal 3

		publisherB.propC = ++currentValue
		expect(publisherA.propA).to.equal 2
		expect(publisherA.propB).to.equal 3
		expect(publisherA.propC).to.equal 4
		expect(publisherB.propA).to.equal 5
		expect(publisherB.propB).to.equal 6
		expect(publisherB.propC).to.equal 7
		expect(proxy.prop).to.equal 7
		expect(receiver.value).to.equal 6
		expect(invokeCount).to.equal 3


		SimplyBind.defaultOptions.updateOnBind = true
		SimplyBind.defaultOptions.updateEvenIfSame = false


















