active_scaffold_sortable 3.6.2 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +267 -0
  3. data/app/views/active_scaffold_overrides/_form_association.html.erb +1 -1
  4. data/frontends/default/active_scaffold_overrides/_list.html.erb +1 -1
  5. data/lib/active_scaffold/config/sortable.rb +5 -5
  6. data/lib/active_scaffold_sortable/version.rb +2 -2
  7. data/lib/active_scaffold_sortable.rb +1 -0
  8. data/test/attribute_params_test.rb +69 -0
  9. data/test/auto_models_controller_test.rb +51 -42
  10. data/test/config_test.rb +44 -37
  11. data/test/controllers/ancestry_models_controller.rb +8 -0
  12. data/test/controllers/auto_models_controller.rb +2 -0
  13. data/test/controllers/models_controller.rb +2 -0
  14. data/test/controllers/nested_set_models_controller.rb +5 -0
  15. data/test/controllers/sortable_models_controller.rb +2 -0
  16. data/test/dummy/app/assets/config/manifest.js +1 -0
  17. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-0/-01A5W7YK9kU3BAS800iZYKE1Jjr-mMTZS7fQ87Rx9Y.cache +0 -0
  18. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-2/-2oLK5aS0W7YRh6DWw7gleUOPUgPQHe3WA-XlTeeQ6I.cache +1 -0
  19. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-3/-3JSgLkvqrbXhc6cV7vAvXuo40s6t9QfDEvko0kGqHY.cache +0 -0
  20. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-5/-5b8vqL4AFE9S1wXk_ZysEvjY3K9KSkap5rhGfqbAns.cache +0 -0
  21. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-D/-DnuHI88d2RugNRU74FFqmOIb9ctTsdUQh0DlMENCyo.cache +2 -0
  22. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/-x/-xveB5ZfM-eQ6NKFAdea3lFoN1vnudJ5LvZSRuzKQ_A.cache +0 -0
  23. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/0B/0BKtmzv1AlH_D8ePKCo6cK758902Yb9LuqMKD1YYRCI.cache +0 -0
  24. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/0R/0RBP8nKamBasZw5QxqMbxS-0qm_HmB-IrbHuLY5EkAE.cache +1 -0
  25. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/0o/0oBXAn_gNl9ci2FebzcrXp5muYP0gkwyuICM_2XgZSM.cache +2 -0
  26. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/1G/1GbJS0MAW1RcmPPFOzvRIWmCWnuRzHFpzYtbrSf9kn0.cache +3 -0
  27. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/1e/1epYXgb89BkEMcjSsF8ZneNxpnJd7CwQYPoeukBAUPk.cache +1 -0
  28. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/24/24C1vwwkvwnqO43YwbPnrtooBEgS2hzFxyGb5UIQ_z8.cache +0 -0
  29. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/2F/2FFeltlt3UB92gSStDW3dCExS323nvlf8jnLx0AQT7U.cache +3 -0
  30. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/2T/2TEBf82sw5GOia5tXBuC6_qcelFGyl_BiMd5t2mRo3I.cache +1 -0
  31. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/2X/2XvO4DdiQnv9iimEOceo5KSLzXyIpsH9zJPy0-G-mWw.cache +0 -0
  32. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/2e/2ejWr7IoRaAvGd2C8f9UZYwIeAFYcrQo97m9SM5XvG0.cache +1 -0
  33. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/2s/2sGAQ3lUIHy362ttHb99ML7tixBpnZ0gAE_1gjC5QNc.cache +1 -0
  34. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/38/38pY3RTKFmdKPW92BesHrVZZ5hOgBN2ZOMpg8Pfeq8o.cache +0 -0
  35. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/3V/3VQHyC_HOI6vTzyOFRqKgqBaibU0LvqY-vHrz2VsLe4.cache +0 -0
  36. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/4T/4TPtaEh2eMInSYN2oh7Pc5iDR4qR41inNfWu2Z3-4d4.cache +3 -0
  37. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/4Y/4Yd3Q4u1iCSnYLn28-EcjXomhSB9VJvBrsDuT5feMgE.cache +1 -0
  38. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/4c/4cYrHjoGTnsvI5Bxiol1DP1Cl17-8kMS0cA9d8QVvl4.cache +1 -0
  39. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/4c/4cx0kSMnteO1fMuTu1ldK4SK3T4qBMmFqHpYBEJIl1M.cache +2 -0
  40. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/5F/5FPfSxfXAzfMqbv9MYp_oPqDqCp5Ti42XqV96raVNmY.cache +1 -0
  41. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/5R/5RmcFexTZX4RML0m9HNAEogOkz6kAUnL1XAycQBQF68.cache +3 -0
  42. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/5d/5d7byxXxH0tYfzrL1xmvvOK3IWGWYmbIGYVFfFaE9dY.cache +1 -0
  43. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/5g/5g89-0a4fx7-hBM92_O2WNgdJMrUC5NJEbpBvAleVWU.cache +0 -0
  44. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/63/633hFkOuEJb_oUSK8cX03s1n2fLSTEb5NdC4cDIwpwA.cache +1 -0
  45. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/6j/6jKoXrSpfNRDsyNX4Zt6bH298l8LflVJ8bYAKsaHzzE.cache +1 -0
  46. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/6v/6v3hLMm6-Nd9GuMM_2saYxwsHtPGQIbkupZG2vvqa-c.cache +0 -0
  47. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/7P/7PY1-QqnAkLe9n-nRR-vrU2Fzd5MdehED9jP8erf8eo.cache +0 -0
  48. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/7a/7a8xYHOtPE4wTHEMmm6noe1konW7gY0PUSm0IBNTMtI.cache +1 -0
  49. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/7d/7d4afpWdI5JNwQ5cItnECrWVgm4tCn8n0JvJTD4T3qs.cache +1 -0
  50. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8A/8Awct50GB7qO_BjbGb7z6tLppN4-Zkvgw2MOYqw6YZM.cache +0 -0
  51. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8G/8GByrSoo2FlXP9v-YtRr3mXAlELF8VORWoHShm6nDdA.cache +3 -0
  52. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8c/8c1AnZluzIU5mA6hxvyQIdoKGWB_gGzUtUbmAL-EMi4.cache +0 -0
  53. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/8v/8vSTgcVfo7zRgOO9tDN887A2SISF1N6LaLE0SwEienU.cache +1 -0
  54. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/9V/9VuN8VYKTVYvAFQ8Og_aBqpRpiGxuy0Et3roDr_okqk.cache +1 -0
  55. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/BG/BGKeBGsHVMizN9unVFE6OuxZYBGKG1t6r-cH4MYW3LQ.cache +3 -0
  56. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/BQ/BQStLknXZiiwpMoPe6YrBxnBD-1wDEEN8k1mYrJ3Uxw.cache +1 -0
  57. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/BW/BWochnvJlhWYZdwSmq6mz-jEixAT70nDd-v2kKu9vqw.cache +0 -0
  58. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/C-/C-7R1F-IclQa7n3Hd4qJnLbBAU5Pcu7LxaVCrdCpGm0.cache +2 -0
  59. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/CK/CKhIMyvEb6CDyLEFjVWINYFKmLJ4PP4loyBb9TSRuMY.cache +0 -0
  60. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/CP/CPRlIspialBD_8QWdu_BfuiA-0NiaCIAIjENtD1GTVM.cache +2 -0
  61. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/CV/CV9H0CtTQ90oOjk85ymAap-0weDW8crx2mv9iWwADxs.cache +1 -0
  62. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Cs/CsQ51viK_aIp-m7ZlSFOnb4sFWpBNWaZblmvpPZAPZM.cache +1 -0
  63. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/D6/D6Qu6xXoQxwWWu9I8MH06EV_ZCDIdkd1C30t_qGVDNI.cache +1 -0
  64. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/DN/DNjqY8NAzkt9P2e6Y6nhm_lDGdHAmeYStAwysDr_XI8.cache +0 -0
  65. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Dv/DvsUO7WNA9YxClJwRzWSEzvC1WbUiIqoELa81jklXnU.cache +0 -0
  66. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Fa/Fams27IUjgGgDYh4ZebQLOL2ZVlyXeObh0zGm7L7itY.cache +1 -0
  67. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Fd/FdwcZofVKxaRa1PHEqgrVNOb_NfhW7AkOaQr8Jpd8F8.cache +1 -0
  68. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Fi/Fix6os7onITNYUoeQXZIZ9ipaPXY8qveVp544iQ2pu0.cache +1 -0
  69. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Fo/Foxj9g0CYVowTIQC5l3ont29y6kzyjq1tCto_XmD1Y8.cache +1 -0
  70. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Gm/Gmx2uSucvix2U85bFcJwdUiK4W0_l0ktmUpZYH0kuh8.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/H5/H5jANW5FBiru_dQ2zHyOLCXrUutOhHWVccsPOlHjPlw.cache +1 -0
  72. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/I8/I8Di5A_iVdMQnWl8i0jR1EDPY-zGKXRsX6FrHOUKY_k.cache +0 -0
  73. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/IG/IGLiMvn8Ia3obsUVYlf5H2Pc4hMVBXoHVrCh_BbHeos.cache +1 -0
  74. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/IU/IU3Vj0C_4HJivemzxbufqxLy3uOizcW6mjksAApYonI.cache +3 -0
  75. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/IV/IVzbuuk4Y8uceJaYEi3eHzZ3L3-X9_RyiKuV2mjuq14.cache +0 -0
  76. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Im/ImYjTVLdbIdhT9HmAR5592TGiS6do4CU5aTM57NDtF8.cache +1 -0
  77. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Jo/Joc7W-HUxa_SCuMY1ji3Tb_anGXmH8dXBLEIl7y3qQY.cache +1 -0
  78. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Kp/Kp1mrZLRWB7EWOtPVpLqGWKv-kIAAM_cHpkoYEASq0k.cache +1 -0
  79. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Kp/KpOG7KGgj5QGIvXgdmmMNmNLcDzUNj0-HRArprvTc2M.cache +1 -0
  80. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Kr/KrnWYZN30K4B7kS4tYoFPc2uvUXN4wq4R-zg1s8Pte8.cache +1 -0
  81. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/LB/LBAH0XPkrk6feDLGh6rjc-oRVjDHWf09jT2s1OF0DGk.cache +1 -0
  82. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/LK/LKdhU8uwD92K_SdC7Tg_nnk32QEeIHGK5PnSSsQB1GU.cache +0 -0
  83. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/LX/LXRQyuA2BiXpXNe-2PIOPP_gfu2J9r8ECfinQWs5Pn4.cache +3 -0
  84. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Lt/LtK_Npm-kOHPrwrpfOkzvivUSMv9C35TO8kccAJFAoE.cache +0 -0
  85. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/M-/M-zp45dW9TWoC7zAUn3L2BwKG2a6gagSXpG8nSyMg8g.cache +1 -0
  86. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Mv/MvW2Dl5BoobN-SWNyCaxMP47Ihyd8e8UCEcYVeDkEr4.cache +1 -0
  87. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Mw/MwZE2PNpy_0-Qa3_iv7j25MuGl-1OZUO2XkDoomSyQc.cache +1 -0
  88. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/NP/NPs6FRY1WbljwZoGarj2bqozBfutuaWBe3nVfrQ2A-k.cache +2 -0
  89. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/O7/O7ygnT4NqWCR5SU1qTty3j0909VVtEN7SqVI3exJ1Fs.cache +0 -0
  90. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Oj/OjnYwM2pcnX18Fnj3AKBYJslH-_oI-eJFr1jKF_bec0.cache +1 -0
  91. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Om/OmD88cOkZnce7jiIW_uKN5UzecfSk7LPBHUWdr9nuaY.cache +1 -0
  92. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/P1/P1RCU1-eTX730fxykGCghfCTNXe74fdWitwW7p0lux0.cache +1 -0
  93. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/P5/P5ifL2bLkG9zc7oNXwYKCzsAZLzKY_bHqBAQf64TnFo.cache +0 -0
  94. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/PB/PBNeP5ORDO5a3Tn1n5hEA4OS0JTbGgGuyupEljHYK-Q.cache +1 -0
  95. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/PJ/PJDpkmr3C8KVM9BqbaUPLH4L5f0xWtRDo3wc4vuvtTw.cache +0 -0
  96. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Pa/Paylg2dvY4FEVeol8QRGXmnlmSxW9iAhrhu8WUIH_2E.cache +1 -0
  97. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Pc/Pcgbo3Rysr6BlArqxHR4qLirVHsynsi_FRV-fndn8Hg.cache +0 -0
  98. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Q1/Q1opUEyDInXXYe5UDccDz438AyblZ0oiavmzG2BDFJc.cache +1 -0
  99. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Q7/Q7La6t5hz_qGvKi59nbxxnhObRb0nHwdofHEDbNLYGI.cache +0 -0
  100. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Qh/Qhnmild8NLF6AJmiUOCxEq6l4V9WDM46gt3iKNUpfGE.cache +0 -0
  101. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ra/Ra8PGm0CtdBdRARR5KsiT2Iv-P3wZNe55vCNqu4qdM8.cache +1 -0
  102. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Rx/RxmsaxLeIQ5xwIZ14vz5ehoc_6TjP5Rpa3CRny4tWG8.cache +1 -0
  103. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/SA/SA8b2a-PX1nDgzdCcJaBTW8Y2qQfBeKvrsNd2FHV9kk.cache +3 -0
  104. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/SO/SOAX-5LQ2QKMVKgYM3-vLvqxZEFV7aXqi6T0nHK8JdE.cache +0 -0
  105. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/SS/SSg5bDqJBLv8UDn6NjSt-28FTDnXrmr4lm3-qD-gzlg.cache +1 -0
  106. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Sb/Sb2EeQPQyWe0nb2aId-BRi76gdNMbx-_b7oDXu_--3I.cache +1 -0
  107. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Sh/ShqS7p9Dz8B0KnsOEeur1lGGb96LoW2Tufapu6vRYQQ.cache +3 -0
  108. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Sn/SngbFvFTz9jtho3VfcDRkhi5KvV5mNXHtZ3faRj0mq0.cache +1 -0
  109. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/TJ/TJXSOh8D6dsgfhXh7KlzynHOrYwXy9yi0YKdvZlwS2M.cache +1 -0
  110. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/TR/TRWPFjvokQ5AmFcLYZk5OlgmDulZ1HeMWnwASg_0tDA.cache +2 -0
  111. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/UZ/UZkjDOYpoE1pwHlkI402W8lj58qyM9pbBo0Jmqwnh_M.cache +1 -0
  112. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Ut/UtUl8dEEP8OUFS138GTWLf8TE8FhJYK5c1vaXAmRM_E.cache +1 -0
  113. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/VR/VRDKUY6-sXjrwpqcbxGHgP9_ONi3gwEVncUA1uzJPV8.cache +3 -0
  114. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Wl/WlFfd39WfPdb8ecb3P-6msbwc6U1rpZ67MkPGvuwwPI.cache +1 -0
  115. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Wl/WlNGLojqnKVWTZGT6xG9pS4_52XBnkQaDrxPeLOjfG0.cache +0 -0
  116. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Wo/Wo7IjVQE59FU0N57DfY8aS_EhOHYTevXt2w-A6GG1OE.cache +0 -0
  117. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Wp/Wp_HHYHjzz0iw5PQ3uWhju_JwBeuUmjrFE-w9P7TiJI.cache +1 -0
  118. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Wt/WtsclIiibz_nWtYI4bN1ogz2DouCxLxRhZ4To_veN6c.cache +1 -0
  119. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/X6/X6rI-YDY0BKCdMA_eQAK3u_bZOrZxe7wtn_t4wjcyGM.cache +3 -0
  120. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Y2/Y2GMeqGBGgWrYZmI2sZO62LNEPoBGJ1bF9nRF5tHo30.cache +1 -0
  121. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/YL/YLRMkD5PzC_acvA63jrF8Q_ImDPecqclwDlUHfU6tFk.cache +2 -0
  122. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/YQ/YQfKqw0LUSliN1R029iBJ-Q5rvPflUcQMcBaQUy9tHI.cache +1 -0
  123. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/YY/YYt9duEQUzPtfzFEbyThgE8axhVDyynnMHRsJ7ivmfU.cache +1 -0
  124. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Yb/Yb6WF-FKlg7AX5I1fBtUVFJwGZ9lZng-WBXOWcNKBFI.cache +1 -0
  125. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Yb/YbSqwPYrjO2_pDN9Gar6NmrSu9uPMQVK6bOg9t6rLQE.cache +0 -0
  126. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ZD/ZDax1kp2GkGUgRyO0nM0Rrg_AqtpocNI69dbDijDz-o.cache +3 -0
  127. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Z_/Z_J_urKomTrgc54gT_yMF77dy5dvTc4o8tP9xBT0Ei4.cache +1 -0
  128. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/_9/_96XOgK4uLAgBpmlNxMhvpSKR0RACQPa7b8Zs7JvFhM.cache +0 -0
  129. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/_e/_eGqFuynzxHdBcyQcb39R3gIpkw8pJHIpIb2d3y4Wgw.cache +1 -0
  130. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/_k/_khcJKAEuVGqYQyMhPgrorWWBci3uioHdU_rRWHor5U.cache +3 -0
  131. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/aW/aWhzKkJzJA3zSzcyHgvAH6gY0wtH9AvCwrPfGn0yinQ.cache +0 -0
  132. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/bf/bfvmq2y8rZqB0uY7rAOUlBowZqo6ufc_5nfG1LYwzBA.cache +0 -0
  133. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/bw/bwhovo7do9KWTEDh74VaX0SkTZ9rVlapdjDGGsOkYoA.cache +3 -0
  134. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/dA/dAk68mPJqLTk4teOIIYt_aLVM14EOuIxA9fCCeBrKFE.cache +1 -0
  135. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/df/df1Eyp3Nlhb2MpTqIOUTNLPF3zLZm8glepkhoAgalaU.cache +1 -0
  136. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/eH/eHywcNwiONssCBDpivCVg95qXNqh3DG7IW-Gn09y_WI.cache +2 -0
  137. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/eW/eWSTSytTG9nrCXUXlFyNTT2SnQNavB-7ZHbQJdzRW78.cache +0 -0
  138. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ea/eaG88T0kV6x-aQgXngib2_5TkPRHcQUsNeRwyBFvTxw.cache +1 -0
  139. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/fR/fROdNnXbOkrkCX0VjA67bx-85BNOcWA-pr9oNeTX-6U.cache +1 -0
  140. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/fZ/fZszKxkZvRa-5uIuGwojHFzFDfTBdaghYq0YuSDd0fg.cache +0 -0
  141. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/h2/h2jllO4xPhzz7DDl4giyfC-M-KE2kBHbFjbKneUaH0s.cache +0 -0
  142. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/hG/hGOgAdR_N4noGNRRx25KqnZDGCE4OtVHqBvMAxHqVCI.cache +1 -0
  143. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/iA/iA5sBAvo4LBx2bolG45IV3j3VAir_HgEFaYJSU1CsuI.cache +0 -0
  144. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/kA/kAE78w1XBkLkUmFIMRQaeSzbVb4I5djjXPgd9rVMQak.cache +3 -0
  145. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/kS/kS3sp7MRq8LQbBTY9WRRMfWcKyqYZG0V9KSs9JlIDPI.cache +1 -0
  146. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ka/ka1yaE-uG5A54kvAVKscIBd4DGwDGOnLpCk6EV4NeK8.cache +0 -0
  147. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/kj/kjHBBL52Qb2LGmXskl7pye9EKuqYX23L_DKk5H-jTCY.cache +0 -0
  148. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/kt/ktYvvoV5OLXgOJ-0uUmNrJzScE6jrUD1r0VeS7rToRI.cache +0 -0
  149. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/kw/kwcepSV0CIKivTUVXF3xfeIHW4sLfQta700qqhtx-PA.cache +0 -0
  150. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/lk/lkd5ZZsrE9KoB6uUBMiHYDIf7nUofIZ0zUzTQhw3q5M.cache +1 -0
  151. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/m5/m5zl3ZQ9497Ws3dcM25-9xPXK7EHZhM8lN_sGgEkDao.cache +1 -0
  152. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/nN/nNeCvN6msedBHaJP2LDnQQcMItRJFjRBEoNrxJIJsqA.cache +0 -0
  153. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/nj/njx8yCFK0rUv9-EODcBOR1dqntXG_qErD4GKmlLVP5U.cache +3 -0
  154. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/o7/o7uGfsn8XAZCoxgv-xvAx64lNhXKqHROrnQ0eM67ShI.cache +3 -0
  155. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/oi/oiR9kx7NN7FtqW4tuxAqKuMbTzntnD4h4vtvnEzHJJs.cache +0 -0
  156. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/om/om6KTDfdJHGdhoscNLPYOkzi9bALNxlUp7Ax_uVS3LY.cache +1 -0
  157. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/op/opp4OeslOryoI1PDbzk_OMlXuQGqNjp5R-BoWFPinqk.cache +1 -0
  158. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ox/oxrsONd2_TIlLWaYwbrbwvAoFIr4XYacRKStijLPMhs.cache +0 -0
  159. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pC/pCI6lsX8vSY57jAP9xHgpaaxzxIv1qwGBtNzxfbtWL0.cache +3 -0
  160. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pD/pDRTkMgfNorje-QH5KBHWyIJr4V7Kk0cektjtCKzsHQ.cache +0 -0
  161. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pS/pStecU0QLgBBJhrlftzFIOIny1_1eJQ1wb006wR6hHI.cache +3 -0
  162. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pc/pcZ1fITskNzguH0ctYLXa_J-6KYGEwEZim8Zi7HHWuw.cache +2 -0
  163. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qC/qCk8n9E10BaN-4MSbOGm-aOocRuvKbUwnEzFSOEnyMk.cache +3 -0
  164. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qF/qF4Jxo_QusqFxZlTUufstoSMqM8BwxOeBYeeaUlMQMM.cache +0 -0
  165. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/rN/rN0TBip7LVkikWIt7pr5pXpebCMu-Vszwr3JtNl85Rg.cache +1 -0
  166. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/re/reY88CfGWWiGlDTj_aT-R1IQ4HwtgJ8M4x2QSZi3g1k.cache +0 -0
  167. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/rf/rf9yIxeJnjcgy1j_Z0ZaBP5o1fRWnI4s6RKqXtXnfNY.cache +0 -0
  168. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/s4/s4H_e7Jtc3bYP6_jcDC1djtCN0zmdIjgfCjszHdyYSU.cache +0 -0
  169. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/sb/sbZBtfS1lz5ysnVhxOHQ3uQx2vuw0Dml_N69G5SnVSg.cache +1 -0
  170. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/tM/tMjri0obeX3cWblgB5ANaxvz2r1Un5w-kdAgV2mnBUw.cache +1 -0
  171. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/tR/tR4pe9KUkOD0dXQr0Rmz49lhvtLaTX2Va99AozZ-_tk.cache +3 -0
  172. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/tR/tRmf4Ta_ZHZRBt4KuyLVmN-3QgPG4aCqy3nqmLrjTlE.cache +1 -0
  173. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/u-/u-1XahJaVW5YYTRugzlxdg6JhZoVk2UMhLaJF3O1vg0.cache +0 -0
  174. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ub/ubOIJHHBsVau6eMNKfZu9D07kkX2uEsMNChK5vWQoQU.cache +2 -0
  175. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/uf/ufSwWA73VH7bS7CMeQp_vUlRYsZNh4Hl_SxJORHxBs8.cache +1 -0
  176. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/vI/vIR0VWobVpWydqbzq29IQ84VRHCYBzdk3YTRh4UbH1w.cache +1 -0
  177. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/x_/x_AI1EzZWPpRoWC6lFtm6rpp5lycO0l-JeoBiiBsQuU.cache +2 -0
  178. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/xe/xeBZETuoTTj0K-JS67s72_rtxLpAvc5L731R6Q8CjLw.cache +1 -0
  179. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/xl/xlv-FINzwAUI9lLqHtM8Ml6TcP0fI1T7_1hASqmh1uw.cache +1 -0
  180. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/xp/xpBi9YqwkljWG2uwGCwVtJFrzwGTNWjKSg_9YqqxsG0.cache +0 -0
  181. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/yb/ybfHSoG4-2Xqjkk-hkTD4fAGZIBZWkIyHcBlQjIovJI.cache +3 -0
  182. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/yk/ykudLIz9khw9ygFAJSj1FFiZFv8gE8hQqykRNB9gLNI.cache +2 -0
  183. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/yr/yrLtWJQXs4lm9sonGNHNkFRzm8xpmrWQwGZHjIh5qXs.cache +0 -0
  184. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/z-/z-PkdiKIZoqXSf6edzu84RnR9qQGGL_iD94rf6GSy-0.cache +1 -0
  185. data/test/models/ancestry_model.rb +16 -0
  186. data/test/models/auto_model.rb +3 -1
  187. data/test/models/model.rb +2 -0
  188. data/test/models/nested_set_model.rb +39 -0
  189. data/test/router_test.rb +10 -3
  190. data/test/schema.rb +9 -6
  191. data/test/test_helper.rb +47 -36
  192. data/test/tree_models_controller_test.rb +70 -0
  193. metadata +357 -10
  194. data/README.textile +0 -76
@@ -0,0 +1 @@
1
+ "%��z�7���8�NHM�z�,F���ˮ���G`P
@@ -0,0 +1 @@
1
+ "%�N��L��5�T �p�D����^�'.��LWI�
@@ -0,0 +1,3 @@
1
+ [o:Set:
2
+ @hash}
3
+ I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"2processors:type=image/png&file_type=image/png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/arrow_up.png;TTF
@@ -0,0 +1 @@
1
+ I"}app/assets/config/manifest.js?type=application/javascript&id=ad83e09cd538ef8add9556148c72a56c24d674845dce5a7faef759fd8222c50a:ET
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash}$I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/config/active_scaffold/manifest.js;TTI"qfile-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images;TTI"|file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/add.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/arrow_down.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/arrow_up.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/close.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/close_touch.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/config.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/cross.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/fast-arrow-left.svg;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/fast-arrow-right.svg;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/gears.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/indicator-small.gif;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/indicator.gif;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/magnifier.png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/refresh.png;TTI"vfile-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/javascripts;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/javascripts/active_scaffold.js.erb;TTI"vfile-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/active_scaffold-ie.scss;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/active_scaffold.scss;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/active_scaffold_extensions.css.erb;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/active_scaffold_images.scss;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/active_scaffold_layout.css;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/blue-theme.css;TTF
@@ -0,0 +1 @@
1
+ I"�/home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/config/active_scaffold/manifest.js?type=application/javascript&pipeline=self&id=b9fd4aebde344e8ae45979b9d77f3ccc50e32e2725fd52c29fa49b4e0708ae5d:ET
@@ -0,0 +1 @@
1
+ "%7�[�B�h�|��ƙ ��3����BC/��8�n
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"0processors:type=text/css&file_type=text/css;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/blue-theme.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTF
@@ -0,0 +1 @@
1
+ I"�/home/sergio/web/active_scaffold_sortable/app/assets/images/active_scaffold/sortable.png?type=image/png&id=62d645e1ca2f65d2b93f0547f138e0f884c16ccb0ac99bf00cd7ca6e581e172c:ET
@@ -0,0 +1 @@
1
+ "%�J�,��z��]��"�v��G�H�谷ֿp�
@@ -0,0 +1,3 @@
1
+ [o:Set:
2
+ @hash}
3
+ I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"2processors:type=image/png&file_type=image/png;TTI"�file-digest:///home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/images/active_scaffold/close.png;TTF
@@ -0,0 +1,2 @@
1
+ "%��k`)AU^�Q�=]�̴
2
+ l����kS�lB�1
@@ -0,0 +1 @@
1
+ I"�/home/sergio/.rvm/gems/ruby-3.4.7@active_scaffold/gems/active_scaffold-4.1.1/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb?type=text/css&pipeline=self&id=6065d180b049d867b37b6e13b1b71868cfafe22f358336a4ea73506369a8a41c:ET
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AncestryModel < Model
4
+ belongs_to :parent, class_name: "AncestryModel", optional: true
5
+ has_many :children, class_name: "AncestryModel", foreign_key: :parent_id
6
+
7
+ scope :roots, -> { where(parent_id: nil) }
8
+
9
+ def self.ancestry_column
10
+ :ancestry
11
+ end
12
+
13
+ def is_root?
14
+ parent_id.nil?
15
+ end
16
+ end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AutoModel < Model
2
4
  def acts_as_list_class
3
5
  end
4
6
 
5
7
  def position_column
6
- 'position'
8
+ "position"
7
9
  end
8
10
  end
data/test/models/model.rb CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Model < ActiveRecord::Base
2
4
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A minimal implementation of the API used by awesome_nested_set. It keeps the
4
+ # test focused on this plugin's integration without duplicating that gem here.
5
+ class NestedSetModel < Model
6
+ scope :roots, -> { where(parent_id: nil) }
7
+
8
+ def nested_set_scope
9
+ end
10
+
11
+ def left_column_name
12
+ "position"
13
+ end
14
+
15
+ def self_and_siblings
16
+ relation = parent_id ? self.class.where(parent_id: parent_id) : self.class.roots
17
+ relation.order(:position).to_a
18
+ end
19
+
20
+ def move_left
21
+ move_by(-1)
22
+ end
23
+
24
+ def move_right
25
+ move_by(1)
26
+ end
27
+
28
+ private
29
+
30
+ def move_by(offset)
31
+ siblings = self_and_siblings
32
+ sibling = siblings[siblings.index(self) + offset]
33
+ return unless sibling
34
+
35
+ old_position = position
36
+ update_column(:position, sibling.position)
37
+ sibling.update_column(:position, old_position)
38
+ end
39
+ end
data/test/router_test.rb CHANGED
@@ -1,5 +1,12 @@
1
- require 'test_helper.rb'
1
+ # frozen_string_literal: true
2
2
 
3
- class RouterTest < ActionController::TestCase
4
- should_route :post, "/sortable_models/reorder", :controller => :sortable_models, :action => :reorder
3
+ require "test_helper"
4
+
5
+ class RouterTest < ActionDispatch::IntegrationTest
6
+ test "routes reorder requests" do
7
+ assert_routing(
8
+ { method: :post, path: "/sortable_models/reorder" },
9
+ { controller: "sortable_models", action: "reorder" }
10
+ )
11
+ end
5
12
  end
data/test/schema.rb CHANGED
@@ -1,9 +1,12 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- ActiveRecord::Schema.define(:version => 1) do
4
- create_table 'models', :force => true do |t|
5
- t.string 'name'
6
- t.integer 'position'
3
+ ActiveRecord::Schema.define(version: 1) do
4
+ create_table :models, force: true do |t|
5
+ t.string :name
6
+ t.integer :position
7
+ t.integer :parent_id
8
+ t.timestamps
7
9
  end
8
- add_index 'models', ['position']
10
+ add_index :models, :position
11
+ add_index :models, :parent_id
9
12
  end
data/test/test_helper.rb CHANGED
@@ -1,40 +1,51 @@
1
- # encoding: utf-8
2
- ENV["RAILS_ENV"] = "test"
3
-
4
- require 'minitest/autorun'
5
- # You can use "rake test AR_VERSION=2.0.5" to test against 2.0.5, for example.
6
- # The default is to use the latest installed ActiveRecord.
7
- if ENV["AR_VERSION"]
8
- gem 'activerecord', "#{ENV["AR_VERSION"]}"
9
- gem 'actionpack', "#{ENV["AR_VERSION"]}"
10
- gem 'activesupport', "#{ENV["AR_VERSION"]}"
1
+ # frozen_string_literal: true
2
+
3
+ ENV["RAILS_ENV"] ||= "test"
4
+ ENV["DATABASE_URL"] ||= "sqlite3::memory:"
5
+
6
+ require "bundler/setup"
7
+ require "minitest/autorun"
8
+ require "rails"
9
+ require "action_controller/railtie"
10
+ require "active_record/railtie"
11
+ require "active_scaffold"
12
+ require "active_scaffold_sortable"
13
+
14
+ class TestApplication < Rails::Application
15
+ config.root = File.expand_path("dummy", __dir__)
16
+ config.eager_load = false
17
+ config.logger = Logger.new(nil)
18
+ config.secret_key_base = "active-scaffold-sortable-test-secret"
19
+ config.hosts.clear
11
20
  end
12
- require 'rubygems'
13
- require 'active_record'
14
- require 'action_controller'
15
- require 'action_view/test_case'
16
- require 'action_mailer'
17
- require 'active_support'
18
- require 'rails'
19
- require 'active_scaffold'
20
- require 'active_scaffold_sortable'
21
-
22
- require 'mocha/setup'
23
-
24
- #ActiveSupport::Dependencies.load_paths = %w(test/models test/controllers lib ../active_scaffold/lib).map {|dir| File.dirname(__FILE__) + "/../#{dir}"}
25
- #$:.unshift *ActiveSupport::Dependencies.load_paths
26
-
27
- require File.join(File.dirname(__FILE__), '../../active_scaffold/lib/active_scaffold')
28
- require 'sortable'
29
-
30
- ActionController::Routing::Routes.draw do |map|
31
- map.root :controller => 'home'
32
- map.resources :sortable_models, :active_scaffold => true
33
- map.resources :auto_models, :active_scaffold => true
34
- map.resources :models, :active_scaffold => true
21
+
22
+ TestApplication.initialize!
23
+
24
+ Rails.application.routes.draw do
25
+ concern :active_scaffold, ActiveScaffold::Routing::Basic.new(association: true)
26
+ resources :sortable_models, concerns: :active_scaffold
27
+ resources :auto_models, concerns: :active_scaffold
28
+ resources :ancestry_models, concerns: :active_scaffold
29
+ resources :nested_set_models, concerns: :active_scaffold
30
+ resources :models, concerns: :active_scaffold
31
+ end
32
+
33
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
34
+ ActiveRecord::Schema.verbose = false
35
+ load File.expand_path("schema.rb", __dir__)
36
+
37
+ require_relative "models/model"
38
+ Dir[File.expand_path("models/*.rb", __dir__)].sort.each { |file| require file }
39
+ Dir[File.expand_path("controllers/*.rb", __dir__)].sort.each { |file| require file }
40
+
41
+ class ActionController::TestCase
42
+ setup do
43
+ @routes = Rails.application.routes
44
+ end
35
45
  end
36
46
 
37
- ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
38
- silence_stream(STDOUT) do
39
- load(File.dirname(__FILE__) + "/schema.rb")
47
+ class ActionDispatch::IntegrationTest
48
+ setup do
49
+ @routes = Rails.application.routes
50
+ end
40
51
  end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class TreeModelsControllerTest < ActionController::TestCase
6
+ setup do
7
+ Model.delete_all
8
+ end
9
+
10
+ test "reorders Ancestry root nodes" do
11
+ @controller = AncestryModelsController.new
12
+ first = AncestryModel.create!(name: "first", position: 1)
13
+ second = AncestryModel.create!(name: "second", position: 2)
14
+
15
+ post :reorder,
16
+ params: { "as_ancestry_models-tbody" => [second.id, first.id] },
17
+ xhr: true
18
+
19
+ assert_response :success
20
+ assert_equal 2, first.reload.position
21
+ assert_equal 1, second.reload.position
22
+ end
23
+
24
+ test "reorders Ancestry children without changing their parent" do
25
+ @controller = AncestryModelsController.new
26
+ parent = AncestryModel.create!(name: "parent", position: 1)
27
+ first = AncestryModel.create!(name: "first", position: 1, parent: parent)
28
+ second = AncestryModel.create!(name: "second", position: 2, parent: parent)
29
+
30
+ post :reorder,
31
+ params: { "as_ancestry_models-tbody" => [second.id, first.id] },
32
+ xhr: true
33
+
34
+ assert_response :success
35
+ assert_equal [parent.id, 2], [first.reload.parent_id, first.position]
36
+ assert_equal [parent.id, 1], [second.reload.parent_id, second.position]
37
+ end
38
+
39
+ test "auto-enables and reorders nested-set API models" do
40
+ @controller = NestedSetModelsController.new
41
+ first = NestedSetModel.create!(name: "first", position: 1)
42
+ second = NestedSetModel.create!(name: "second", position: 2)
43
+ third = NestedSetModel.create!(name: "third", position: 3)
44
+
45
+ assert NestedSetModelsController.active_scaffold_config.actions.include?(:sortable)
46
+
47
+ post :reorder,
48
+ params: { "as_nested_set_models-tbody" => [third.id, first.id, second.id] },
49
+ xhr: true
50
+
51
+ assert_response :success
52
+ assert_equal [third.id, first.id, second.id],
53
+ NestedSetModel.order(:position).pluck(:id)
54
+ end
55
+
56
+ test "reorders nested-set children without changing their parent" do
57
+ @controller = NestedSetModelsController.new
58
+ parent = NestedSetModel.create!(name: "parent", position: 1)
59
+ first = NestedSetModel.create!(name: "first", position: 1, parent_id: parent.id)
60
+ second = NestedSetModel.create!(name: "second", position: 2, parent_id: parent.id)
61
+
62
+ post :reorder,
63
+ params: { "as_nested_set_models-tbody" => [second.id, first.id] },
64
+ xhr: true
65
+
66
+ assert_response :success
67
+ assert_equal [parent.id, 2], [first.reload.parent_id, first.position]
68
+ assert_equal [parent.id, 1], [second.reload.parent_id, second.position]
69
+ end
70
+ end