ice_cube-select 4.0.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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +21 -0
- data/README.md +134 -0
- data/Rakefile +29 -0
- data/app/assets/javascripts/ice_cube_select/fr.js +29 -0
- data/app/assets/javascripts/ice_cube_select.js +182 -0
- data/app/assets/javascripts/ice_cube_select_dialog.js +605 -0
- data/app/assets/stylesheets/ice_cube_select.css +297 -0
- data/config/locales/en.yml +8 -0
- data/config/locales/fr.yml +8 -0
- data/config/locales/nl.yml +8 -0
- data/gemfiles/Gemfile.rails-8.0 +10 -0
- data/lib/helpers/ice_cube_select_helper.rb +119 -0
- data/lib/ice_cube/select.rb +1 -0
- data/lib/ice_cube_select/engine.rb +18 -0
- data/lib/ice_cube_select/version.rb +3 -0
- data/lib/ice_cube_select.rb +86 -0
- data/lib/middleware/ice_cube_select_middleware.rb +25 -0
- data/spec/dummy/Gemfile +4 -0
- data/spec/dummy/Gemfile.lock +336 -0
- data/spec/dummy/Rakefile +8 -0
- data/spec/dummy/app/assets/stylesheets/application.css +2 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/samples_controller.rb +10 -0
- data/spec/dummy/app/models/sample.rb +19 -0
- data/spec/dummy/app/views/layouts/application.html.erb +16 -0
- data/spec/dummy/app/views/samples/create.html.erb +4 -0
- data/spec/dummy/app/views/samples/index.html.erb +49 -0
- data/spec/dummy/bin/importmap +4 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +25 -0
- data/spec/dummy/config/application.rb +35 -0
- data/spec/dummy/config/boot.rb +3 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +56 -0
- data/spec/dummy/config/environments/production.rb +76 -0
- data/spec/dummy/config/environments/test.rb +50 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/assets.rb +12 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +8 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/new_framework_defaults_6_1.rb +67 -0
- data/spec/dummy/config/initializers/new_framework_defaults_7_0.rb +117 -0
- data/spec/dummy/config/initializers/permissions_policy.rb +11 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config/storage.yml +34 -0
- data/spec/dummy/config.ru +6 -0
- data/spec/dummy/lib/tasks/remove_schema_dump.rake +14 -0
- data/spec/dummy/log/development.log +2853 -0
- data/spec/dummy/log/test.log +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/--/--rAmByKtm0MnL8xXXDD62V7GaMXJB41PGYpkcDVC7g.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/-H/-HoxUZp14yWxlPRfwr8zr4NnyUAIoxc4A0TWoizdCtw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/-c/-coqzCZSM-0wxDotkoWOlQabhKGWhh143WHFMK53TJ4.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/-k/-kCOhoKk1Fu5xtBHgA3f5bR_3UEtRYtRBBbAxnuEAqY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/00/00X-Dx7XvMmD59y9DbmBX8n8amyi0DnxvZpseW_zuU0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/19/19AOV6CKatQZK21h_rXMCzB8_zuX8qWwmt56qmrt2G4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/1A/1AnErSaPi9_LX0qwRXmRu1_ROnFaxM4IecBFefnVDXU.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/1i/1iJJTKhmNHZa0O0LpBXVUHwKscaTeHLe2X3YgaHUpMM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/1k/1kliLj9Kd2jSY2EcJYkYfeKaIU7IsdHlYIwXltjJpXw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/20/20ImWtZR2kdu2W4HagE2cY3iLxhjbrqzjDViGjSj4pU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/2E/2EX7iEADWBlei6Q6wKSyJq90KETrVghg8_2ZdQiTkl8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/2E/2ExNzABSQbawrVV5L4YfULcZAabuF8fdKAxWlcmiZ9s.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/2V/2Vej7W4Hs74U5sJ3y19ucsMyXkkqFMBU1jlZBcS8ox8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/2b/2bBqXSgVWORK7ud3Xzpx8-wKHCMMMqt4Z_9jNpkpn_I.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/3I/3IakavgfROEtBiPDnjvxFJPpufCARsM9OFp6Avo4Qpw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/3P/3PnmW10YkIfjRCDVHUBti81IRf1zu48H6OXfGGidetE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/3j/3jrvubzDyeSYbZ5LpobP0QlL6YtKaIr9pxJAWPvz0QY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/4Z/4ZYjL6BwG-4luPzGbr5tM-bfWDitfi9MIXmYPxSaFbY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/5-/5-NZ31xdNVQOUzgVAe25YKeWdAlXNDAm3bCyyA0bEB8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/5h/5h0LRd6jysM1bODkNUguQPIiPq_yyyshQWiX2bQo7Dw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/5h/5ho4h5pFPW9LbRUoDaOHiJpRM9WoE9r4BiB4x2IpHik.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/5r/5rpbtDytrYjudaQCIwG-YYVYMWTVr0IzfRa62Zz5q7E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/6U/6UnV4bmBnVj9Q2MYBMvN_z9580jGYixHRf-uE14rmBM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/6z/6zghnUiyy2JIObJo2QdSyyeW1dNl8S7A_WKUQZiU71I.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/7A/7AuGblG3kfw0biDvVJd7h14-GPrSks5Tm_jtJFxLpJU.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/7C/7CMRdPP_5RHFOYd0UA0sUc54XQKmdHMVxSF4wICezOI.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/7G/7GNYo-ooWC0NdNXqwCstEi3K9A4r_2ZnGMB7x9OOA7s.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/7X/7XlOmVF_-kN_KeAPnDH8KYCUjoh-wME9C1KzIQQp738.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/8C/8CFoKvJc86Aidx4dFmaWlJjvO4w1BTNvUu9EJR_b2MY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/8L/8LcN0hnf9LwU5wTh-cUTI0axF_C3ve1-bHmFA-OS6bc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/8n/8nK17HLAxXcrKXTRPbDh4yo_wsUAbkJeALf3_zNMGNM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/8o/8o4S7UljhNV2Z2GyNvih1qSrliFB4oY9txiIP1gPxiE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/9V/9VpuJd_MaYUudt4ZqhxZIAynaw48Q-ENsH4jpizolu0.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/9m/9mDRpW3sa10mOv8Hborg_OnKaMwoxyKgDQtiJFEbdew.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/AF/AFMZ8jQk8PF9S0Dya8-Sx0oY3BEgLJEYwiMrsUj3SUs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ad/AdzUPsYCUeyeJM9QDOc55BMiVfPKTj9RjTNptv2fthY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/B4/B47HHTG0X0oHVtPd8O7l1-WogI9CwR_onS5udO4u02U.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/BF/BFgv1Q06JYYiWDGgzV1wEFsiARisuKLyyMQ79aM0vww.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/BK/BKnI-D57Lom3NkMA5Gg0eL975J5GtpwQznyKm62_Ig8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/BX/BXpqYQikJhkDIeSunYQM4AOxzeFHhzBGL1HjMQGuOyg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/By/ByNoD5nl2lLfZdy0StFKfI04h0n2GvebYawt7Pzfx2k.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/C2/C2UCua3N7rS37BDP6CuHQh4N-0EsipLtm4gS0jOTWTs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Cx/Cxg1MzLUOTufOyyAraZ5-lhDoTmJZ0_UR2wP1CAATmQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Cx/cXR4PS7r0QhE65tK8kBbSHubGuVGlZnhwnChH4Q5O8M.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/DO/DOm8UJqQNZ2WSyt9UJXgao467OHzmWMY1WNK6BO8-Cw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/DR/DRmS0YNZkpmdjtGqNaJI5CVUFLzZvp8tMq0M-VlEPns.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Dp/Dp0tuYIHrdk_SzxNULPVoCwUSXCoo0duQz_gP2yCsKU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/E5/E5bSQ0e6WGQAXIGED37jE9854jXP0izuMW-qOBnOJ5w.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/E9/E975xsqzWYLl1fla_STjHkB3_kIcjxWyjYDAAKe39GY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/EN/EN0Ln6CmfYd_aS0QfjeXAF6YnR6KviZkiiujMQny4R8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ER/ERk6Yzv-Nk3zf2DwC31Byh7Hch4uK_2qhJdfKmyUoCw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Eg/EgkR6bN9owtB1hLTwWmUQR8phmhoT3lbqWRQ0n9-4xY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/F0/F0IzP-ooVgPlRLqw1nTZPbFT93fmWvNLsNW0HSicwiE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/F0/F0YaMcusCPsKvUsl6Qrv4E8sHLUOOO85lIKCu6JAxvM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/F6/F6ywfHEq5RIh4l5Csa6TG4WGDaUyiNiVMsE9OMiXvqc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/FG/FG52-VtsSB6Uk5pQzX9Fc0IaUHUZdY6-43F1-6j8zuQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/FH/FHT4wSpWbcJV2vmEmtdO1QVHHOfyXnwvJTaCYZNZGX8.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/FS/FSkqX8HmkLi0NUTvRqOGdFQc0h5x-NffdpVY5QMyZ3E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ga/GacyHXwq3SMNZA8i9qCG5VnHQK1ohFOL5PvEceVJVXM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Gg/GgYS5qpRC5JBC7lT5WQg1sugrKqeOGWjL1_EJqeQdBE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/H5/H5aYXwLLA6hunjp2ZD3-WV5VecvRIcDfEwGfnHtnKlI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/HF/HFoCxeVSBDPGavW78cZ4NRuV6_DcHcGO15vtyFQpsIc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/HF/HfwMtjCwm3esZHcIUOxsATdY8YDIwBj0TpCJcZdSRbo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/HM/HMVilv2P7QkEfX_XqjY6Vi-HhikAQzAtJ5pOOKBXZ8A.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/HP/HPFKy86tI3wqp2v0mLD6sxo7d6OU1Mm3A3HqJZKEEHY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/HW/HW5J4Rr-E5FGCR8_kiIq5eWeeu85iHXycfljRUuGaHE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/HY/HYntTQo8ujQN_iPUCmrZxow3mCeKQiZ9svGhshJMf18.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Hv/Hv-sCE5Em5YVBiHFWgptmpGjXv-8PXUUVKml2B4r7jk.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Hv/HvkyKaQDcuqTxW2OjKH3mgojlqBTUytx5EBEquRtTCU.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/II/IIIk7k5PJTIB8s9xvs5yADHh_R-GjTInWvZyExXMQrg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ih/Ihnlkw3Tfk01su33Dluw8kB_to7SP71G2tmEuj1ewGs.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ij/IjD5hEBpHPVLqpBvBOq5xoL7_OLi_jyidEQeDZkH51A.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Is/IsKkAZpcet0IgYLP9ot1iuwmrVxgpNCahS2eQICEgpw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/JB/JBnoQUvpupRs9ABR-ZC0om41bMO7Ew_7-n9xKqhfPK8.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Jo/Jo4kA4keuGt7HEgEHyTmsHD6EeZRghqoq-c7mxDFs_k.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Jw/Jw99Bfcj2I-8QDAVxuxejfPqQvJMpXI9QhcmTA_fpN8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Jx/JxZK86jYw-hmXkkt4XFinkCXLM76albIzT4YcKNsslg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/K-/K-gLlOoAf1VoJsDSh7EysiST1K12nABer0Bktfo4ILg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ki/KiP5gu20LeRLp87vzBsu9YZgmM9RDblIVi5h5bSph2I.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/LQ/LQJfG2MNHnyXOvsz28VGUCv80Ct7nj8HM_i-cKqjSFg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ls/LsChyuxgjfk5l-ho4B-e93iZ6mHSK3IjvhmZfHFXUTI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Mn/Mn_GXGiBEOM4BXHo8WoOo5rTCTfKcksaW64banP-7P0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/N7/N7uGCIOmTFR3e5s880xHaOuAwgx8BXXXvUgawWXyvEY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/N9/N9I9AndWoHI25CuWHQUs3o7tMw3lFwKckkjnbwlOtQk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/NT/NTNTUrI37iM00TCO7PJY6za3IyZlQvujQQYqHwrxXYE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ng/NGh28TnI8MI4EX0k9Xg5dDKAjE4FJB08_WByjLoCDU4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ng/Ngz36YYa3DqZ1hpWDd25R8i2y7XW6t5SzDsuhn0EVbQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/OX/OXjxHnKgHLaEpsF_RwpLYLqo5-hdvkGh6oUY6iLnsXY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/O_/O_JDKIlx6_eN5BPCYmp6D7GkCiNHgwxl31cnRpzo9j0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Oh/OhsTmQH5UXh9lL-r3a5eN9zhBeb3myfNhDKodW0dre4.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ou/Our8Abkp4wOx_HnV5wwAdB73DEHm9JMVBPH_oOGDz7I.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/P-/P-cEaKuaX89WINQhpcO1HiOZGqDbnYma0EhsyA02_HA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/P8/P8Mf8CDRiKWckVgwrRzsf7iOqv_YTb2NSB1mk9PGXjM.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Pd/Pd9js4FS4IkizfaoEwofmx-u1BuH07fHfo4jRO1s3uo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Po/Po6QNSUVcwV0hIj5S12kQhKKRUT-Av0D7vv8ZEezzBk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Pz/PzpWq0LzzmiGetCVYTJP2fESglsAjH79oS_N_FmcpEA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/QQ/QQjZEwyt47hcGLBQnd4bxK1RnL6388wlWt_-qRL9QxI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Qx/Qx4wefCS41Nynaeh70sR1oQflaxhIqgqI57YIiZVvhc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/RE/REM7Qt1meU-tf1Wwzx9m2Ex8FSNL4Ac4Hh5dUjCpohQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Rb/Rbofto9PCO3Xqo5Kb2bfKxidbBqCea8OvPV7fgZhYqc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Rh/RhELObEP6WOgvZRsFG_UOLejgNpEi80uIgg2frnOVGM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Rk/RkuFQbKDq4yK0RuxrAAyktPGjclHBNC2rQ8MxWqxhc4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/S1/S11sGtH5-7UHEft-KOEyzTjynx4QxVUCkXYLa6bTvSQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/SA/SAePtLkGMoh0xPlyx3KSVOmY2S2WceTxhNmVPM4Avwk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/SJ/SJ37zvjYsOc0W_N121qfBac5Ave5tUIijbKa8ih1JJE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Sn/SnoRRhUoQdDi9EbxvaevgfLauCLgLVsheiKsR54Kjfw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Sw/SwyIlWe4mW-S1D1KV1lW2qTNWZwF_-APRUsJvXma0hA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Sx/SxMkFQvQYrgxva3so2GOBrxfDH9NvdeDTZeAIKuhsBs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/TA/TAJETM9mHztCEnd1ZOWzkHeeOUm-LVcyWpzaI3OklUo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Tk/Tk3p5H6iRTsufo_OZhbd96jjvk1iIijfJn67gtl8_Rs.cache +4 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Tp/TpEhz31Vry4blOsb19xfTmLTrv7z2lOfuzTdE3GAf08.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Tw/TwXQz2y7XuFI6moY1b7OAfRj0yvQgh8FHWLelbIkpqQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/U2/U2uaXPqVIKdXq3WhD4ve0eNnFPR1mLkVw6YRBMpbJMw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Un/Un1S7oFpRfo8iXfpTHfmLfKpuowlu3a7xmoRX9o8o1o.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Uv/UvzZcA7VsfUnNXg1faVWZBBwvpDuMwkhFsp8Yty8c5k.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/VO/VO0NU-0YjMWB518kDQvBAN_TB-f163jCha33D9HXoGI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/W8/W80hQWjpEvHcvAv8NK2J7OVaGOqetk_9zImXzOL3kKA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/WQ/WQlY1gKet7rqxIa0Tmm-pXMzm9uQKfTC_iN6y0UErQs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/XF/XFQ1cyb4geU4-m45TZ6f8O1-6F72xmBPM6L7RAgpmNk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/XG/XGKSlgoUO-Ao6SLWO0LBovvDllZF_qlYf6CMxVVP0UA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/XT/XTT3QmjQsOlMF_dFPgMD4V68iD-HDiZZUnKLMjhCHHI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Xa/Xa5vmj80u39cbSYwvFp8MP0ZjZPxbhoBXbwtDSwrTj4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Xj/XjGC7OdhT2-8iU6mpw1aRSXg5-HUu6lrpAxqK1kPYN8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Xl/XlwIbBHvQN1mPdaybMu74nsakLjjptziEiHWZLXrKro.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Xl/xlpNYJ-I5t3H-Q-ktfTeNktZKv6lfTzk3C1g6p7FHWs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Xv/Xvs5FwiU3ADexvO0PM5dqsaii2mju3EmTsiTQs1rhGI.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Xy/Xy_jRQku90hZK8aOJcggEBPFu_2USlHMFYhAAeCVjyo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Y-/Y-56loF4CG0OZHkkSpbGpqs-JQXKnU5qxpUfMu94_dQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Y4/Y4j86RBxOwUicCjzQOzXGy0qIoq5T-vUA6grPaX7-vA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/YO/YOYHgN_CYZvhn7Bx4JjkkFvHaBGRtjEmdO8dGzpJeo0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/YO/YOgxpoMg5VdlPVutuEBQEYvtxgnWIrDYp2Kd_m_2QCA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/YO/Yo4PIprn8GN72L-Uf7l9Llo1pi--fmh2Pw20qFFYrSM.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/YY/YYlQ5LzpBHieP1jNUAFLRW78t99PoS6PQZoHLzvAmqQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Yj/YjHZbRQ4e3rroImtj_1EGCKGdU4d24gCi5kjgJKT0Eo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Z3/Z38TZfN9y2TJJrdYAogo8EKs28avVKmbyCxwshjm8S4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Zc/ZcGWNhggUU9-hpR3Rp6n3lGdLffDUk1-ZHkdrgsI4Fs.cache +8 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Zm/ZmAvNaLlj36Yl3dRtL5jXgQb1ROtK6FDQ8UIJvDf-50.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Zm/zMfeZQV1ZaglFuhJlqfoH5nBqycWIGi4TtdOsBXhiQE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Zo/Zo-5NBFdii8PLufO6jPHfksOVBbZgxXwyiIBnX6-arI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_S/_SDIVNAeJ2JgDNkkZbV-DbL7PF6UxhpIdNmGPIqepj8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_T/_TuZsxsNu8oWeosPWrwp5FFjJMdw3-bR14LuI45gyfI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_e/_eLlScoirmskBHgaco2SBQSRSvidoT0JqA7lwM6z5vo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_f/_fJObZyqnMEnxYaRROG2kradIRxhFG-d9emrXIrFU2E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_m/_mVz9daeaggkYCgqZHOUq2rXXwnDVVSgG7TxxuRhl3o.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/a3/a3Wlw8mfSHL3Dkg2rPHq8sfIB5_CWrja7maNwTSlHeY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/aN/aNnagxTBHQBX-Uk5eD3Zs8HVPb39rRYKAWRusog5ZGQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ae/aedjSmdfbe95obaMai-ieIh6a_3N91TgaJYjTo7tIZs.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/bB/BBePVrVgXjj33MChLDgH52MwyAavBoJw5dl8m-xbnbU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/bB/bBrzjV__VsMBy7B9FWdu9no2bbDQ3acRrIW2SOfshL0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/bL/bLXE5zW1q67OPev2YvwAbhGVJ_SbApqE_Ls58OvrNu4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/bN/bNYxhHdkUUL8Y1nuz9_-kyZ_UN6VLeoCzNMW1EVTXXY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/c-/c-fmu-AJTAuWWqRYRITv4TvxepuQd5pl9zoW655uOss.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/c0/c02CYJm8uXV42AjNiiheDJGwvAktcPQpSHOfMdT2O6Y.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/c3/c36-ILADjdI0hK-vAafc2slgc5IG0s2L1_iUhB7Nt5k.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ca/caudjI4goS55DlSgnZ85x9H_OPROOa_IzcOte5i94Lw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/d8/d8UVHo14387ggWM-ihl2hnCGjrdD7kD1EWmtKoJFhZs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dE/dE-UXNWFaPVOroV1gDYLPr11Aac3uIEV1U2_0DlBChY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dG/dGQHIXD6OxFuKLBgfZng3jhaLt4E2mL4rXbIKIgi-1o.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dj/DjDdFr4eUKFW1ELhsrqjNn-1fgWUHaiDP9K8fEzRSTo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dj/dj4jKx8uxTq7bhT8X-o5YE4-MenFUARsxg9p9-aBGn4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/eZ/eZeS8IM2kEkG8Di1hc78lPtrcKgCxBoJF3m93SwSl2o.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/eq/eqSiLs66O8JL_zsULRFTvv4UHaCKJfKGXT9SE-ENGTo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ex/exxTGIdEZtv28XRzt5nkLHq-q3ax6zwXM5TYwcLem4Q.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/f3/f3Vhu9wCLqostdP0O1KvT8rrQICvCHlWDOVcqoLaQaA.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/f5/f5I8b7-97jbOTGMz6kOh125uhlC71AwPFmfx9An_Yfs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/fJ/fJL-23z_wILBwjstvUogxa7XE2gV8euVbemL1A3bN0A.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/fW/fWu_Jbmw7pCUuw6NM9FHK6dHakwoZlgl1WrLDPjI1Xc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/f_/f_92yxHv4NT467Qe_368dBwfsNG0JjOW6ZGNNSN7B-4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/fk/fkGFDnQy3ZoizGrxvBeicNKt4gKZq1tbCY98d9J3bu8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/fn/fnsUMJ-l4Qq0Mgz90Uwq5iQcO0Jz6FM2aphVdoaj6PQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/fp/fpp4a0aLsdj0GWG6PDEb00tmkbs2HAV_wcCcnFKkdFQ.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/g1/g1FOHMzVGFlom-5VB0PL5bMu4w2PcyC0dN6H8iOFTaw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gp/gpk1qbxhyFLe1Ti05iOTnBDoV47K_XwltWsrci25r6E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gx/gxNDUXeSuAAy-u4tltwoYq4NyMqaNFtuB5ekyLW5CZg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/hB/hBuH2UD-FyOB6d5tntOeamH_P2DhL5fnZooR9eSxS0U.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/hC/HCSca_wtgnbQcyCOUzEgY1HA1AiGPSo5O_UlH2OHxVo.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/hC/hCZpc9fQarc_-WwXwQlBGJdfyf8K0j0oCsD5wwJ87fQ.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/hH/hH-9z4LbnPE5PvD_Ulfl2n7KLJ2t85eBdm939oK99jg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/hj/hjt930_FBM8T4TSqao690Ut9wpyBcyovx50LwBnwfCI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/iM/iMnsKhKBVL5ZlU312QbDxKAQxdbWixigrdtm6nkNIpM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ie/ie01ktpzESjQATjWLtmJrU_SqYGTPbXTfk_p1sIkyLE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ik/ik91oPGrzPQ28WVZeMtO9eXMoAn6dIewX4mtG6oE3wk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/jD/jDbBgIr3eqwHN2tbK6dfEbBh153VcG8w2gIc00cvUSI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/jL/jLgFs9r0he0nwxve_QPSGsMCwD8DN0p2dutPcBEdudk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/jR/jRfx5gPnRK0E-bKji2jhWfatCZTkGQLNuAh6tGzN7Xk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/js/jS7F-4ji84iKnL6VccBetACQZ09FDa-jFeJcpbWKZp8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/js/jsLM__rizw2y6oZgK1J92rDoGld6ksh8IC4bZik5StQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/jt/jtsPqVuhIBCkiezypSQiA91Gu9cHxJ9HYIJgyOFzWpI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/jz/jzgPDHzDiORAkY9cdIk7iD6aeeMlQFSiK1EZMb5LArk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/k2/k2DnReFaxm2COfOVCliXIWmrQW6SFKrEzK0C4UVmMfw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/kT/kT5GPb8H30zL28XXLxEpjiOHbvkDuIXPWGblRef1BQA.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/kX/kXQi4LdsbeCcGgz0DItW3yQ_CNJBjgRr0_-rUgRAX5Y.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/kX/kxCCxS0DA1OuBKQZiE2l0OaLlibk52cfWdP8-W62Uew.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/l0/l0bpxrry7l99VYb6OSfDAuRHD8b3vScsEM2rKwWbzbg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/lE/lEn5gC3LZEbwhSVk6N-pbWaJ-B8-V9Ni94RB0NOcF7s.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/lG/lG3iHoJOI6LEroFQ0eatdHaC4LMdejPH2WCGx-hj0IM.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/lH/lHgP5ecRDTRlmWXvJkjL7hXApyVNu9okZwu0qUPVWLY.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/lM/LmI4-RSp3IzgufIh-m8oOgwQDjOVD3_Pg6uiSwi-ZMA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/lM/lMK2-DaB5fyKC0Mx4GC4vZmeh-2U7o19t0u3lf49BJM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/lZ/lZbVP0P4nhiaXsNfwakCwfnn7S1KRJFvuTmvNd-hT5Q.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/la/laz6UauLx5eH2uAX2-MoTe8LI_w9k3Pc2s0av5zP5Os.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/mB/mBIInGzzmZtHE9f_MonfEGNoMq6Rt6w7hFaGzK7CY3U.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/mM/mMNvregKyLKC7sUeixSvPy9QJVIhpQuF9HUHIFA8v5I.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/mQ/mQrMRifZ6T4NVAvNTigREMDQ2lIs2tBdk_HPBeh5c0E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/mi/miMTncRS_QRcUmEjrMCCLHvqpyP3Y3tevYqbGeHNCwY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/nP/nP_6hZekGfWlK1BxG3Jpesn0Wg-PlXPQvx4q-oSaUnc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/nc/ncvbMM5nXJrd6F1pzx0GyKcFlJsMrhApX7mIGd-Y_C0.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/oA/oAnMt8rD2Y8KoKS-OlshH3pRIvvjCflKb2WCHTbT2NQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/oJ/oJupiasx8q1af4x7mHMbTup1gJqv5z7OoQJ4L9Ss4KY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/oJ/ojRlXNPfTajXI8xb3VK2gQI6y7uLUEYOp_JmuI98Nsk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/oY/oYXCW9fFRCuaXxAA0yRPTDT-kwODWS_XFZKsTnOZVww.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/od/od4Hn-hIPfcKzoWdAX0i_U9Uvfhbz0pGLNeu-Yy6BeY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/pX/PxyzWwsLWJGP5H1hmuPZH1ecFGSer_3lgnMoR8DL1_0.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/pX/pXatIzIMlyuYQ5ocuRvGOdW5SUer7V9bmUchsJSTmOw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/pa/panfaQzZeA3AGdf_J9-Bt-ojz0Ag0wZLM7zWyFxcN-8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/pn/pnkosyuIYxWPtFEhs3pZwDW14neSEZ8dpDZenAQEWCU.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/qF/qFeHFyL9X1q52qcX5G3kWdyfIvGSAxa94G5-X3zKJUw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/r4/r4RLCA2JH9MDKvTuYkWxANEAgkBtBkzL1xfLYb2bdWY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/s7/s7WY0ri3ThG-7kmTez9gaezuyzIHtDnCQsyyyVaAI1Y.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/sH/sHwc0BgUVQF-beOHCqO1HfAgQLZZvrDCgqRhlcqkAIY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/sY/sYHbJlpT7n7snUMZPsqzsD7SVxtO_TSyQ2ozNXpzvlE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/t-/t-RQAyny112Yh75r-KP8uJpuzS5EaSUCOkxaII8hCdQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/t6/t6f70gfkYYgqo61jqkAEsqjVugK7FNe4uaMLVutlfdo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/tE/tEwbQxrUFzGwUKGtwW2YwXMdEewqp5mexvCrPp3AyMg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/tx/txGVXlv6uBNHc06d-ej1FrGSSQSzLXTMmuw5M1QkPTM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/uA/uA1tfNsvpEfJssTEQgl1EAfSoug4zHSuBBFeG70UPvU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ue/ueCpC7IbEUV9n26Ai5S0JkBvrThWhC-QECDjXZ52I30.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/us/us3xxjCK4Ovczw49X1Mosyyo_fXkNcPZB5ZthtYOBj4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/vE/vEqA11YY0Pn0C0Ims0FY0t4THzZHwAODRT46yLLRQEA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/wM/wMledL4ttQiAHUdjtbGPhPWrFsJcADMCeqYeQLQVQ50.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/wf/wf4nZLiUKwZPi5bAkP8uOMlsezO8FvmeJQlvNcFnUSc.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/wt/wtsfbgVHG5HnQeSccq2bvve7RsTjfx33hOx_4lcEau4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/xE/xEKXI_k6To35TyFYx7_CHpLXMBN9u1yvL7XbBGSCMzo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/xW/xWTKryjn-5sOpmPF4zrGDd-ThrSCEQuLXAShhkbIFFY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/xZ/xZ1IbV-YWC-jHrkzCffY4GvD19oIfe753l7dzD3IYew.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/xo/xolz1HzMb_2_lfkmvbaT8_QWgxaJqQ5w1OtPZWqKHiA.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/xr/xrxYZJuo9pgxXDbGXmtOWUlzq9jYWuLOsTuFS2ktVlo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/y1/y1cAP8pJ30_K5pLPPRJhDnXgB7ggVZ6RFgg_kanmG0A.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/yT/YTz62lYcOj7f7nmZ-Z_jpl5wOhkaWZp99r0tQxT6SVY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/yT/yTdpyb-v7EzirDsmEwwm0GdagRBPzWl4V5wTe4irItA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/zU/zUK2_euW_9gw2XdaZ6kpwsCEP-RGLn4V52h0Y4eEbys.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/zY/zYCYsTXX3QYnqE-YOMjmjL1wo5MujSkR4CeStEjablU.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/zs/zsaNhb7gDFFpZzrSu8n9zLQu6ZPD3DfWc1_7m9NtMOs.cache +1 -0
- data/spec/dummy/tmp/development_secret.txt +1 -0
- data/spec/dummy/tmp/local_secret.txt +1 -0
- data/spec/lib/helpers/ice_cube_select_helper_spec.rb +60 -0
- data/spec/lib/ice_cube_select_spec.rb +50 -0
- data/spec/spec_helper.rb +9 -0
- metadata +675 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/* IceCubeSelect - Dialog Styles */
|
|
2
|
+
|
|
3
|
+
/* Cancel button X icon (inline SVG) */
|
|
4
|
+
.ice_cube_select_dialog_content h4 a {
|
|
5
|
+
float: right;
|
|
6
|
+
height: 16px;
|
|
7
|
+
width: 16px;
|
|
8
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
|
|
9
|
+
background-position: center;
|
|
10
|
+
background-repeat: no-repeat;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* Loading spinner (inline SVG animation) */
|
|
14
|
+
.ice_cube_select_summary.fetching span {
|
|
15
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='13' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2'%3E%3Cpath d='M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83'%3E%3Canimate attributeName='stroke-opacity' values='1;0.5;1' dur='1s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E");
|
|
16
|
+
background-position: center;
|
|
17
|
+
background-repeat: no-repeat;
|
|
18
|
+
display: inline-block;
|
|
19
|
+
height: 13px;
|
|
20
|
+
width: 13px;
|
|
21
|
+
margin-top: -4px;
|
|
22
|
+
padding-right: 5px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Resets */
|
|
26
|
+
.ice_cube_select_dialog_holder {
|
|
27
|
+
font-size: 14px;
|
|
28
|
+
color: black;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.ice_cube_select_dialog_holder a {
|
|
32
|
+
color: black;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.ice_cube_select_dialog_holder input[type=button] {
|
|
36
|
+
font: small/normal Arial, sans-serif;
|
|
37
|
+
background: #F5F5F5;
|
|
38
|
+
color: #444;
|
|
39
|
+
border: 1px solid #ccc;
|
|
40
|
+
font-size: 11px;
|
|
41
|
+
font-weight: bold;
|
|
42
|
+
height: 27px;
|
|
43
|
+
line-height: 27px;
|
|
44
|
+
outline: none;
|
|
45
|
+
padding: 0 8px;
|
|
46
|
+
text-align: center;
|
|
47
|
+
border-radius: 2px;
|
|
48
|
+
background-image: linear-gradient(to bottom, #f5f5f5, #f1f1f1);
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.ice_cube_select_dialog_holder input[type=button]:hover {
|
|
53
|
+
border-color: #aaa;
|
|
54
|
+
color: #222;
|
|
55
|
+
background-color: #f9f9f9;
|
|
56
|
+
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.ice_cube_select_dialog_holder input[type=button]:focus {
|
|
60
|
+
border-color: #1E90FF;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.ice_cube_select_dialog_holder input[type=button]:active {
|
|
64
|
+
border-color: #1E90FF;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Defaults */
|
|
68
|
+
.ice_cube_select_dialog_holder {
|
|
69
|
+
font-family: helvetica, arial, sans-serif;
|
|
70
|
+
color: #222;
|
|
71
|
+
font-size: 12px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Specifics */
|
|
75
|
+
select option.bold {
|
|
76
|
+
font-weight: bold;
|
|
77
|
+
color: red;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Dialog holder (overlay) */
|
|
81
|
+
.ice_cube_select_dialog_holder {
|
|
82
|
+
position: fixed;
|
|
83
|
+
left: 0;
|
|
84
|
+
right: 0;
|
|
85
|
+
top: 0;
|
|
86
|
+
bottom: 0;
|
|
87
|
+
padding-left: 50%;
|
|
88
|
+
background-color: rgba(255, 255, 255, 0.2);
|
|
89
|
+
z-index: 50;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* Dialog box */
|
|
93
|
+
.ice_cube_select_dialog {
|
|
94
|
+
background-color: #f6f6f6;
|
|
95
|
+
border: 1px solid #acacac;
|
|
96
|
+
box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.25);
|
|
97
|
+
border-radius: 7px;
|
|
98
|
+
display: inline-block;
|
|
99
|
+
min-width: 200px;
|
|
100
|
+
margin-left: -125px;
|
|
101
|
+
overflow: hidden;
|
|
102
|
+
position: relative;
|
|
103
|
+
transition: margin-top 0.2s ease, min-height 0.2s ease;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Dialog content */
|
|
107
|
+
.ice_cube_select_dialog_content {
|
|
108
|
+
padding: 10px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.ice_cube_select_dialog_content h4 {
|
|
112
|
+
font-size: 16px;
|
|
113
|
+
padding: 0;
|
|
114
|
+
margin: 0 0 10px 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.ice_cube_select_dialog_content p {
|
|
118
|
+
padding: 5px 0;
|
|
119
|
+
margin: 0;
|
|
120
|
+
line-height: 14px;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.ice_cube_select_dialog_content p label {
|
|
124
|
+
margin-right: 10px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.ice_cube_select_dialog_content a {
|
|
128
|
+
box-sizing: content-box;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* Frequency option sections */
|
|
132
|
+
.freq_option_section {
|
|
133
|
+
display: none;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.freq_option_section label {
|
|
137
|
+
font-weight: bold;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.ice_cube_select_interval {
|
|
141
|
+
width: 30px;
|
|
142
|
+
text-align: center;
|
|
143
|
+
display: inline-block;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Day holder (weekly view) */
|
|
147
|
+
.day_holder {
|
|
148
|
+
border-left: 1px solid #ccc;
|
|
149
|
+
position: relative;
|
|
150
|
+
margin-top: 5px;
|
|
151
|
+
height: 26px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.day_holder a {
|
|
155
|
+
display: block;
|
|
156
|
+
padding: 5px 7px;
|
|
157
|
+
font-size: 14px;
|
|
158
|
+
border-style: solid;
|
|
159
|
+
border-color: #ccc;
|
|
160
|
+
border-width: 1px 1px 1px 0;
|
|
161
|
+
float: left;
|
|
162
|
+
text-decoration: none;
|
|
163
|
+
font-weight: bold;
|
|
164
|
+
box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1);
|
|
165
|
+
background-color: #fff;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.day_holder a.selected {
|
|
169
|
+
background-color: #677889;
|
|
170
|
+
color: #fff;
|
|
171
|
+
box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.2);
|
|
172
|
+
background-image: linear-gradient(to bottom, #677890, #677889);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.day_holder a:hover {
|
|
176
|
+
cursor: pointer;
|
|
177
|
+
background-color: #dde;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Calendar day/week views */
|
|
181
|
+
.ice_cube_select_calendar_day,
|
|
182
|
+
.ice_cube_select_calendar_week {
|
|
183
|
+
width: 155px;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.ice_cube_select_calendar_day a,
|
|
187
|
+
.ice_cube_select_calendar_week a {
|
|
188
|
+
display: inline-block;
|
|
189
|
+
text-align: center;
|
|
190
|
+
width: 15px;
|
|
191
|
+
padding: 5px 3px;
|
|
192
|
+
font-size: 12px;
|
|
193
|
+
border-style: solid;
|
|
194
|
+
border-color: #ccc;
|
|
195
|
+
border-width: 1px;
|
|
196
|
+
margin: -1px 0 0 -1px;
|
|
197
|
+
line-height: 10px;
|
|
198
|
+
background-color: #fff;
|
|
199
|
+
font-weight: bold;
|
|
200
|
+
text-decoration: none;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.ice_cube_select_calendar_day a.selected,
|
|
204
|
+
.ice_cube_select_calendar_week a.selected {
|
|
205
|
+
background-color: #677889;
|
|
206
|
+
color: #fff;
|
|
207
|
+
background-image: linear-gradient(to bottom, #677890, #677889);
|
|
208
|
+
box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.2);
|
|
209
|
+
text-shadow: 0 1px 1px #333;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.ice_cube_select_calendar_day a:hover,
|
|
213
|
+
.ice_cube_select_calendar_week a:hover {
|
|
214
|
+
cursor: pointer;
|
|
215
|
+
background-color: #dde;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.ice_cube_select_calendar_day a.end_of_month {
|
|
219
|
+
width: 81px;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.ice_cube_select_calendar_week {
|
|
223
|
+
width: 191px;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.ice_cube_select_calendar_week span {
|
|
227
|
+
display: inline-block;
|
|
228
|
+
width: 35px;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/* Monthly rule type */
|
|
232
|
+
.monthly_rule_type span {
|
|
233
|
+
margin-right: 15px;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* Summary section */
|
|
237
|
+
.ice_cube_select_summary {
|
|
238
|
+
padding: 0;
|
|
239
|
+
margin-top: 15px;
|
|
240
|
+
border-top: 1px solid #ccc;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.ice_cube_select_summary span {
|
|
244
|
+
font-weight: bold;
|
|
245
|
+
border-top: 1px solid #fff;
|
|
246
|
+
display: block;
|
|
247
|
+
padding: 10px 0 5px 0;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.ice_cube_select_summary.fetching {
|
|
251
|
+
color: #999;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.ice_cube_select_summary label {
|
|
255
|
+
font-weight: normal;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/* Controls */
|
|
259
|
+
.controls {
|
|
260
|
+
padding: 10px 0 5px 0;
|
|
261
|
+
min-width: 170px;
|
|
262
|
+
text-align: center;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.controls input[type=button] {
|
|
266
|
+
margin: 0 5px;
|
|
267
|
+
width: 70px;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.controls input[type=button].ice_cube_select_save {
|
|
271
|
+
color: #333;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.controls input[type=button].ice_cube_select_cancel {
|
|
275
|
+
color: #666;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.controls input[type=button].disabled {
|
|
279
|
+
color: #aaa;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* Animated state */
|
|
283
|
+
.ice_cube_select_dialog.animated .controls {
|
|
284
|
+
position: absolute;
|
|
285
|
+
bottom: 10px;
|
|
286
|
+
left: 10px;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.ice_cube_select_dialog.animated .ice_cube_select_summary,
|
|
290
|
+
.ice_cube_select_dialog.animated .freq_option_section {
|
|
291
|
+
display: none;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/* Cancel button styling */
|
|
295
|
+
#ice_cube_select_cancel_button {
|
|
296
|
+
color: #757575;
|
|
297
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require "ice_cube"
|
|
2
|
+
|
|
3
|
+
module IceCubeSelectHelper
|
|
4
|
+
module FormHelper
|
|
5
|
+
def select_recurring(object, method, default_schedules = nil, options = {}, html_options = {})
|
|
6
|
+
IceCubeSelectTag.new(object, method, self, default_schedules, options, html_options).render
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module FormBuilder
|
|
11
|
+
def select_recurring(method, default_schedules = nil, options = {}, html_options = {})
|
|
12
|
+
if !@template.respond_to?(:select_recurring)
|
|
13
|
+
@template.class.send(:include, IceCubeSelectHelper::FormHelper)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
@template.select_recurring(@object_name, method, default_schedules, options.merge(:object => @object), html_options)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module FormOptionsHelper
|
|
21
|
+
def recurring_options_for_select(currently_selected_rule = nil, default_schedules = nil, options = {})
|
|
22
|
+
|
|
23
|
+
options_array = []
|
|
24
|
+
blank_option_label = options[:blank_label] || I18n.t("ice_cube_select.not_recurring")
|
|
25
|
+
blank_option = [blank_option_label, "null"]
|
|
26
|
+
separator = [I18n.t("ice_cube_select.or"), {:disabled => true}]
|
|
27
|
+
|
|
28
|
+
if default_schedules.blank?
|
|
29
|
+
if currently_selected_rule.present?
|
|
30
|
+
options_array << ice_cube_rule_to_option(currently_selected_rule)
|
|
31
|
+
options_array << separator
|
|
32
|
+
options_array << [I18n.t("ice_cube_select.change_schedule"), "custom"]
|
|
33
|
+
options_array << blank_option if options[:allow_blank]
|
|
34
|
+
else
|
|
35
|
+
options_array << blank_option
|
|
36
|
+
options_array << [I18n.t("ice_cube_select.set_schedule"), "custom"]
|
|
37
|
+
end
|
|
38
|
+
else
|
|
39
|
+
options_array << blank_option if options[:allow_blank]
|
|
40
|
+
|
|
41
|
+
options_array += default_schedules.collect{|dc|
|
|
42
|
+
ice_cube_rule_to_option(dc)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if currently_selected_rule.present? and !current_rule_in_defaults?(currently_selected_rule, default_schedules)
|
|
46
|
+
options_array << ice_cube_rule_to_option(currently_selected_rule, true)
|
|
47
|
+
custom_label = [I18n.t("ice_cube_select.new_custom_schedule"), "custom"]
|
|
48
|
+
else
|
|
49
|
+
custom_label = [I18n.t("ice_cube_select.custom_schedule"), "custom"]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
options_array << separator
|
|
53
|
+
options_array << custom_label
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
options_for_select(options_array, currently_selected_rule.to_json)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
def ice_cube_rule_to_option(supplied_rule, custom = false)
|
|
62
|
+
return supplied_rule unless IceCubeSelect.is_valid_rule?(supplied_rule)
|
|
63
|
+
|
|
64
|
+
rule = IceCubeSelect.dirty_hash_to_rule(supplied_rule)
|
|
65
|
+
ar = [rule.to_s, rule.to_hash.to_json]
|
|
66
|
+
|
|
67
|
+
if custom
|
|
68
|
+
ar[0] << "*"
|
|
69
|
+
ar << {"data-custom" => true}
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
ar
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def current_rule_in_defaults?(currently_selected_rule, default_schedules)
|
|
76
|
+
default_schedules.any?{|option|
|
|
77
|
+
option == currently_selected_rule or
|
|
78
|
+
(option.is_a?(Array) and option[1] == currently_selected_rule)
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
module SelectHTMLOptions
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
def ice_cube_select_html_options(html_options)
|
|
87
|
+
html_options = html_options.stringify_keys
|
|
88
|
+
html_options["class"] = (html_options["class"].to_s.split + ["ice_cube_select"]).join(" ")
|
|
89
|
+
html_options["data-translate-url"] ||= translate_url_path
|
|
90
|
+
html_options
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def translate_url_path
|
|
94
|
+
base = Rails.application.config.action_controller.relative_url_root || ""
|
|
95
|
+
"#{base}/ice_cube_select/translate"
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
class IceCubeSelectTag < ActionView::Helpers::Tags::Select
|
|
100
|
+
include IceCubeSelectHelper::FormOptionsHelper
|
|
101
|
+
include SelectHTMLOptions
|
|
102
|
+
|
|
103
|
+
delegate :options_for_select, to: :@template_object
|
|
104
|
+
|
|
105
|
+
def initialize(object, method, template_object, default_schedules = nil, options = {}, html_options = {})
|
|
106
|
+
@default_schedules = default_schedules
|
|
107
|
+
@template_object = template_object
|
|
108
|
+
html_options = ice_cube_select_html_options(html_options)
|
|
109
|
+
|
|
110
|
+
# Select expects: object_name, method_name, template_object, choices, options, html_options
|
|
111
|
+
super(object, method, template_object, [], options, html_options)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def render
|
|
115
|
+
option_tags = add_options(recurring_options_for_select(value, @default_schedules, @options), @options, value)
|
|
116
|
+
select_content_tag(option_tags, @options, @html_options)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "ice_cube_select"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "helpers/ice_cube_select_helper"
|
|
2
|
+
require "middleware/ice_cube_select_middleware"
|
|
3
|
+
|
|
4
|
+
module IceCubeSelect
|
|
5
|
+
class Engine < Rails::Engine
|
|
6
|
+
|
|
7
|
+
initializer "ice_cube_select.extending_form_builder" do |app|
|
|
8
|
+
ActionView::Helpers::FormHelper.include(IceCubeSelectHelper::FormHelper)
|
|
9
|
+
ActionView::Helpers::FormOptionsHelper.include(IceCubeSelectHelper::FormOptionsHelper)
|
|
10
|
+
ActionView::Helpers::FormBuilder.include(IceCubeSelectHelper::FormBuilder)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
initializer "ice_cube_select.connecting_middleware" do |app|
|
|
14
|
+
app.middleware.use IceCubeSelectMiddleware
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require "ice_cube_select/engine"
|
|
2
|
+
require "ice_cube"
|
|
3
|
+
|
|
4
|
+
module IceCubeSelect
|
|
5
|
+
|
|
6
|
+
def self.dirty_hash_to_rule(params)
|
|
7
|
+
return params if params.is_a? IceCube::Rule
|
|
8
|
+
|
|
9
|
+
params = JSON.parse(params, quirks_mode: true) if params.is_a?(String)
|
|
10
|
+
return nil if params.nil?
|
|
11
|
+
|
|
12
|
+
params = params.symbolize_keys
|
|
13
|
+
rules_hash = filter_params(params)
|
|
14
|
+
IceCube::Rule.from_hash(rules_hash)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.is_valid_rule?(possible_rule)
|
|
18
|
+
return true if possible_rule.is_a?(IceCube::Rule)
|
|
19
|
+
return false if possible_rule.blank?
|
|
20
|
+
|
|
21
|
+
if possible_rule.is_a?(String)
|
|
22
|
+
possible_rule = JSON.parse(possible_rule)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# TODO: this should really have an extra step where it tries to perform the final parsing
|
|
26
|
+
possible_rule.is_a?(Hash)
|
|
27
|
+
rescue JSON::ParserError
|
|
28
|
+
false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def self.filter_params(params)
|
|
34
|
+
params.reject! { |key, value| value.blank? || value == "null" }
|
|
35
|
+
|
|
36
|
+
params[:interval] = params[:interval].to_i if params[:interval]
|
|
37
|
+
params[:week_start] = params[:week_start].to_i if params[:week_start]
|
|
38
|
+
|
|
39
|
+
params[:validations] ||= {}
|
|
40
|
+
params[:validations] = deep_symbolize_keys(params[:validations])
|
|
41
|
+
|
|
42
|
+
if params[:validations][:day]
|
|
43
|
+
params[:validations][:day] = to_int_array(params[:validations][:day])
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if params[:validations][:day_of_month]
|
|
47
|
+
params[:validations][:day_of_month] = to_int_array(params[:validations][:day_of_month])
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if params[:validations][:day_of_week]
|
|
51
|
+
dow = params[:validations][:day_of_week]
|
|
52
|
+
params[:validations][:day_of_week] = {}
|
|
53
|
+
dow.each do |key, value|
|
|
54
|
+
# Keep symbolic keys as symbols, convert numeric strings to integers
|
|
55
|
+
key_str = key.to_s
|
|
56
|
+
new_key = key_str.match?(/^\d+$/) ? key_str.to_i : key.to_sym
|
|
57
|
+
params[:validations][:day_of_week][new_key] = to_int_array(value)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
if params[:validations][:day_of_year]
|
|
62
|
+
params[:validations][:day_of_year] = to_int_array(params[:validations][:day_of_year])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
params
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.to_int_array(value)
|
|
69
|
+
return [] if value.nil?
|
|
70
|
+
if value.is_a?(Hash)
|
|
71
|
+
value.values.flatten.map(&:to_i)
|
|
72
|
+
elsif value.is_a?(Array)
|
|
73
|
+
value.flatten.map(&:to_i)
|
|
74
|
+
else
|
|
75
|
+
[value.to_i]
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def self.deep_symbolize_keys(hash)
|
|
80
|
+
return hash unless hash.is_a?(Hash)
|
|
81
|
+
hash.each_with_object({}) do |(key, value), result|
|
|
82
|
+
new_key = key.respond_to?(:to_sym) ? key.to_sym : key
|
|
83
|
+
result[new_key] = value.is_a?(Hash) ? deep_symbolize_keys(value) : value
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "ice_cube"
|
|
2
|
+
|
|
3
|
+
class IceCubeSelectMiddleware
|
|
4
|
+
def initialize(app)
|
|
5
|
+
@app = app
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def call(env)
|
|
9
|
+
regexp = /^\/ice_cube_select\/translate\/(.*)/
|
|
10
|
+
if env["PATH_INFO"] =~ regexp
|
|
11
|
+
I18n.locale = env["PATH_INFO"].scan(regexp).first.first
|
|
12
|
+
request = Rack::Request.new(env)
|
|
13
|
+
params = request.params.to_h.transform_keys(&:to_sym)
|
|
14
|
+
|
|
15
|
+
if params && params[:rule_type]
|
|
16
|
+
rule = IceCubeSelect.dirty_hash_to_rule(params)
|
|
17
|
+
[200, {"content-type" => "text/html"}, [rule.to_s]]
|
|
18
|
+
else
|
|
19
|
+
[200, {"content-type" => "text/html"}, [""]]
|
|
20
|
+
end
|
|
21
|
+
else
|
|
22
|
+
@app.call(env)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/spec/dummy/Gemfile
ADDED