subdivision_select 0.0.2 → 0.0.3

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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/subdivision_select.js +12 -3
  3. data/lib/subdivision_select/engine.rb +0 -2
  4. data/lib/subdivision_select/subdivision_select_helper.rb +32 -25
  5. data/lib/subdivision_select/tag_helper.rb +23 -0
  6. data/lib/subdivision_select/version.rb +1 -1
  7. data/lib/subdivision_select.rb +2 -0
  8. data/spec/test_app/app/controllers/addresses_demo_controller.rb +4 -0
  9. data/spec/test_app/app/views/addresses_demo/_form.html.erb +0 -26
  10. data/spec/test_app/app/views/addresses_demo/index.html.erb +26 -8
  11. data/spec/test_app/app/views/addresses_demo/tags.html.erb +39 -0
  12. data/spec/test_app/config/routes.rb +1 -0
  13. data/spec/test_app/db/development.sqlite3 +0 -0
  14. data/spec/test_app/db/seeds.rb +2 -0
  15. data/spec/test_app/db/test.sqlite3 +0 -0
  16. data/spec/test_app/log/development.log +4268 -0
  17. data/spec/test_app/log/test.log +2616 -0
  18. data/spec/test_app/spec/controllers/addresses_demo_controller_spec.rb +7 -0
  19. data/spec/test_app/spec/features/select_boxes_spec.rb +50 -31
  20. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/-4zQSSB0Ny3HvS_Sm1acc6RK-bAhsy-y_XAlWd5rp8o.cache +0 -0
  21. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/-BKkD9409F3UqWy57ZIIxCp2t8MzFrEmHvNsw2mSzBM.cache +1 -0
  22. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/-kKTKdAgrbpLVPW3mfCzVmt01zuhnV82Cy5P0MlHzcc.cache +0 -0
  23. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/3YVZoA0mNXoMh163YtKnQ8BPuKQ1Kw3B0lUgV8SO1Ds.cache +0 -0
  24. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/3ljnwFGcPYqS83-ZjQVe5ucy1JsZdKmm6HmpMhsPfV0.cache +0 -0
  25. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/40-WaaVgQEENDz26f0WHk2cenMBTKUx9LsW1tDQ2aLI.cache +1 -0
  26. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/4N_ZrtrJgYdTsFy1d-xqcBx638yLylSi9cuH7Xv_Z7c.cache +2 -0
  27. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/4bfQFR20YosW6FFh0KAT37vt7e0MgzW4mRjI26YU3KA.cache +1 -0
  28. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/5lUjTP0B5Ydv-vw1ZJ0Fh7HrS-4Dp7qUxguBPzRnNss.cache +0 -0
  29. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/6FYxC7OH_cTPWdCMJbkxZgxg5djoqHEV6NvX5nBGlhk.cache +0 -0
  30. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/8QcpXf_Le3ll5DF3as85ZbWTBMXgQI4PzS0-SSlzOaU.cache +1 -0
  31. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Bhd9Qow23weU26GAhklgu1r2lpBSxHR2ZhK9cah29F4.cache +0 -0
  32. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/CG8jFrgm3D5-eutmgRa-9U52AKM1zWeOZ2VxsM63tck.cache +1 -0
  33. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/DfvKKTeQUhursJrH6_23Bduu_bXkQDRQyieLeABGcS4.cache +1 -0
  34. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/EUWqEO2PluIawTrHnhQh1FzNlFjmMcBny6zvNlWTacw.cache +0 -0
  35. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/FAEkD7rBDtHSZU5JIRO2MdjtTlgJ-q8BtE5ccYNeP6U.cache +0 -0
  36. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/GI1cUmASeEaBKCXxF7sBWaTfbE4p-HxdtReeptlR4d8.cache +0 -0
  37. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/GIhiZ25FffJWMvAdS5LHxZQHT5oDjgfLldfFQNImhoA.cache +1 -0
  38. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/GheTBgTE58caQzWODIoitYKH0SCt1tPq56IOz8Sd_IU.cache +2 -0
  39. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/JYPcdHZUiaiK8vjbNgex_toxbntRptRCvLPId4na9jE.cache +1 -0
  40. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/K0ULBXnORqC1Ql2Q0uRNmvaNvWI9zauZQuPLPNQuz5k.cache +0 -0
  41. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/KtZn1cDjh4IO5yrMfFZwsiwxg__k_aiyb5NwJiksd_E.cache +1 -0
  42. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/LIMHIhpeoHv9L5A_hDtCEjSpYlC8LR4qSJHFcKGQjig.cache +1 -0
  43. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/LxM9E0kcFqi30CNAr18f8n7Osq4y6NYWOyHO9WWcOng.cache +0 -0
  44. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/MN0c3swTQcbxAJs3sC87cSevhMpbnhrVVWNJu6cSD74.cache +1 -0
  45. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/OCZ6dDerc0qnrWOuPmZZeJ9lHNOn6k_XHOwk_xtpulo.cache +1 -0
  46. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/OfZXr_MXFW1mCvRhVKjX2OmiU8MmEOh0NnYlAgZjXig.cache +2 -0
  47. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/PfST9jqI7T2aLhQh0mFbBUQTsm4sKJIgunR6K8-l0a4.cache +0 -0
  48. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/SYRC7lM6r6D5loGsreHtKfZXFe7E-NhFLnrL16_FWJ8.cache +0 -0
  49. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Swqxo5qhDoOZppFccCj26jBotbbBdwg1x6UWwYhZKFc.cache +1 -0
  50. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Ux21XkMDBGGv7wbglh1X2c0C3l6pLW7zuOZKd-LXOZY.cache +0 -0
  51. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/V1ebupQvzYW8LC0cpwlUJ21dWdB_w4wbqlIBIkRgZZ4.cache +1 -0
  52. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/VB2MBD7krr1cw8qkSK5SKdZslC_GAktAJxD-3lKpZEU.cache +2 -0
  53. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/VM2DGadeXK7Yj4d5uTkzfZjNnbz1S2gX6rz1suU9cIA.cache +1 -0
  54. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/W4ATLVPpx1a6xU3LTQ4currTJdbkxhyabJzy4AuVjhA.cache +1 -0
  55. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/WIFehNlVdxMfRf6M7sFsHwoUHMrheNo23Pp7ye1hXk4.cache +1 -0
  56. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/XctymDWMVL6Ce2pWds3T8PCnlUxt5QFuWMabXOYu1ZE.cache +2 -0
  57. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Z97C3OysztP04x2vQys7BXlI01VXl62GKZUNl13u6LA.cache +1 -0
  58. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/ZXBaU4YtMG8BvFrAv6l5YSfhnV120mIo7ExqQqn5tJI.cache +1 -0
  59. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/_1suQ69a-DbRyq-u4LF4JjPIKK75ugZX7vSryu5bccI.cache +1 -0
  60. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/b37_BT6rfKbQMvZcE1eHX6iHP3vqtFsbK5zNnZB-FJo.cache +0 -0
  61. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/euuy2x670prhsjCLtf1_9aXLLETHb5vbY8GUr0KNzF8.cache +2 -0
  62. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/ezoLwymIJfGVk-rsw0bhEPl7AYfGJC4qAvbAJypBdY8.cache +1 -0
  63. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/fNRLdVTBtYnLesllH931oXcb13LIVnn-hyR4pbLw6zw.cache +1 -0
  64. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/gcremBjPCXaN0DCCxB84bK1D_H2JZSUGxm7WjvhYGek.cache +1 -0
  65. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/hkLrrOdpF4CtA8qwHN17i0zf2Ab2WnQd7jkE1DC2Pfw.cache +2 -0
  66. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/i0IhgGtfgE_k20i6AdJ86JzCTk65ZUe4p-Yw_Cor3Ts.cache +1 -0
  67. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/jzfGi06HcVEQdOpmQDjwjAyqImONZMznf9ARRtA-jyk.cache +2 -0
  68. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/kEGxAuC0KyvZlti585RG1Umq_pVUnPO_PFxIkUyWtZg.cache +0 -0
  69. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/lgGT6oubXIO8wO5LG0CdJPYuB-M2F5o0Z-dHm-CgN5g.cache +0 -0
  70. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/nlZi5iLTrqPpnWpiuP3dToACoymc07MClayczvZ76uE.cache +1 -0
  71. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/qeFI7N38utdcGJLP3d3S5Jgib06uYYef9Eg6sGj-sZ4.cache +0 -0
  72. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/s_X24peJAlZxJs0fPg7QFXIRF5dLGZMNYYT3tyc9MdI.cache +0 -0
  73. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/spxpKr8oa8HYsZ7a_mlo6wT8nGTdgclmYVRW6LXYRV8.cache +1 -0
  74. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/w9DS6QOJyxEpJTgoz6Tsjb_DBmagHbZ8Ed6Ao16AVOs.cache +1 -0
  75. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/wQ6NxafgRwRavMvfZ8_5rKzvxlAx9Pvt_T0HJKggbpI.cache +0 -0
  76. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/wbYqUy6Ij8xISvrxW5He7EnGKjqxnyBy-3vcoaO3Ryo.cache +0 -0
  77. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/xCWT8Gex6nM1s0-zkZHxvZMcWrLvk4_WOnJEa_KQ_xU.cache +0 -0
  78. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/y7wX9WUyIrS-MGquaaWcloebTE-TNXvC1HI3H9w9plA.cache +0 -0
  79. data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/ykgk1zZxnkkLe6NqTwcXotw8DkjNiBOC5camNmp6OeQ.cache +1 -0
  80. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/-P2z1xUuYLkRlNIvmfIR06mZgnoxy2bFBL6WYlhKcH8.cache +2 -0
  81. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/0FshXIP8U4qbEc6VS04_d4Mtxd-nrHHbWHp_vSRXSws.cache +0 -0
  82. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/1VI50V2gaNK5aNC6ok1GX15pPXzdWMQ_97rtH_xN_h4.cache +1 -0
  83. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/3n-qFWhk2_8gD6fUhuVJnJs8p1EmGv3v-JAqAl_I4Yo.cache +0 -0
  84. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/HCcjDjD5vZXQX40_rKRGQ4j7ZRy-ltW_DBvWlSsOZuU.cache +0 -0
  85. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/JYPcdHZUiaiK8vjbNgex_toxbntRptRCvLPId4na9jE.cache +1 -0
  86. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/LxM9E0kcFqi30CNAr18f8n7Osq4y6NYWOyHO9WWcOng.cache +5 -2
  87. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/OIf6xewk9x6m-Adiq7bwGjZA1LEhbLWGrEQqqcJaWMw.cache +2 -0
  88. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/Oqn0B8Qi68hw2INAuhJs05oSmGGZdSsjmqJl8tZL06I.cache +1 -0
  89. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/QhM5PN8k4kNdffXzma4em5v9YfZzntr9r4h6UytU3Jc.cache +1 -0
  90. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/Ru3MpObxeTCSyhBHQ1214zaMFlYCXXMn23za7QeIZzQ.cache +0 -0
  91. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/Swqxo5qhDoOZppFccCj26jBotbbBdwg1x6UWwYhZKFc.cache +1 -0
  92. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/UQq3POExo0KCqqasG_N4wmrNd8HTzXPNX6iv0x5a7bg.cache +0 -0
  93. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/VAnBhuhgN2Y24HnNQYz8PHRsaOb4k8hiVWdzO_RTjLI.cache +2 -0
  94. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/ViWCeCX4myoX3dltcTkvyE6chbke1V5i4NKnnJPTDvo.cache +1 -0
  95. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/VvTpyA8qRAAGU9CrMl3cSPHbLoAnbiWpKfAwPrerOgs.cache +2 -0
  96. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WDMURAYzmLlRKBoNG4qhgz7dwlPmJDzKarJrkaraf10.cache +0 -0
  97. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WIGTIqJsNaF-rmpRX6vJECKKkuJfrBRebTeWdWVi6cg.cache +1 -0
  98. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WQD0d399RfQnL5DhWAR1lir2rR708B_tgbeOeDu9C58.cache +0 -0
  99. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WqlTIrcLtYBwrVT2VMlkCIE7ag2Hepvrm-CdMyoVrls.cache +0 -0
  100. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/eEUdWbeOT5epnsTdH50RZ99jMUDcyl-6JS30tGkKetg.cache +2 -0
  101. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/fLTD6SFsaDpFYdTFHXm1bbS3zjnxtTcxtTrRwVtgJMM.cache +0 -0
  102. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/g4vdxQG6z_TTKRU0WCCYOTPHAsF9_7R7Nt-ol7Aw7GU.cache +1 -0
  103. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/jzfGi06HcVEQdOpmQDjwjAyqImONZMznf9ARRtA-jyk.cache +2 -0
  104. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/mkGQS6iO46jjgCnS8J2j7mfdkAbjBW2eBEZbdL48RrA.cache +1 -0
  105. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/oScT5aRAvIS8plMsPW1BItJKtXjJqyvDWLoJYux23ys.cache +1 -0
  106. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/qVpVKlMy1h9mjiDLx1oKRq4K71fQ0ze0eN3ZF_49mOk.cache +1 -0
  107. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/sZKsH0syurJVEkjmHPv8OvTYLjUwfIe75uveSgiU1TY.cache +1 -0
  108. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/s_X24peJAlZxJs0fPg7QFXIRF5dLGZMNYYT3tyc9MdI.cache +0 -0
  109. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/tvcMrLyd7iuUPStYdrlwHUxH3MQJseDR0OM4f09RU4U.cache +2 -0
  110. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/uOl4dGgiXuGI3jQWJItfMGAe6jPuT_9Gvd-WxA8I_t8.cache +1 -0
  111. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/vKEp6_mvOHp0Y_N4Wfy8bXVPGj0PgzNicu6xWXj3GCQ.cache +2 -0
  112. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/vVA9q8Dy1oqaLu08qN0wWuecAd6Hxo4gbQcLvS-Pkg4.cache +1 -0
  113. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/w9DS6QOJyxEpJTgoz6Tsjb_DBmagHbZ8Ed6Ao16AVOs.cache +1 -0
  114. data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/xymYiOVD5pZB9Z60G34LCMLjk7o1Yplg3RJmRf4SpJ4.cache +0 -0
  115. data/spec/test_app/tmp/pids/server.pid +1 -1
  116. metadata +187 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74db1c019c0d3373022175480d10aff126ce97ca
4
- data.tar.gz: 43e00dd135750bbcfbaf92921b14e928395445c9
3
+ metadata.gz: 4ac62ce983136d23a1b1cb0e9b085a00fa0bc0b7
4
+ data.tar.gz: bf796d11169d49b3dfa1e7a7920e5ab7da44dfad
5
5
  SHA512:
6
- metadata.gz: 3e52772a2ee3f625b75abba189d0f36c1eb24dc7da3ff0a604c6abdc74474ccdefa82391bd677ef22eda34eda202a6af29c66541db4827d1e0a4fca5d708e42c
7
- data.tar.gz: 1f726bea5f2a75b3d5f87b88c1d6320669adffc8b1bf2bd832f70042165edb286768f30cdad73bc834083055952aaf7afdbd6b6a97d9bfb7d84d547586bbc203
6
+ metadata.gz: 98158bfb52593a7abc052a47d70b681cde23951a29e4a2a6b29198d8c701309f51870aa1eda824de372863746cf4bc702093f19d90a0122de1bc6ac76a401173
7
+ data.tar.gz: 89bf0c9f5767d8b26e18479b60645c76b22f0c30a4a6a0c8c47271766766beb6e33dc0f364721f34195cb0e27840da8abc85110102dddd1aee80f795d67ec9ef
@@ -1,4 +1,7 @@
1
1
  var SubdivisionSelect = (function() {
2
+ SubdivisionSelect.subdivisionSelector = "select[data-subdivision-selector]";
3
+ SubdivisionSelect.countrySelector = "select[id$=country]";
4
+
2
5
  function SubdivisionSelect(element) {
3
6
  this._countrySelect = element;
4
7
  this._subdivisionSelect = $(element).
@@ -6,9 +9,6 @@ var SubdivisionSelect = (function() {
6
9
  find(SubdivisionSelect.subdivisionSelector);
7
10
  };
8
11
 
9
- SubdivisionSelect.subdivisionSelector = "select.subdivision-selector";
10
- SubdivisionSelect.countrySelector = "select[id$=country]";
11
-
12
12
  SubdivisionSelect.init = function () {
13
13
  var klass = this;
14
14
 
@@ -19,6 +19,7 @@ var SubdivisionSelect = (function() {
19
19
 
20
20
  SubdivisionSelect.prototype.init = function() {
21
21
  var self = this;
22
+ self._enabledInputsBeforeSubmit();
22
23
 
23
24
  $(this._countrySelect).change(function() {
24
25
  $.ajax( {
@@ -48,6 +49,14 @@ var SubdivisionSelect = (function() {
48
49
  }
49
50
  };
50
51
 
52
+ // Disabling selects means they won't POST with the form.
53
+ // Solution: right before submiting a form, enabled them.
54
+ SubdivisionSelect.prototype._enabledInputsBeforeSubmit = function() {
55
+ $('form').bind('submit', function() {
56
+ $(this).find('select').removeAttr('disabled');
57
+ });
58
+ };
59
+
51
60
  // Not only empty the select, but:
52
61
  // if the first element is blank, add a blank element before all others
53
62
  SubdivisionSelect.prototype._clearSubdivisionSelect = function() {
@@ -1,5 +1,3 @@
1
- require "subdivision_select/subdivision_select_helper"
2
-
3
1
  module SubdivisionSelect
4
2
  class Engine < ::Rails::Engine
5
3
  isolate_namespace SubdivisionSelect
@@ -7,42 +7,49 @@ module ActionView
7
7
  html_options = options
8
8
  options = country_or_options
9
9
  else
10
- country = country_or_options
10
+ options[:country] = country_or_options
11
11
  end
12
12
 
13
- options.merge!({ object: @object })
13
+ # I think this is taken care of in the merge below?
14
+ #options.merge!({ object: @object })
14
15
 
15
- # Add class (that JS uses)
16
- if html_options["class"].present?
17
- html_options["class"] += " subdivision-selector"
18
- else
19
- html_options["class"] = "subdivision-selector"
20
- end
21
-
22
- subdivision_select_hidden_field(method).render + Tags::Select.new(
16
+ @template.subdivision_select_tag(
23
17
  @object_name,
24
18
  method,
25
- @template,
26
- SubdivisionSelect::SubdivisionsHelper::get_subdivisions_for_select(country),
19
+ objectify_options(options),
20
+ @default_options.merge(html_options)
21
+ )
22
+ end
23
+ end
24
+
25
+ module FormOptionsHelper
26
+ def subdivision_select_tag(object, method, options = {}, html_options = {})
27
+ Tags::SubdivisionSelect.new(
28
+ object,
29
+ method,
30
+ self,
27
31
  options,
28
32
  html_options
29
33
  ).render
30
34
  end
35
+ end
31
36
 
32
- private
37
+ module Tags
38
+ # TODO: can we inherit from Select?
39
+ class SubdivisionSelect < Base
40
+ include ::SubdivisionSelect::TagHelper
33
41
 
34
- # We want to add a hidden field, so that when this select is disabled
35
- # (which happens when a country have no subdivisions), we still POST this
36
- # value, as blank. Otherwise we'd keep the old value.
37
- # NOTE: it has to come *before* the actual select, so that its value
38
- # can be overridden by the select
39
- def subdivision_select_hidden_field(method)
40
- Tags::HiddenField.new(
41
- @object_name,
42
- method,
43
- @template,
44
- value: ""
45
- )
42
+ def initialize(object_name, method_name, template_object, options, html_options)
43
+ @html_options = html_options
44
+ # Add data attribue, for selecting via JS
45
+ @html_options["data-subdivision-selector"] = "1"
46
+
47
+ super(object_name, method_name, template_object, options)
48
+ end
49
+
50
+ def render
51
+ select_content_tag(subdivision_option_tags, @options, @html_options)
52
+ end
46
53
  end
47
54
  end
48
55
  end
@@ -0,0 +1,23 @@
1
+ module SubdivisionSelect
2
+ #class CountryNotFoundError < StandardError;end
3
+ module TagHelper
4
+ def subdivision_option_tags
5
+ option_tags_options = {
6
+ selected: @options.fetch(:selected) { value(@object) },
7
+ disabled: @options[:disabled]
8
+ }
9
+
10
+ # Actual loading of subdivisions is in a View helper, since the controller
11
+ # needs to use it, to render the subdivisions of a country in JSON
12
+ subdivisions = SubdivisionsHelper::get_subdivisions_for_select(country)
13
+ options_for_select(subdivisions, option_tags_options)
14
+ end
15
+
16
+ private
17
+
18
+ def country
19
+ @options[:country]
20
+ end
21
+ end
22
+ end
23
+
@@ -1,3 +1,3 @@
1
1
  module SubdivisionSelect
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,3 +1,5 @@
1
+ require "subdivision_select/tag_helper"
2
+ require "subdivision_select/subdivision_select_helper"
1
3
  require "subdivision_select/engine"
2
4
 
3
5
  module SubdivisionSelect
@@ -6,6 +6,10 @@ class AddressesDemoController < ApplicationController
6
6
  @addresses = Address.all
7
7
  end
8
8
 
9
+ def tags
10
+ @addresses = Address.all
11
+ end
12
+
9
13
  def update
10
14
  @address = Address.find(params[:id])
11
15
 
@@ -1,26 +0,0 @@
1
- <%=
2
- form_for(
3
- address,
4
- url: update_address_path(address.id),
5
- html: {class: address.title.parameterize}
6
- ) do |f| %>
7
-
8
- <div class="field">
9
- <%= f.label(:title) %><br />
10
- <%= f.text_field(:title) %>
11
- </div>
12
-
13
- <div class="field">
14
- <%= f.label(:country) %><br />
15
- <%= f.country_select(:country, include_blank: true) %>
16
- </div>
17
-
18
- <div class="field">
19
- <%= f.label(:subdivision, "State / Province") %><br />
20
- <%= f.subdivision_select(:subdivision, address.country, include_blank: true ) %>
21
- </div>
22
-
23
- <div class="field">
24
- <%= f.submit %>
25
- </div>
26
- <% end %>
@@ -1,12 +1,30 @@
1
- <h1>Addresses Demo</h1>
1
+ <h1>Demo</h1>
2
2
 
3
3
  <% @addresses.each do |address| %>
4
4
  <%=
5
- render(
6
- partial: "form",
7
- locals: {
8
- address: address,
9
- }
10
- )
11
- %>
5
+ form_for(
6
+ address,
7
+ url: update_address_path(address.id),
8
+ html: {class: address.title.parameterize}
9
+ ) do |f| %>
10
+
11
+ <div class="field">
12
+ <%= f.label(:title) %><br />
13
+ <%= f.text_field(:title) %>
14
+ </div>
15
+
16
+ <div class="field">
17
+ <%= f.label(:country) %><br />
18
+ <%= f.country_select(:country, include_blank: true) %>
19
+ </div>
20
+
21
+ <div class="field">
22
+ <%= f.label(:subdivision, "State / Province") %><br />
23
+ <%= f.subdivision_select(:subdivision, address.country, include_blank: true ) %>
24
+ </div>
25
+
26
+ <div class="field">
27
+ <%= f.submit %>
28
+ </div>
29
+ <% end %>
12
30
  <% end %>
@@ -0,0 +1,39 @@
1
+ <h1>Demo, using tag helpers</h1>
2
+
3
+ <% @addresses.each do |address| %>
4
+ <%= form_tag(update_address_path(address), method: :patch) do %>
5
+ <div class="field">
6
+ <%= label_tag(:title) %><br />
7
+ <%= text_field_tag("address[title]", address.title) %>
8
+ </div>
9
+
10
+ <div class="field">
11
+ <%= label_tag("address[country]", "Country") %><br />
12
+ <%=
13
+ country_select(
14
+ :address,
15
+ :country,
16
+ selected: address.country,
17
+ include_blank: true
18
+ )
19
+ %>
20
+ </div>
21
+
22
+ <div class="field">
23
+ <%= label_tag("address[subdivision]", "State / Province") %><br />
24
+ <%=
25
+ subdivision_select_tag(
26
+ :address,
27
+ :subdivision,
28
+ country: address.country,
29
+ selected: address.subdivision,
30
+ include_blank: true
31
+ )
32
+ %>
33
+ </div>
34
+
35
+ <div class="field">
36
+ <%= submit_tag("Update Address") %>
37
+ </div>
38
+ <% end %>
39
+ <% end %>
@@ -2,6 +2,7 @@ Rails.application.routes.draw do
2
2
  patch ":id", to: "addresses_demo#update", as: "update_address"
3
3
 
4
4
  root "addresses_demo#index"
5
+ get "tags" => "addresses_demo#tags"
5
6
 
6
7
  mount SubdivisionSelect::Engine => "/subdivisions"
7
8
  end
Binary file
@@ -1,3 +1,5 @@
1
+ Address.destroy_all
2
+
1
3
  Address.create!(
2
4
  title: "Empty"
3
5
  )
Binary file