Trapped-Backend.st 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. Smalltalk current createPackage: 'Trapped-Backend' properties: #{}!
  2. Object subclass: #EavModel
  3. instanceVariableNames: 'getBlock putBlock'
  4. package: 'Trapped-Backend'!
  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-Backend'!
  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. ! !