Guest User

Untitled

a guest
Feb 21st, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. BaseDO := Object clone do(
  2. tableName := method(name, getSlot("self") setSlot("_tableName", name))
  3. primaryKey := method(name, getSlot("self") setSlot("_primaryKeyName", name))
  4.  
  5. init := method(
  6. o := getSlot("self")
  7. o _sqlFieldNames := Map clone
  8. o _changed := List clone
  9. )
  10.  
  11. changed := method(getSlot("self") _changed)
  12.  
  13. fieldSetter := method(v,
  14. name := call activated fieldName
  15. self setSlot(name, getSlot("v"))
  16. self _changed append(name)
  17. self
  18. )
  19.  
  20. getSlot("fieldSetter") newSlot("fieldName")
  21.  
  22. addField := method(name, dbName,
  23. o := getSlot("self")
  24. o setSlot(name, nil)
  25. o setSlot("set" .. name asCapitalized,
  26. getSlot("fieldSetter") clone setFieldName(name))
  27. o _sqlFieldNames atPut(name, if (dbName isNil, name, dbName))
  28. )
  29.  
  30. updateSQL := method(
  31. o := getSlot("self")
  32. if (o changed size == 0, return nil)
  33.  
  34.  
  35. sql := ("UPDATE " .. o _tableName .. " SET ") asMutable
  36. first := false
  37. o changed foreach(n,
  38. if (first, sql appendSeq(","))
  39. sql appendSeq(n .. "='" .. o getSlot(n) .. "'")
  40. first := true
  41. )
  42.  
  43. sql appendSeq(" WHERE " .. o _primaryKeyName .. "='" .. \
  44. o getSlot(o _primaryKeyName) .. "'")
  45.  
  46. sql println
  47. )
  48. )
  49.  
  50. ExampleDO := BaseDO clone do (
  51. init := method(
  52. resend
  53.  
  54. tableName("example")
  55. primaryKey("id")
  56.  
  57. self addField("id")
  58. self addField("first")
  59. self addField("last")
  60. )
  61.  
  62. fullName := method(first .. " " .. last)
  63. )
Add Comment
Please, Sign In to add comment