pwice_grid 5.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.
Files changed (389) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +68 -0
  3. data/.circleci/run-build-locally.sh +7 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  5. data/.gitignore +22 -0
  6. data/.inch.yml +3 -0
  7. data/.rspec +3 -0
  8. data/.rubocop.yml +186 -0
  9. data/Appraisals +11 -0
  10. data/CHANGELOG.md +758 -0
  11. data/Gemfile +3 -0
  12. data/Gemfile.lock +298 -0
  13. data/MIT-LICENSE +20 -0
  14. data/README.md +1561 -0
  15. data/Rakefile +49 -0
  16. data/SAVED_QUERIES_HOWTO.md +113 -0
  17. data/app/views/kaminari/wice_grid/_gap.html.erb +1 -0
  18. data/app/views/kaminari/wice_grid/_next_page.html.erb +1 -0
  19. data/app/views/kaminari/wice_grid/_page.html.erb +1 -0
  20. data/app/views/kaminari/wice_grid/_paginator.html.erb +19 -0
  21. data/app/views/kaminari/wice_grid/_prev_page.html.erb +1 -0
  22. data/config/locales/cz.yml +40 -0
  23. data/config/locales/de.yml +42 -0
  24. data/config/locales/en.yml +42 -0
  25. data/config/locales/es.yml +42 -0
  26. data/config/locales/fr.yml +40 -0
  27. data/config/locales/is.yml +41 -0
  28. data/config/locales/it.yml +33 -0
  29. data/config/locales/ja.yml +42 -0
  30. data/config/locales/nl.yml +40 -0
  31. data/config/locales/pt-BR.yml +31 -0
  32. data/config/locales/pt.yml +40 -0
  33. data/config/locales/ru.yml +40 -0
  34. data/config/locales/sk.yml +40 -0
  35. data/config/locales/uk.yml +40 -0
  36. data/config/locales/zh.yml +40 -0
  37. data/gemfiles/rails_5.0.gemfile +7 -0
  38. data/gemfiles/rails_5.0.gemfile.lock +299 -0
  39. data/gemfiles/rails_5.1.gemfile +7 -0
  40. data/gemfiles/rails_5.1.gemfile.lock +299 -0
  41. data/gemfiles/rails_5.2.gemfile +7 -0
  42. data/gemfiles/rails_5.2.gemfile.lock +307 -0
  43. data/lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb +19 -0
  44. data/lib/generators/wice_grid/install_generator.rb +13 -0
  45. data/lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb +13 -0
  46. data/lib/generators/wice_grid/templates/wice_grid_config.rb +191 -0
  47. data/lib/wice/active_record_column_wrapper.rb +122 -0
  48. data/lib/wice/columns.rb +282 -0
  49. data/lib/wice/columns/column_action.rb +51 -0
  50. data/lib/wice/columns/column_boolean.rb +39 -0
  51. data/lib/wice/columns/column_bootstrap_datepicker.rb +47 -0
  52. data/lib/wice/columns/column_custom_dropdown.rb +114 -0
  53. data/lib/wice/columns/column_float.rb +8 -0
  54. data/lib/wice/columns/column_html5_datepicker.rb +30 -0
  55. data/lib/wice/columns/column_integer.rb +87 -0
  56. data/lib/wice/columns/column_jquery_datepicker.rb +48 -0
  57. data/lib/wice/columns/column_processor_index.rb +22 -0
  58. data/lib/wice/columns/column_rails_date_helper.rb +40 -0
  59. data/lib/wice/columns/column_rails_datetime_helper.rb +40 -0
  60. data/lib/wice/columns/column_range.rb +73 -0
  61. data/lib/wice/columns/column_string.rb +91 -0
  62. data/lib/wice/columns/common_date_datetime_mixin.rb +19 -0
  63. data/lib/wice/columns/common_js_date_datetime_conditions_generator_mixin.rb +38 -0
  64. data/lib/wice/columns/common_js_date_datetime_mixin.rb +14 -0
  65. data/lib/wice/columns/common_rails_date_datetime_conditions_generator_mixin.rb +25 -0
  66. data/lib/wice/columns/common_standard_helper_date_datetime_mixin.rb +21 -0
  67. data/lib/wice/grid_output_buffer.rb +48 -0
  68. data/lib/wice/grid_renderer.rb +624 -0
  69. data/lib/wice/helpers/bs_calendar_helpers.rb +73 -0
  70. data/lib/wice/helpers/js_calendar_helpers.rb +82 -0
  71. data/lib/wice/helpers/wice_grid_misc_view_helpers.rb +74 -0
  72. data/lib/wice/helpers/wice_grid_serialized_queries_view_helpers.rb +94 -0
  73. data/lib/wice/helpers/wice_grid_view_helpers.rb +719 -0
  74. data/lib/wice/kaminari_monkey_patching.rb +12 -0
  75. data/lib/wice/table_column_matrix.rb +64 -0
  76. data/lib/wice/wice_grid_controller.rb +174 -0
  77. data/lib/wice/wice_grid_core_ext.rb +145 -0
  78. data/lib/wice/wice_grid_misc.rb +208 -0
  79. data/lib/wice/wice_grid_serialized_queries_controller.rb +86 -0
  80. data/lib/wice/wice_grid_serialized_query.rb +13 -0
  81. data/lib/wice/wice_grid_spreadsheet.rb +19 -0
  82. data/lib/wice_grid.rb +702 -0
  83. data/spec/acceptance_helper.rb +59 -0
  84. data/spec/features/action_column_request_spec.rb +280 -0
  85. data/spec/features/adding_rows_request_spec.rb +21 -0
  86. data/spec/features/all_records_request_spec.rb +18 -0
  87. data/spec/features/auto_reloads2_request_spec.rb +366 -0
  88. data/spec/features/auto_reloads3_request_spec.rb +130 -0
  89. data/spec/features/auto_reloads_request_spec.rb +364 -0
  90. data/spec/features/basics1_request_spec.rb +11 -0
  91. data/spec/features/basics2_request_spec.rb +10 -0
  92. data/spec/features/basics3_request_spec.rb +29 -0
  93. data/spec/features/basics4_request_spec.rb +19 -0
  94. data/spec/features/basics5_request_spec.rb +13 -0
  95. data/spec/features/basics6_request_spec.rb +22 -0
  96. data/spec/features/blockless_column_definition_spec.rb +27 -0
  97. data/spec/features/buttons_request_spec.rb +172 -0
  98. data/spec/features/csv_and_detached_filters_spec.rb +10 -0
  99. data/spec/features/csv_export_request_spec.rb +13 -0
  100. data/spec/features/custom_filter_params_request_spec.rb +29 -0
  101. data/spec/features/custom_filters1_request_spec.rb +136 -0
  102. data/spec/features/custom_filters2_request_spec.rb +31 -0
  103. data/spec/features/custom_filters3_request_spec.rb +34 -0
  104. data/spec/features/custom_filters4_request_spec.rb +13 -0
  105. data/spec/features/custom_ordering_on_calculated_request_spec.rb +30 -0
  106. data/spec/features/custom_ordering_request_spec.rb +36 -0
  107. data/spec/features/custom_ordering_with_arel_request_spec.rb +36 -0
  108. data/spec/features/custom_ordering_with_proc_request_spec.rb +44 -0
  109. data/spec/features/custom_ordering_with_ruby_request_spec.rb +30 -0
  110. data/spec/features/dates_request_spec.rb +56 -0
  111. data/spec/features/detached_filters_spec.rb +10 -0
  112. data/spec/features/detached_filters_two_grids_spec.rb +135 -0
  113. data/spec/features/disable_all_filters_spec.rb +22 -0
  114. data/spec/features/hiding_checkboxes_in_action_column_request_spec.rb +294 -0
  115. data/spec/features/integration_with_application_view_request_spec.rb +43 -0
  116. data/spec/features/integration_with_forms_request_spec.rb +141 -0
  117. data/spec/features/joining_tables_spec.rb +40 -0
  118. data/spec/features/localization_request_spec.rb +24 -0
  119. data/spec/features/many_grids_on_page_request_spec.rb +104 -0
  120. data/spec/features/negation_request_spec.rb +25 -0
  121. data/spec/features/no_records_request_spec.rb +26 -0
  122. data/spec/features/numeric_filters_request_spec.rb +10 -0
  123. data/spec/features/resultset_processings2_request_spec.rb +27 -0
  124. data/spec/features/resultset_processings_request_spec.rb +30 -0
  125. data/spec/features/saved_queries_request_spec.rb +120 -0
  126. data/spec/features/shared.rb +1005 -0
  127. data/spec/features/shared_detached_filters.rb +175 -0
  128. data/spec/features/styling_spec.rb +15 -0
  129. data/spec/features/two_associations_spec.rb +48 -0
  130. data/spec/features/upper_pagination_panel_request_spec.rb +23 -0
  131. data/spec/features/when_filtered_spec.rb +209 -0
  132. data/spec/fixtures/.gitkeep +0 -0
  133. data/spec/fixtures/companies.yml +21 -0
  134. data/spec/fixtures/priorities.yml +31 -0
  135. data/spec/fixtures/project_roles.yml +25 -0
  136. data/spec/fixtures/projects.yml +22 -0
  137. data/spec/fixtures/statuses.yml +55 -0
  138. data/spec/fixtures/tasks.yml +751 -0
  139. data/spec/fixtures/tasks_users.yml +2089 -0
  140. data/spec/fixtures/users.yml +61 -0
  141. data/spec/fixtures/versions.yml +78 -0
  142. data/spec/models/company_spec.rb +6 -0
  143. data/spec/models/priority_spec.rb +6 -0
  144. data/spec/models/project_spec.rb +11 -0
  145. data/spec/models/status_spec.rb +6 -0
  146. data/spec/models/task_spec.rb +12 -0
  147. data/spec/models/user_project_participation_spec.rb +7 -0
  148. data/spec/models/user_spec.rb +12 -0
  149. data/spec/models/version_spec.rb +5 -0
  150. data/spec/rails_helper.rb +15 -0
  151. data/spec/schema.rb +8 -0
  152. data/spec/spec_helper.rb +75 -0
  153. data/spec/support/active_record.rb +10 -0
  154. data/spec/support/test_app/Rakefile +3 -0
  155. data/spec/support/test_app/app/assets/javascripts/application.js +20 -0
  156. data/spec/support/test_app/app/assets/javascripts/common.js.coffee +6 -0
  157. data/spec/support/test_app/app/assets/javascripts/jquery.ui.datepicker.locales.js +56 -0
  158. data/spec/support/test_app/app/assets/stylesheets/adding_rows.scss +3 -0
  159. data/spec/support/test_app/app/assets/stylesheets/application.scss +46 -0
  160. data/spec/support/test_app/app/assets/stylesheets/csv_and_detached_filters.scss +3 -0
  161. data/spec/support/test_app/app/assets/stylesheets/many_grids_on_page.scss +3 -0
  162. data/spec/support/test_app/app/controllers/action_column_controller.rb +15 -0
  163. data/spec/support/test_app/app/controllers/adding_rows_controller.rb +14 -0
  164. data/spec/support/test_app/app/controllers/all_records_controller.rb +14 -0
  165. data/spec/support/test_app/app/controllers/application_controller.rb +99 -0
  166. data/spec/support/test_app/app/controllers/auto_reloads2_controller.rb +14 -0
  167. data/spec/support/test_app/app/controllers/auto_reloads3_controller.rb +20 -0
  168. data/spec/support/test_app/app/controllers/auto_reloads_controller.rb +14 -0
  169. data/spec/support/test_app/app/controllers/basics1_controller.rb +6 -0
  170. data/spec/support/test_app/app/controllers/basics2_controller.rb +6 -0
  171. data/spec/support/test_app/app/controllers/basics3_controller.rb +6 -0
  172. data/spec/support/test_app/app/controllers/basics4_controller.rb +6 -0
  173. data/spec/support/test_app/app/controllers/basics5_controller.rb +6 -0
  174. data/spec/support/test_app/app/controllers/basics6_controller.rb +11 -0
  175. data/spec/support/test_app/app/controllers/blockless_column_definition_controller.rb +6 -0
  176. data/spec/support/test_app/app/controllers/buttons_controller.rb +6 -0
  177. data/spec/support/test_app/app/controllers/csv_and_detached_filters_controller.rb +13 -0
  178. data/spec/support/test_app/app/controllers/csv_export_controller.rb +28 -0
  179. data/spec/support/test_app/app/controllers/custom_filter_params_controller.rb +6 -0
  180. data/spec/support/test_app/app/controllers/custom_filters1_controller.rb +9 -0
  181. data/spec/support/test_app/app/controllers/custom_filters2_controller.rb +14 -0
  182. data/spec/support/test_app/app/controllers/custom_filters3_controller.rb +12 -0
  183. data/spec/support/test_app/app/controllers/custom_filters4_controller.rb +12 -0
  184. data/spec/support/test_app/app/controllers/custom_ordering_controller.rb +18 -0
  185. data/spec/support/test_app/app/controllers/custom_ordering_on_calculated_controller.rb +6 -0
  186. data/spec/support/test_app/app/controllers/custom_ordering_with_arel_controller.rb +18 -0
  187. data/spec/support/test_app/app/controllers/custom_ordering_with_proc_controller.rb +11 -0
  188. data/spec/support/test_app/app/controllers/custom_ordering_with_ruby_controller.rb +6 -0
  189. data/spec/support/test_app/app/controllers/dates_controller.rb +8 -0
  190. data/spec/support/test_app/app/controllers/detached_filters_controller.rb +6 -0
  191. data/spec/support/test_app/app/controllers/detached_filters_two_grids_controller.rb +7 -0
  192. data/spec/support/test_app/app/controllers/disable_all_filters_controller.rb +6 -0
  193. data/spec/support/test_app/app/controllers/hiding_checkboxes_in_action_column_controller.rb +13 -0
  194. data/spec/support/test_app/app/controllers/home_controller.rb +3 -0
  195. data/spec/support/test_app/app/controllers/integration_with_application_view_controller.rb +16 -0
  196. data/spec/support/test_app/app/controllers/integration_with_forms_controller.rb +11 -0
  197. data/spec/support/test_app/app/controllers/joining_tables_controller.rb +11 -0
  198. data/spec/support/test_app/app/controllers/localization_controller.rb +26 -0
  199. data/spec/support/test_app/app/controllers/many_grids_on_page_controller.rb +7 -0
  200. data/spec/support/test_app/app/controllers/negation_controller.rb +14 -0
  201. data/spec/support/test_app/app/controllers/no_records_controller.rb +8 -0
  202. data/spec/support/test_app/app/controllers/null_values_controller.rb +10 -0
  203. data/spec/support/test_app/app/controllers/numeric_filters_controller.rb +6 -0
  204. data/spec/support/test_app/app/controllers/queries_controller.rb +4 -0
  205. data/spec/support/test_app/app/controllers/resultset_processings2_controller.rb +29 -0
  206. data/spec/support/test_app/app/controllers/resultset_processings_controller.rb +30 -0
  207. data/spec/support/test_app/app/controllers/saved_queries_controller.rb +14 -0
  208. data/spec/support/test_app/app/controllers/styling_controller.rb +7 -0
  209. data/spec/support/test_app/app/controllers/tasks_controller.rb +14 -0
  210. data/spec/support/test_app/app/controllers/two_associations_controller.rb +6 -0
  211. data/spec/support/test_app/app/controllers/upper_pagination_panel_controller.rb +6 -0
  212. data/spec/support/test_app/app/controllers/when_filtered_controller.rb +6 -0
  213. data/spec/support/test_app/app/helpers/application_helper.rb +82 -0
  214. data/spec/support/test_app/app/mailers/.gitkeep +0 -0
  215. data/spec/support/test_app/app/models/.gitkeep +0 -0
  216. data/spec/support/test_app/app/models/company.rb +5 -0
  217. data/spec/support/test_app/app/models/populate.rb +84 -0
  218. data/spec/support/test_app/app/models/priority.rb +10 -0
  219. data/spec/support/test_app/app/models/project.rb +14 -0
  220. data/spec/support/test_app/app/models/project_role.rb +3 -0
  221. data/spec/support/test_app/app/models/status.rb +10 -0
  222. data/spec/support/test_app/app/models/task.rb +11 -0
  223. data/spec/support/test_app/app/models/to_dropdown_mixin.rb +16 -0
  224. data/spec/support/test_app/app/models/user.rb +8 -0
  225. data/spec/support/test_app/app/models/user_project_participation.rb +6 -0
  226. data/spec/support/test_app/app/models/version.rb +6 -0
  227. data/spec/support/test_app/app/views/action_column/_grid.html.erb +35 -0
  228. data/spec/support/test_app/app/views/action_column/index.html.haml +45 -0
  229. data/spec/support/test_app/app/views/adding_rows/_grid.html.erb +58 -0
  230. data/spec/support/test_app/app/views/adding_rows/index.html.haml +37 -0
  231. data/spec/support/test_app/app/views/all_records/_grid.html.erb +30 -0
  232. data/spec/support/test_app/app/views/all_records/index.html.haml +12 -0
  233. data/spec/support/test_app/app/views/auto_reloads/_grid.html.erb +32 -0
  234. data/spec/support/test_app/app/views/auto_reloads/index.html.haml +15 -0
  235. data/spec/support/test_app/app/views/auto_reloads2/_grid.html.erb +32 -0
  236. data/spec/support/test_app/app/views/auto_reloads2/index.html.haml +65 -0
  237. data/spec/support/test_app/app/views/auto_reloads3/_grid.html.erb +25 -0
  238. data/spec/support/test_app/app/views/auto_reloads3/index.html.haml +78 -0
  239. data/spec/support/test_app/app/views/basics1/_grid.html.erb +26 -0
  240. data/spec/support/test_app/app/views/basics1/index.html.haml +13 -0
  241. data/spec/support/test_app/app/views/basics2/_grid.html.erb +27 -0
  242. data/spec/support/test_app/app/views/basics2/index.html.haml +12 -0
  243. data/spec/support/test_app/app/views/basics3/_grid.html.erb +28 -0
  244. data/spec/support/test_app/app/views/basics3/index.html.haml +13 -0
  245. data/spec/support/test_app/app/views/basics4/_grid.html.erb +21 -0
  246. data/spec/support/test_app/app/views/basics4/index.html.haml +12 -0
  247. data/spec/support/test_app/app/views/basics5/_grid.html.erb +19 -0
  248. data/spec/support/test_app/app/views/basics5/index.html.haml +12 -0
  249. data/spec/support/test_app/app/views/basics6/_grid.html.erb +19 -0
  250. data/spec/support/test_app/app/views/basics6/index.html.haml +23 -0
  251. data/spec/support/test_app/app/views/blockless_column_definition/_grid.html.erb +19 -0
  252. data/spec/support/test_app/app/views/blockless_column_definition/index.html.haml +15 -0
  253. data/spec/support/test_app/app/views/buttons/_grid.html.erb +20 -0
  254. data/spec/support/test_app/app/views/buttons/index.html.haml +30 -0
  255. data/spec/support/test_app/app/views/csv_and_detached_filters/_grid.html.erb +23 -0
  256. data/spec/support/test_app/app/views/csv_and_detached_filters/index.html.haml +58 -0
  257. data/spec/support/test_app/app/views/csv_export/_projects_grid.html.erb +17 -0
  258. data/spec/support/test_app/app/views/csv_export/_tasks_grid.html.erb +43 -0
  259. data/spec/support/test_app/app/views/csv_export/index.html.haml +90 -0
  260. data/spec/support/test_app/app/views/custom_filter_params/_grid.html.erb +12 -0
  261. data/spec/support/test_app/app/views/custom_filter_params/index.html.haml +12 -0
  262. data/spec/support/test_app/app/views/custom_filters1/_g1.html.erb +8 -0
  263. data/spec/support/test_app/app/views/custom_filters1/_g2.html.erb +9 -0
  264. data/spec/support/test_app/app/views/custom_filters1/_g3.html.erb +9 -0
  265. data/spec/support/test_app/app/views/custom_filters1/_g4.html.erb +8 -0
  266. data/spec/support/test_app/app/views/custom_filters1/index.html.haml +30 -0
  267. data/spec/support/test_app/app/views/custom_filters2/_grid.html.erb +30 -0
  268. data/spec/support/test_app/app/views/custom_filters2/index.html.haml +41 -0
  269. data/spec/support/test_app/app/views/custom_filters3/_grid.html.erb +18 -0
  270. data/spec/support/test_app/app/views/custom_filters3/index.html.haml +16 -0
  271. data/spec/support/test_app/app/views/custom_filters4/_grid.html.erb +20 -0
  272. data/spec/support/test_app/app/views/custom_filters4/index.html.haml +12 -0
  273. data/spec/support/test_app/app/views/custom_ordering/_grid.html.erb +10 -0
  274. data/spec/support/test_app/app/views/custom_ordering/index.html.haml +24 -0
  275. data/spec/support/test_app/app/views/custom_ordering_on_calculated/_grid.html.erb +14 -0
  276. data/spec/support/test_app/app/views/custom_ordering_on_calculated/index.html.haml +23 -0
  277. data/spec/support/test_app/app/views/custom_ordering_with_arel/_grid.html.erb +10 -0
  278. data/spec/support/test_app/app/views/custom_ordering_with_arel/index.html.haml +24 -0
  279. data/spec/support/test_app/app/views/custom_ordering_with_proc/_grid.html.erb +10 -0
  280. data/spec/support/test_app/app/views/custom_ordering_with_proc/index.html.haml +21 -0
  281. data/spec/support/test_app/app/views/custom_ordering_with_ruby/_grid.html.erb +10 -0
  282. data/spec/support/test_app/app/views/custom_ordering_with_ruby/index.html.haml +23 -0
  283. data/spec/support/test_app/app/views/dates/_grid.html.erb +25 -0
  284. data/spec/support/test_app/app/views/dates/index.html.haml +52 -0
  285. data/spec/support/test_app/app/views/detached_filters/_grid.html.erb +23 -0
  286. data/spec/support/test_app/app/views/detached_filters/index.html.haml +79 -0
  287. data/spec/support/test_app/app/views/detached_filters_two_grids/_grid.html.erb +23 -0
  288. data/spec/support/test_app/app/views/detached_filters_two_grids/index.html.haml +85 -0
  289. data/spec/support/test_app/app/views/disable_all_filters/_grid.html.erb +21 -0
  290. data/spec/support/test_app/app/views/disable_all_filters/index.html.haml +14 -0
  291. data/spec/support/test_app/app/views/hiding_checkboxes_in_action_column/_grid.html.erb +34 -0
  292. data/spec/support/test_app/app/views/hiding_checkboxes_in_action_column/index.html.haml +32 -0
  293. data/spec/support/test_app/app/views/integration_with_application_view/_grid.html.erb +27 -0
  294. data/spec/support/test_app/app/views/integration_with_application_view/index.html.haml +33 -0
  295. data/spec/support/test_app/app/views/integration_with_forms/_grid.html.erb +23 -0
  296. data/spec/support/test_app/app/views/integration_with_forms/index.html.haml +18 -0
  297. data/spec/support/test_app/app/views/joining_tables/_grid.html.erb +23 -0
  298. data/spec/support/test_app/app/views/joining_tables/index.html.haml +26 -0
  299. data/spec/support/test_app/app/views/layouts/application.html.haml +61 -0
  300. data/spec/support/test_app/app/views/localization/_grid.html.erb +36 -0
  301. data/spec/support/test_app/app/views/localization/index.html.haml +20 -0
  302. data/spec/support/test_app/app/views/many_grids_on_page/_tasks_grid1.html.erb +12 -0
  303. data/spec/support/test_app/app/views/many_grids_on_page/_tasks_grid2.html.erb +12 -0
  304. data/spec/support/test_app/app/views/many_grids_on_page/index.html.haml +26 -0
  305. data/spec/support/test_app/app/views/negation/_grid.html.erb +30 -0
  306. data/spec/support/test_app/app/views/negation/index.html.haml +15 -0
  307. data/spec/support/test_app/app/views/no_records/_empty_grid.html.haml +1 -0
  308. data/spec/support/test_app/app/views/no_records/_grid1.html.erb +11 -0
  309. data/spec/support/test_app/app/views/no_records/_grid2.html.erb +9 -0
  310. data/spec/support/test_app/app/views/no_records/_grid3.html.erb +9 -0
  311. data/spec/support/test_app/app/views/no_records/index.html.haml +24 -0
  312. data/spec/support/test_app/app/views/null_values/_grid.html.erb +17 -0
  313. data/spec/support/test_app/app/views/null_values/index.html.haml +21 -0
  314. data/spec/support/test_app/app/views/numeric_filters/_grid.html.erb +19 -0
  315. data/spec/support/test_app/app/views/numeric_filters/index.html.haml +12 -0
  316. data/spec/support/test_app/app/views/resultset_processings/_grid.html.erb +27 -0
  317. data/spec/support/test_app/app/views/resultset_processings/index.html.haml +50 -0
  318. data/spec/support/test_app/app/views/resultset_processings2/_grid.html.erb +27 -0
  319. data/spec/support/test_app/app/views/resultset_processings2/index.html.haml +48 -0
  320. data/spec/support/test_app/app/views/saved_queries/_grid.html.erb +30 -0
  321. data/spec/support/test_app/app/views/saved_queries/index.html.haml +15 -0
  322. data/spec/support/test_app/app/views/styling/_grid1.html.erb +12 -0
  323. data/spec/support/test_app/app/views/styling/_grid2.html.erb +31 -0
  324. data/spec/support/test_app/app/views/styling/index.html.haml +65 -0
  325. data/spec/support/test_app/app/views/tasks/_grid.html.erb +19 -0
  326. data/spec/support/test_app/app/views/tasks/index.html.haml +1 -0
  327. data/spec/support/test_app/app/views/two_associations/_grid.html.erb +13 -0
  328. data/spec/support/test_app/app/views/two_associations/index.html.haml +13 -0
  329. data/spec/support/test_app/app/views/upper_pagination_panel/_grid.html.erb +27 -0
  330. data/spec/support/test_app/app/views/upper_pagination_panel/index.html.haml +14 -0
  331. data/spec/support/test_app/app/views/when_filtered/_grid.html.erb +19 -0
  332. data/spec/support/test_app/app/views/when_filtered/index.html.haml +15 -0
  333. data/spec/support/test_app/bin/rails +4 -0
  334. data/spec/support/test_app/bin/rake +4 -0
  335. data/spec/support/test_app/config.ru +5 -0
  336. data/spec/support/test_app/config/application.rb +70 -0
  337. data/spec/support/test_app/config/boot.rb +7 -0
  338. data/spec/support/test_app/config/database.travis.yml +27 -0
  339. data/spec/support/test_app/config/database.yml +16 -0
  340. data/spec/support/test_app/config/database.yml.mysql +19 -0
  341. data/spec/support/test_app/config/database.yml.postgresql +18 -0
  342. data/spec/support/test_app/config/environment.rb +6 -0
  343. data/spec/support/test_app/config/environments/development.rb +34 -0
  344. data/spec/support/test_app/config/environments/production.rb +66 -0
  345. data/spec/support/test_app/config/environments/test.rb +34 -0
  346. data/spec/support/test_app/config/initializers/backtrace_silencers.rb +8 -0
  347. data/spec/support/test_app/config/initializers/inflections.rb +16 -0
  348. data/spec/support/test_app/config/initializers/mime_types.rb +6 -0
  349. data/spec/support/test_app/config/initializers/secret_token.rb +12 -0
  350. data/spec/support/test_app/config/initializers/session_store.rb +9 -0
  351. data/spec/support/test_app/config/initializers/wice_grid_config.rb +163 -0
  352. data/spec/support/test_app/config/initializers/wrap_parameters.rb +15 -0
  353. data/spec/support/test_app/config/locales/en.yml +5 -0
  354. data/spec/support/test_app/config/locales/wice_grid.yml +550 -0
  355. data/spec/support/test_app/config/puma.rb +15 -0
  356. data/spec/support/test_app/config/routes.rb +125 -0
  357. data/spec/support/test_app/db/migrate/20120224193505_create_tasks.rb +27 -0
  358. data/spec/support/test_app/db/migrate/20120224193517_create_users.rb +12 -0
  359. data/spec/support/test_app/db/migrate/20120224193522_create_projects.rb +14 -0
  360. data/spec/support/test_app/db/migrate/20120224193529_create_priorities.rb +13 -0
  361. data/spec/support/test_app/db/migrate/20120224193537_create_statuses.rb +13 -0
  362. data/spec/support/test_app/db/migrate/20120224193543_create_versions.rb +15 -0
  363. data/spec/support/test_app/db/migrate/20120224193550_create_project_roles.rb +12 -0
  364. data/spec/support/test_app/db/migrate/20120224193610_create_companies.rb +12 -0
  365. data/spec/support/test_app/db/migrate/20120224195351_create_user_project_participations.rb +16 -0
  366. data/spec/support/test_app/db/migrate/20120224195521_add_tasks_users.rb +11 -0
  367. data/spec/support/test_app/db/migrate/20120610091944_create_wice_grid_serialized_queries.rb +14 -0
  368. data/spec/support/test_app/db/schema.rb +139 -0
  369. data/spec/support/test_app/db/seeds.rb +10 -0
  370. data/spec/support/test_app/lib/ar_fixtures.rb +100 -0
  371. data/spec/support/test_app/lib/assets/.gitkeep +0 -0
  372. data/spec/support/test_app/lib/tasks/.gitkeep +0 -0
  373. data/spec/support/test_app/lib/tasks/ar_fixtures.rake +45 -0
  374. data/spec/support/test_app/public/404.html +26 -0
  375. data/spec/support/test_app/public/422.html +26 -0
  376. data/spec/support/test_app/public/500.html +25 -0
  377. data/spec/support/test_app/public/favicon.ico +0 -0
  378. data/spec/support/test_app/public/robots.txt +5 -0
  379. data/spec/wice/grid_output_buffer_spec.rb +39 -0
  380. data/spec/wice/table_column_matrix_spec.rb +36 -0
  381. data/spec/wice/wice_grid_misc_spec.rb +157 -0
  382. data/spec/wice/wice_grid_spreadsheet_spec.rb +12 -0
  383. data/vendor/assets/javascripts/wice_grid.js +3 -0
  384. data/vendor/assets/javascripts/wice_grid_init.js.coffee +351 -0
  385. data/vendor/assets/javascripts/wice_grid_processor.js.coffee +133 -0
  386. data/vendor/assets/javascripts/wice_grid_saved_queries_init.js.coffee +104 -0
  387. data/vendor/assets/stylesheets/wice_grid.scss +81 -0
  388. data/wice_grid.gemspec +54 -0
  389. metadata +861 -0
@@ -0,0 +1,51 @@
1
+ module Wice
2
+ module Columns #:nodoc:
3
+ class ViewColumnAction < ViewColumn #:nodoc:
4
+ def initialize(grid_obj, html, param_name, select_all_buttons, object_property, html_check_box, view, block = nil) #:nodoc:
5
+ @view = view
6
+ @html_check_box = html_check_box
7
+ @select_all_buttons = select_all_buttons
8
+ self.grid = grid_obj
9
+ self.html = html
10
+ Wice::WgHash.add_or_append_class_value!(self.html, 'sel')
11
+ grid_name = self.grid.name
12
+ @param_name = param_name
13
+ @cell_rendering_block = lambda do |object, params|
14
+ if block && !block.call(object)
15
+ ''
16
+ else
17
+ selected = params[grid_name] && params[grid_name][param_name] && params[grid_name][param_name].index(object.send(object_property).to_s)
18
+ check_box_tag("#{grid_name}[#{param_name}][]", object.send(object_property), selected, id: nil)
19
+ end
20
+ end
21
+ end
22
+
23
+ def in_html #:nodoc:
24
+ true
25
+ end
26
+
27
+ def capable_of_hosting_filter_related_icons? #:nodoc:
28
+ false
29
+ end
30
+
31
+ def name #:nodoc:
32
+ return '' unless @select_all_buttons
33
+
34
+ if @html_check_box
35
+ check_box_tag :select_all, 1, false, class: 'wg-select-all'
36
+ else
37
+ content_tag(:div,
38
+ content_tag(:i, '', class: 'fa fa-check-square-o'),
39
+ class: 'clickable select-all',
40
+ title: NlMessage['select_all']) + ' ' +
41
+ content_tag(:div,
42
+ content_tag(:i, '', class: 'fa fa-square-o'),
43
+ class: 'clickable deselect-all',
44
+ title: NlMessage['deselect_all'])
45
+ end
46
+ end
47
+ end
48
+
49
+ ConditionsGeneratorColumnAction = ConditionsGeneratorColumn #:nodoc:
50
+ end
51
+ end
@@ -0,0 +1,39 @@
1
+ module Wice
2
+ module Columns #:nodoc:
3
+ class ViewColumnBoolean < ViewColumnCustomDropdown #:nodoc:
4
+ include ActionView::Helpers::FormOptionsHelper
5
+
6
+ # Text for the true value
7
+ attr_accessor :boolean_filter_true_label
8
+
9
+ # Text for the false value
10
+ attr_accessor :boolean_filter_false_label
11
+
12
+ def render_filter_internal(params) #:nodoc:
13
+ @custom_filter = {
14
+ @filter_all_label => nil,
15
+ @boolean_filter_true_label => 't',
16
+ @boolean_filter_false_label => 'f'
17
+ }
18
+
19
+ @turn_off_select_toggling = true
20
+ super(params)
21
+ end
22
+ end
23
+
24
+ class ConditionsGeneratorColumnBoolean < ConditionsGeneratorColumn #:nodoc:
25
+ def generate_conditions(table_alias, opts) #:nodoc:
26
+ unless opts.is_a?(Array) && opts.size == 1
27
+ Wice.log "invalid parameters for the grid boolean filter - must be an one item array: #{opts.inspect}"
28
+ return false
29
+ end
30
+ opts = opts[0]
31
+ if opts == 'f'
32
+ [" (#{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ? or #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is null) ", false]
33
+ elsif opts == 't'
34
+ [" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ?", true]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,47 @@
1
+ module Wice
2
+ module Columns #:nodoc:
3
+ class ViewColumnBootstrapDatepicker < ViewColumn #:nodoc:
4
+
5
+ include Wice::BsCalendarHelpers
6
+ include Wice::Columns::CommonDateDatetimeMixin
7
+ include Wice::Columns::CommonJsDateDatetimeMixin
8
+
9
+ def do_render(params) #:nodoc:
10
+ calendar_data_from = prepare_data_for_bscalendar(
11
+ initial_date: params[:fr],
12
+ name: @name1,
13
+ fire_event: auto_reload,
14
+ grid_name: self.grid.name
15
+ )
16
+
17
+ calendar_data_to = prepare_data_for_bscalendar(
18
+ initial_date: params[:to],
19
+ name: @name2,
20
+ fire_event: auto_reload,
21
+ grid_name: self.grid.name
22
+ )
23
+
24
+ calendar_data_from.the_other_datepicker_id_to = calendar_data_to.dom_id
25
+ calendar_data_to.the_other_datepicker_id_from = calendar_data_from.dom_id
26
+
27
+ html1 = date_calendar_bs calendar_data_from
28
+
29
+ html2 = date_calendar_bs calendar_data_to
30
+
31
+ %(<div class="date-filter wg-bootstrap-datepicker">#{html1}#{html2}</div>)
32
+ end
33
+
34
+
35
+ def has_auto_reloading_calendar? #:nodoc:
36
+ auto_reload
37
+ end
38
+
39
+ end
40
+
41
+ class ConditionsGeneratorColumnBootstrapDatepicker < ConditionsGeneratorColumn #:nodoc:
42
+
43
+ include Wice::Columns::CommonJsDateDatetimeConditionsGeneratorMixin
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,114 @@
1
+ module Wice
2
+ module Columns #:nodoc:
3
+ class ViewColumnCustomDropdown < ViewColumn #:nodoc:
4
+ include ActionView::Helpers::FormOptionsHelper
5
+
6
+ # text in the filter dropdown for an empty <option><option>
7
+ attr_accessor :filter_all_label
8
+
9
+ # contains an array of option label + option value pairs for the select, or a Proc object which returns this array
10
+ attr_accessor :custom_filter
11
+
12
+ def render_filter_internal(params) #:nodoc:
13
+ @query, @query_without_equals_sign, @parameter_name, @dom_id = form_parameter_name_id_and_query('')
14
+ @query_without_equals_sign += '%5B%5D='
15
+
16
+ @custom_filter = @custom_filter.call if @custom_filter.is_a? Proc
17
+
18
+ if @custom_filter.is_a? Array
19
+ @custom_filter = [[@filter_all_label, nil]] + @custom_filter.map do|label, value|
20
+ [label.to_s, value.to_s]
21
+ end
22
+ end
23
+
24
+ select_options = { name: @parameter_name + '[]', id: @dom_id, class: 'custom-dropdown form-control' }
25
+
26
+ if @turn_off_select_toggling
27
+ select_toggle = ''
28
+ else
29
+ if self.allow_multiple_selection
30
+ select_options[:multiple] = params.is_a?(Array) && params.size > 1
31
+
32
+ expand_icon_style, collapse_icon_style = nil, 'display: none'
33
+ expand_icon_style, collapse_icon_style = collapse_icon_style, expand_icon_style if select_options[:multiple]
34
+
35
+ select_toggle = content_tag(
36
+ :span,
37
+ content_tag(:i, '', class: 'fa fa-plus'),
38
+ title: NlMessage['expand'],
39
+ class: 'expand-multi-select-icon clickable',
40
+ style: expand_icon_style
41
+ ) +
42
+ content_tag(
43
+ :span,
44
+ content_tag(:i, '', class: 'fa fa-minus'),
45
+ title: NlMessage['collapse'],
46
+ class: 'collapse-multi-select-icon clickable',
47
+ style: collapse_icon_style
48
+ )
49
+ else
50
+ select_options[:multiple] = false
51
+ select_toggle = ''
52
+ end
53
+ end
54
+
55
+ if auto_reload
56
+ select_options[:class] += ' auto-reload'
57
+ end
58
+
59
+ params_for_select = (params.is_a?(Hash) && params.empty?) ? [nil] : params
60
+
61
+ '<div class="custom-dropdown-container">'.html_safe +
62
+ content_tag(:select,
63
+ options_for_select(@custom_filter, params_for_select),
64
+ select_options) + select_toggle.html_safe + '</div>'.html_safe
65
+ end
66
+
67
+ def yield_declaration_of_column_filter #:nodoc:
68
+ {
69
+ templates: [@query_without_equals_sign],
70
+ ids: [@dom_id]
71
+ }
72
+ end
73
+
74
+ def has_auto_reloading_select? #:nodoc:
75
+ auto_reload
76
+ end
77
+ end
78
+
79
+ class ConditionsGeneratorColumnCustomDropdown < ConditionsGeneratorColumn #:nodoc:
80
+ def generate_conditions(table_alias, opts) #:nodoc:
81
+ if opts.empty? || (opts.is_a?(Array) && opts.size == 1 && opts[0].blank?)
82
+ return false
83
+ end
84
+ opts = (opts.is_a?(Array) && opts.size == 1) ? opts[0] : opts
85
+
86
+ if opts.is_a?(Array)
87
+ opts_with_special_values, normal_opts = opts.partition { |v| ::Wice::GridTools.special_value(v) }
88
+
89
+ conditions_ar = if normal_opts.size > 0
90
+ [" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} IN ( " + (['?'] * normal_opts.size).join(', ') + ' )'] + normal_opts
91
+ else
92
+ []
93
+ end
94
+
95
+ if opts_with_special_values.size > 0
96
+ special_conditions = opts_with_special_values.collect { |v| " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is " + v }.join(' or ')
97
+ if conditions_ar.size > 0
98
+ conditions_ar[0] = " (#{conditions_ar[0]} or #{special_conditions} ) "
99
+ else
100
+ conditions_ar = " ( #{special_conditions} ) "
101
+ end
102
+ end
103
+ conditions_ar
104
+ else
105
+ if ::Wice::GridTools.special_value(opts)
106
+ " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is " + opts
107
+ else
108
+ [" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ?", opts]
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,8 @@
1
+ module Wice #:nodoc:
2
+ module Columns #:nodoc:
3
+ class ViewColumnFloat < ViewColumnInteger #:nodoc:
4
+ end
5
+
6
+ ConditionsGeneratorColumnFloat = ConditionsGeneratorColumnInteger #:nodoc:
7
+ end
8
+ end
@@ -0,0 +1,30 @@
1
+ module Wice
2
+ module Columns #:nodoc:
3
+ class ViewColumnHtml5Datepicker < ViewColumn #:nodoc:
4
+
5
+ include Wice::Columns::CommonDateDatetimeMixin
6
+ include Wice::Columns::CommonJsDateDatetimeMixin
7
+
8
+ def do_render(params) #:nodoc:
9
+ css_class = 'form-control input-sm native-datepicker ' + (auto_reload ? 'auto-reload' : '')
10
+ date_format = Wice::ConfigurationProvider.value_for(:DATE_FORMAT)
11
+ '<div class="date-filter wg-html5-datepicker">' +
12
+ date_field_tag(@name1, params[:fr].try(:strftime, date_format), class: css_class, id: @dom_id) + '<br/>' +
13
+ date_field_tag(@name2, params[:to].try(:strftime, date_format), class: css_class, id: @dom_id2) +
14
+ '</div>'
15
+ end
16
+
17
+ def has_auto_reloading_calendar? #:nodoc:
18
+ # To be implemented
19
+ false
20
+ end
21
+
22
+ end
23
+
24
+ class ConditionsGeneratorColumnHtml5Datepicker < ConditionsGeneratorColumn #:nodoc:
25
+
26
+ include Wice::Columns::CommonJsDateDatetimeConditionsGeneratorMixin
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,87 @@
1
+ module Wice
2
+ module Columns #:nodoc:
3
+ class ViewColumnInteger < ViewColumn #:nodoc:
4
+ def render_filter_internal(params) #:nodoc:
5
+ @contains_a_text_input = true
6
+
7
+ @query, _, parameter_name, @dom_id = form_parameter_name_id_and_query(eq: '')
8
+
9
+ opts = { size: 3, id: @dom_id, class: 'range-start' }
10
+
11
+ opts[:class] += ' form-control input-sm'
12
+
13
+ if auto_reload
14
+ opts[:class] += ' auto-reload'
15
+ end
16
+
17
+ text_field_tag(parameter_name, params[:eq], opts)
18
+ end
19
+
20
+ def yield_declaration_of_column_filter #:nodoc:
21
+ {
22
+ templates: [@query],
23
+ ids: [@dom_id]
24
+ }
25
+ end
26
+
27
+ def has_auto_reloading_input? #:nodoc:
28
+ auto_reload
29
+ end
30
+ end
31
+
32
+ class ConditionsGeneratorColumnInteger < ConditionsGeneratorColumn #:nodoc:
33
+ # Note: also used in ColumnRange, hence class method
34
+ def self.get_value(val) #:nodoc:
35
+ # Try to determine localized separator using I18n and replace it with default one
36
+ separator = I18n.t!('number.format.separator') rescue nil
37
+ val = val.sub(separator, '.') if val.respond_to?(:sub) && separator
38
+
39
+ # Parse as float
40
+ Float(val) rescue nil
41
+ end
42
+
43
+ def get_op_and_value(val) #:nodoc:
44
+ num = nil
45
+ op = nil
46
+
47
+ # remove spaces
48
+ val = val.gsub(' ', '')
49
+
50
+ start_of_num = val =~ /[0-9.-]/ # first digit, dot or negative sign
51
+ if start_of_num
52
+ op = val[0...start_of_num]
53
+ op = '=' if op == ''
54
+ num = ConditionsGeneratorColumnInteger.get_value(val[start_of_num..-1])
55
+
56
+ op = nil unless ['<', '>', '<=', '>=', '='].include?(op)
57
+ end
58
+ [op, num]
59
+ end
60
+
61
+ def generate_conditions(table_alias, opts) #:nodoc:
62
+ unless opts.is_a? Hash
63
+ Wice.log 'invalid parameters for the grid integer filter - must be a hash'
64
+ return false
65
+ end
66
+ conditions = [[]]
67
+ if opts[:eq]
68
+ op, num = get_op_and_value(opts[:eq])
69
+ if op && num
70
+ conditions[0] << " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} " + op + ' ? '
71
+ conditions << num
72
+ else
73
+ opts.delete(:eq)
74
+ end
75
+ end
76
+
77
+ if conditions.size == 1
78
+ return false
79
+ end
80
+
81
+ conditions[0] = conditions[0].join(' and ')
82
+
83
+ conditions
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,48 @@
1
+ module Wice
2
+ module Columns #:nodoc:
3
+ class ViewColumnJqueryDatepicker < ViewColumn #:nodoc:
4
+
5
+ include Wice::JsCalendarHelpers
6
+ include Wice::Columns::CommonDateDatetimeMixin
7
+ include Wice::Columns::CommonJsDateDatetimeMixin
8
+
9
+ def do_render(params) #:nodoc:
10
+ calendar_data_from = prepare_data_for_calendar(
11
+ initial_date: params[:fr],
12
+ title: NlMessage['date_selector_tooltip_from'],
13
+ name: @name1,
14
+ fire_event: auto_reload,
15
+ grid_name: self.grid.name
16
+ )
17
+
18
+ calendar_data_to = prepare_data_for_calendar(
19
+ initial_date: params[:to],
20
+ title: NlMessage['date_selector_tooltip_to'],
21
+ name: @name2,
22
+ fire_event: auto_reload,
23
+ grid_name: self.grid.name
24
+ )
25
+
26
+ calendar_data_from.the_other_datepicker_id_to = calendar_data_to.dom_id
27
+ calendar_data_to.the_other_datepicker_id_from = calendar_data_from.dom_id
28
+
29
+ html1 = date_calendar_jquery calendar_data_from
30
+
31
+ html2 = date_calendar_jquery calendar_data_to
32
+
33
+ %(<div class="date-filter wg-jquery-datepicker">#{html1}<br/>#{html2}</div>)
34
+ end
35
+
36
+ def has_auto_reloading_calendar? #:nodoc:
37
+ auto_reload
38
+ end
39
+
40
+ end
41
+
42
+ class ConditionsGeneratorColumnJqueryDatepicker < ConditionsGeneratorColumn #:nodoc:
43
+
44
+ include Wice::Columns::CommonJsDateDatetimeConditionsGeneratorMixin
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,22 @@
1
+ module Wice #:nodoc:
2
+ module Columns #:nodoc:
3
+ require 'active_support'
4
+
5
+ COLUMN_PROCESSOR_INDEX = ActiveSupport::OrderedHash[ #:nodoc:
6
+ :action, 'column_action', # Special processor for action column, columns with checkboxes
7
+ :text, 'column_string',
8
+ :string, 'column_string',
9
+ :rails_datetime_helper, 'column_rails_datetime_helper', # standard Rails datepicker helper
10
+ :rails_date_helper, 'column_rails_date_helper', # standard Rails date helper
11
+ :jquery_datepicker, 'column_jquery_datepicker',
12
+ :bootstrap_datepicker, 'column_bootstrap_datepicker',
13
+ :html5_datepicker, 'column_html5_datepicker', # not ready
14
+ :integer, 'column_integer',
15
+ :range, 'column_range',
16
+ :float, 'column_float',
17
+ :decimal, 'column_float',
18
+ :custom, 'column_custom_dropdown', # Special processor for custom filter columns
19
+ :boolean, 'column_boolean'
20
+ ]
21
+ end
22
+ end