object.lua 938 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. local object = {}
  2. function object.create()
  3. return setmetatable({}, {__index = object})
  4. end
  5. function object:include(source, ...)
  6. if not source then return self end
  7. util.merge(source, self)
  8. return self:include(...)
  9. end
  10. function object:wrap(fn)
  11. return f.self(fn, self)
  12. end
  13. function object:dispose(subscriptions)
  14. if not subscriptions then return end
  15. self._subscriptions = self._subscriptions or {}
  16. for i = 1, #subscriptions do
  17. table.insert(self._subscriptions, subscriptions[i])
  18. end
  19. end
  20. function object:unbind()
  21. if not self._subscriptions then return end
  22. for i = 1, #self._subscriptions do
  23. self._subscriptions[i]:unsubscribe()
  24. end
  25. end
  26. function object:new(state, ...)
  27. local instance = setmetatable({}, { __index = self })
  28. f.try(instance.init, instance, ...)
  29. instance = util.merge(state or {}, instance)
  30. instance:dispose(f.try(instance.bind, instance, ...))
  31. return instance
  32. end
  33. return object