Trapped.st 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. Smalltalk current createPackage: 'Trapped' properties: #{}!
  2. Object subclass: #EavModel
  3. instanceVariableNames: 'getBlock putBlock'
  4. package: 'Trapped'!
  5. !EavModel commentStamp!
  6. External actor value model.!
  7. !EavModel methodsFor: 'accessing'!
  8. getBlock: aBlock
  9. getBlock := aBlock
  10. !
  11. on: anObject
  12. "Returns value of model applied on object"
  13. ^getBlock value: anObject
  14. !
  15. on: anObject put: anObject2
  16. "Puts a value via model applied on object"
  17. ^putBlock value: anObject value: anObject2
  18. !
  19. putBlock: aBlock
  20. putBlock := aBlock
  21. ! !
  22. !EavModel methodsFor: 'initialization'!
  23. initialize
  24. getBlock := [ self error: 'No getter block.' ].
  25. putBlock := [ self error: 'No putter block.' ].
  26. ! !
  27. Object subclass: #Isolator
  28. instanceVariableNames: 'root'
  29. package: 'Trapped'!
  30. !Isolator methodsFor: 'accessing'!
  31. root
  32. ^root
  33. !
  34. root: anObject
  35. root := anObject
  36. ! !
  37. !Isolator methodsFor: 'action'!
  38. model: anEavModel modify: aBlock
  39. | newValue |
  40. newValue := aBlock value: (anEavModel on: self).
  41. anEavModel on: self put: newValue deepCopy
  42. !
  43. model: anEavModel read: aBlock
  44. aBlock value: (anEavModel on: self) deepCopy
  45. ! !
  46. !Isolator class methodsFor: 'initialization'!
  47. on: anObject
  48. ^self new root: anObject
  49. ! !
  50. Object subclass: #Trapped
  51. instanceVariableNames: ''
  52. package: 'Trapped'!