subdivision_select 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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