decidim 0.0.8.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim might be problematic. Click here for more details.

Files changed (292) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -21
  3. data/.codeclimate.yml +10 -6
  4. data/.eslintignore +1 -0
  5. data/.gitignore +1 -1
  6. data/.rubocop.yml +38 -20
  7. data/.travis.yml +0 -1
  8. data/Gemfile +6 -9
  9. data/Gemfile.lock +165 -205
  10. data/Rakefile +1 -1
  11. data/codecov.yml +5 -71
  12. data/crowdin.yaml +1 -1
  13. data/decidim-admin/app/assets/stylesheets/decidim/admin/_decidim.scss +9 -2
  14. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_action-icon.scss +7 -0
  15. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_cards.scss +6 -0
  16. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_editor.scss +1 -0
  17. data/decidim-admin/app/assets/stylesheets/decidim/admin/{_sidebar.scss → extra/_sidebar.scss} +0 -0
  18. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_action-icon.scss +23 -0
  19. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_cards.scss +0 -7
  20. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_icons.scss +4 -2
  21. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_modules.scss +0 -1
  22. data/decidim-admin/app/assets/stylesheets/decidim/admin/{modules/_datepicker.scss → plugins/_foundation-datepicker.scss} +1 -1
  23. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/_constants.scss +5 -0
  24. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/_math.scss +45 -0
  25. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_acos.scss +12 -0
  26. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_asin.scss +12 -0
  27. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_atan.scss +28 -0
  28. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_atan2.scss +37 -0
  29. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_cos.scss +13 -0
  30. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_cot.scss +9 -0
  31. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_csc.scss +9 -0
  32. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_exp.scss +12 -0
  33. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_fact.scss +18 -0
  34. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_frexp.scss +21 -0
  35. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_ldexp.scss +17 -0
  36. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_log.scss +34 -0
  37. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_pow.scss +28 -0
  38. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_sec.scss +9 -0
  39. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_sin.scss +9 -0
  40. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_sqrt.scss +16 -0
  41. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_tan.scss +9 -0
  42. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_deg-to-rad.scss +4 -0
  43. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_rad-to-deg.scss +4 -0
  44. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_strip-unit.scss +8 -0
  45. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_unitless-rad.scss +13 -0
  46. data/decidim-admin/app/commands/decidim/admin/create_participatory_process.rb +23 -17
  47. data/decidim-admin/app/commands/decidim/admin/create_participatory_process_group.rb +1 -1
  48. data/decidim-admin/app/controllers/decidim/admin/moderations_controller.rb +4 -4
  49. data/decidim-admin/app/controllers/decidim/admin/participatory_processes_controller.rb +1 -1
  50. data/decidim-admin/app/forms/decidim/admin/organization_form.rb +6 -2
  51. data/decidim-admin/app/forms/decidim/admin/participatory_process_form.rb +5 -0
  52. data/decidim-admin/app/helpers/decidim/admin/application_helper.rb +1 -1
  53. data/decidim-admin/app/helpers/decidim/admin/attributes_display_helper.rb +1 -1
  54. data/decidim-admin/app/views/decidim/admin/features/_feature.html.erb +5 -1
  55. data/decidim-admin/app/views/decidim/admin/moderations/_report.html.erb +11 -0
  56. data/decidim-admin/app/views/decidim/admin/moderations/index.html.erb +22 -24
  57. data/decidim-admin/app/views/layouts/decidim/admin/participatory_process.html.erb +3 -0
  58. data/decidim-admin/config/i18n-tasks.yml +1 -0
  59. data/decidim-admin/config/locales/ca.yml +7 -3
  60. data/decidim-admin/config/locales/en.yml +6 -2
  61. data/decidim-admin/config/locales/es.yml +7 -3
  62. data/decidim-admin/config/locales/eu.yml +4 -3
  63. data/decidim-admin/config/locales/fi.yml +4 -3
  64. data/decidim-admin/config/locales/fr.yml +389 -2
  65. data/decidim-admin/config/locales/nl.yml +4 -1
  66. data/decidim-admin/decidim-admin.gemspec +3 -3
  67. data/decidim-admin/lib/decidim/admin/test/manage_attachments_examples.rb +2 -2
  68. data/decidim-admin/spec/commands/activate_participatory_process_step_spec.rb +1 -0
  69. data/decidim-admin/spec/commands/create_category_spec.rb +1 -1
  70. data/decidim-admin/spec/commands/create_feature_spec.rb +7 -5
  71. data/decidim-admin/spec/commands/create_participatory_process_admin_spec.rb +2 -1
  72. data/decidim-admin/spec/commands/create_participatory_process_spec.rb +14 -6
  73. data/decidim-admin/spec/commands/create_scope_spec.rb +3 -2
  74. data/decidim-admin/spec/commands/deactivate_participatory_process_step_spec.rb +1 -0
  75. data/decidim-admin/spec/commands/destroy_feature_spec.rb +1 -0
  76. data/decidim-admin/spec/commands/destroy_participatory_process_step_spec.rb +1 -0
  77. data/decidim-admin/spec/commands/publish_participatory_process_spec.rb +1 -0
  78. data/decidim-admin/spec/commands/reorder_participatory_process_steps_spec.rb +1 -0
  79. data/decidim-admin/spec/commands/unpublish_participatory_process_spec.rb +1 -0
  80. data/decidim-admin/spec/commands/update_feature_spec.rb +7 -5
  81. data/decidim-admin/spec/commands/update_participatory_process_spec.rb +5 -5
  82. data/decidim-admin/spec/commands/update_scope_spec.rb +3 -2
  83. data/decidim-admin/spec/factories.rb +1 -0
  84. data/decidim-admin/spec/features/admin_invite_spec.rb +5 -5
  85. data/decidim-admin/spec/features/admin_manages_newsletters_spec.rb +5 -5
  86. data/decidim-admin/spec/features/admin_manages_organization_admins_spec.rb +2 -2
  87. data/decidim-admin/spec/features/admin_manages_organization_scopes_spec.rb +3 -3
  88. data/decidim-admin/spec/features/admin_manages_organization_spec.rb +7 -11
  89. data/decidim-admin/spec/features/admin_manages_participatory_process_groups_spec.rb +2 -2
  90. data/decidim-admin/spec/features/admin_manages_participatory_processes_spec.rb +3 -3
  91. data/decidim-admin/spec/features/static_pages_spec.rb +8 -7
  92. data/decidim-admin/spec/forms/newsletter_form_spec.rb +2 -2
  93. data/decidim-admin/spec/forms/organization_form_spec.rb +3 -3
  94. data/decidim-admin/spec/forms/participatory_process_form_spec.rb +4 -4
  95. data/decidim-admin/spec/forms/participatory_process_step_form_spec.rb +1 -1
  96. data/decidim-admin/spec/forms/participatory_process_user_role_form_spec.rb +1 -1
  97. data/decidim-admin/spec/forms/scope_form_spec.rb +1 -1
  98. data/decidim-admin/spec/helpers/aria_selected_link_to_helper_spec.rb +1 -0
  99. data/decidim-admin/spec/helpers/feature_settings_helper_spec.rb +1 -0
  100. data/decidim-admin/spec/jobs/newsletter_delivery_job_spec.rb +2 -2
  101. data/decidim-admin/spec/queries/process_admins_spec.rb +1 -1
  102. data/decidim-admin/spec/shared/manage_process_admins_examples.rb +2 -2
  103. data/decidim-admin/spec/shared/manage_process_categories_examples.rb +3 -3
  104. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +5 -5
  105. data/decidim-admin/spec/shared/manage_processes_examples.rb +4 -4
  106. data/decidim-admin/spec/shared/participatory_admin_shared_context.rb +1 -0
  107. data/decidim-admin/spec/spec_helper.rb +1 -0
  108. data/decidim-admin/spec/views/decidim/static_pages/_form.html.erb_spec.rb +1 -0
  109. data/decidim-api/app/controllers/decidim/api/application_controller.rb +1 -1
  110. data/decidim-api/decidim-api.gemspec +1 -1
  111. data/decidim-api/spec/factories.rb +1 -0
  112. data/decidim-api/spec/spec_helper.rb +1 -0
  113. data/decidim-budgets/app/queries/decidim/budgets/filtered_projects.rb +36 -0
  114. data/decidim-budgets/config/locales/ca.yml +1 -0
  115. data/decidim-budgets/config/locales/en.yml +1 -0
  116. data/decidim-budgets/config/locales/es.yml +1 -0
  117. data/decidim-budgets/config/locales/fr.yml +35 -3
  118. data/decidim-budgets/decidim-budgets.gemspec +2 -2
  119. data/decidim-budgets/lib/decidim/budgets/feature.rb +9 -0
  120. data/decidim-budgets/spec/commands/add_line_item_spec.rb +6 -9
  121. data/decidim-budgets/spec/commands/cancel_order_spec.rb +3 -1
  122. data/decidim-budgets/spec/commands/checkout_spec.rb +3 -1
  123. data/decidim-budgets/spec/commands/create_project_spec.rb +4 -3
  124. data/decidim-budgets/spec/commands/remove_line_item_spec.rb +2 -1
  125. data/decidim-budgets/spec/commands/update_project_spec.rb +4 -3
  126. data/decidim-budgets/spec/factories.rb +1 -0
  127. data/decidim-budgets/spec/features/orders_spec.rb +24 -24
  128. data/decidim-budgets/spec/forms/project_form_spec.rb +1 -0
  129. data/decidim-budgets/spec/models/project_spec.rb +1 -1
  130. data/decidim-budgets/spec/queries/decidim/budgets/filtered_projects_spec.rb +21 -0
  131. data/decidim-budgets/spec/services/project_search_spec.rb +4 -3
  132. data/decidim-budgets/spec/shared/admin_shared_context.rb +1 -0
  133. data/decidim-budgets/spec/shared/manage_attachments_examples.rb +1 -0
  134. data/decidim-budgets/spec/spec_helper.rb +1 -0
  135. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  136. data/decidim-comments/app/commands/decidim/comments/create_comment.rb +8 -2
  137. data/decidim-comments/app/frontend/application/application.component.tsx +3 -3
  138. data/decidim-comments/app/frontend/application/icon.component.tsx +1 -1
  139. data/decidim-comments/app/frontend/comments/add_comment_form.component.tsx +7 -7
  140. data/decidim-comments/app/frontend/comments/comment.component.test.tsx +7 -7
  141. data/decidim-comments/app/frontend/comments/comment.component.tsx +6 -6
  142. data/decidim-comments/app/frontend/comments/comment_thread.component.tsx +2 -2
  143. data/decidim-comments/app/frontend/comments/comments.component.test.tsx +5 -5
  144. data/decidim-comments/app/frontend/comments/comments.component.tsx +6 -6
  145. data/decidim-comments/app/frontend/comments/down_vote_button.component.test.tsx +4 -4
  146. data/decidim-comments/app/frontend/comments/down_vote_button.component.tsx +3 -3
  147. data/decidim-comments/app/frontend/comments/up_vote_button.component.test.tsx +4 -4
  148. data/decidim-comments/app/frontend/comments/up_vote_button.component.tsx +3 -3
  149. data/decidim-comments/app/frontend/comments/vote_button.component.tsx +1 -1
  150. data/decidim-comments/app/frontend/comments/vote_button_component.test.tsx +2 -2
  151. data/decidim-comments/app/frontend/entry.ts +2 -2
  152. data/decidim-comments/app/frontend/support/generate_comments_data.ts +2 -2
  153. data/decidim-comments/app/frontend/support/load_translations.ts +2 -2
  154. data/decidim-comments/app/frontend/support/resolve_graphql_query.ts +1 -1
  155. data/decidim-comments/app/mailers/decidim/comments/comment_notification_mailer.rb +1 -1
  156. data/decidim-comments/app/models/decidim/comments/comment.rb +3 -8
  157. data/decidim-comments/app/models/decidim/comments/seed.rb +1 -0
  158. data/decidim-comments/config/locales/fr.yml +62 -1
  159. data/decidim-comments/db/migrate/20170504085413_add_root_commentable_to_comments.rb +7 -0
  160. data/decidim-comments/db/migrate/20170510091348_update_root_commentable_for_comments.rb +22 -0
  161. data/decidim-comments/db/migrate/20170510091409_set_root_commentable_null_constraints.rb +6 -0
  162. data/decidim-comments/db/seeds.rb +4 -2
  163. data/decidim-comments/lib/decidim/comments/engine.rb +8 -0
  164. data/decidim-comments/lib/decidim/comments/test/factories.rb +1 -0
  165. data/decidim-comments/spec/commands/create_comment_spec.rb +13 -6
  166. data/decidim-comments/spec/commands/vote_comment_spec.rb +2 -6
  167. data/decidim-comments/spec/factories.rb +1 -0
  168. data/decidim-comments/spec/features/notifications_spec.rb +4 -4
  169. data/decidim-comments/spec/features/process_admin_manages_comments_spec.rb +1 -1
  170. data/decidim-comments/spec/features/report_comment_spec.rb +4 -2
  171. data/decidim-comments/spec/helpers/comments_helper_spec.rb +3 -3
  172. data/decidim-comments/spec/mailers/comment_notification_mailer_spec.rb +2 -1
  173. data/decidim-comments/spec/models/comment_spec.rb +5 -9
  174. data/decidim-comments/spec/models/comment_vote_spec.rb +3 -3
  175. data/decidim-comments/spec/models/seed_spec.rb +1 -1
  176. data/decidim-comments/spec/queries/sorted_comments_spec.rb +5 -5
  177. data/decidim-comments/spec/shared/admin_shared_context.rb +1 -0
  178. data/decidim-comments/spec/spec_helper.rb +1 -0
  179. data/decidim-comments/spec/types/comment_mutation_type_spec.rb +4 -12
  180. data/decidim-comments/spec/types/comment_type_spec.rb +4 -5
  181. data/decidim-comments/spec/types/commentable_mutation_type_spec.rb +2 -2
  182. data/decidim-comments/spec/types/mutation_type_spec.rb +4 -6
  183. data/decidim-comments/spec/types/query_type_spec.rb +1 -1
  184. data/decidim-dev/decidim-dev.gemspec +6 -6
  185. data/decidim-dev/lib/decidim/dev/common_rake.rb +5 -1
  186. data/decidim-dev/lib/decidim/dev/railtie.rb +1 -0
  187. data/decidim-dev/lib/decidim/dev/test/base_spec_helper.rb +0 -2
  188. data/decidim-dev/lib/decidim/dev/test/rspec_support/geocoder.rb +4 -3
  189. data/decidim-dev/lib/decidim/dev/test/rspec_support/i18n.rb +2 -2
  190. data/decidim-dev/lib/decidim/dev/test/rspec_support/webmock.rb +1 -0
  191. data/decidim-dev/lib/generators/decidim/dummy_generator.rb +1 -1
  192. data/decidim-dev/lib/generators/decidim/templates/autoprefixer_initializer.rb +4 -3
  193. data/decidim-dev/lib/tasks/test_app.rake +1 -0
  194. data/decidim-meetings/app/controllers/decidim/meetings/meeting_widgets_controller.rb +1 -0
  195. data/decidim-meetings/app/controllers/decidim/meetings/meetings_controller.rb +8 -8
  196. data/decidim-meetings/app/helpers/decidim/meetings/map_helper.rb +9 -9
  197. data/decidim-meetings/app/models/decidim/meetings/meeting.rb +1 -1
  198. data/decidim-meetings/app/views/decidim/meetings/meeting_widgets/show.html.erb +8 -17
  199. data/decidim-meetings/config/locales/fr.yml +95 -1
  200. data/decidim-meetings/lib/decidim/meetings/feature.rb +7 -0
  201. data/decidim-meetings/spec/commands/close_meeting_spec.rb +2 -1
  202. data/decidim-meetings/spec/commands/create_meeting_spec.rb +6 -5
  203. data/decidim-meetings/spec/commands/update_meeting_spec.rb +6 -5
  204. data/decidim-meetings/spec/factories.rb +1 -0
  205. data/decidim-meetings/spec/features/explore_meetings_spec.rb +2 -1
  206. data/decidim-meetings/spec/forms/close_meeting_form_spec.rb +1 -0
  207. data/decidim-meetings/spec/forms/meeting_form_spec.rb +5 -3
  208. data/decidim-meetings/spec/services/meeting_search_spec.rb +3 -2
  209. data/decidim-meetings/spec/shared/admin_shared_context.rb +1 -0
  210. data/decidim-meetings/spec/shared/manage_attachments_examples.rb +1 -1
  211. data/decidim-meetings/spec/shared/manage_meetings_examples.rb +21 -20
  212. data/decidim-meetings/spec/spec_helper.rb +1 -0
  213. data/decidim-pages/config/locales/fr.yml +18 -1
  214. data/decidim-pages/decidim-pages.gemspec +1 -1
  215. data/decidim-pages/lib/decidim/pages/feature.rb +7 -0
  216. data/decidim-pages/spec/commands/create_page_spec.rb +1 -3
  217. data/decidim-pages/spec/factories.rb +1 -0
  218. data/decidim-pages/spec/spec_helper.rb +1 -0
  219. data/decidim-proposals/app/commands/decidim/proposals/create_proposal_export.rb +36 -0
  220. data/decidim-proposals/app/controllers/decidim/proposals/admin/exports_controller.rb +24 -0
  221. data/decidim-proposals/app/controllers/decidim/proposals/proposal_votes_controller.rb +3 -1
  222. data/decidim-proposals/app/controllers/decidim/proposals/proposal_widgets_controller.rb +0 -5
  223. data/decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb +0 -1
  224. data/decidim-proposals/app/jobs/decidim/proposals/export_job.rb +21 -0
  225. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +1 -1
  226. data/decidim-proposals/app/queries/decidim/proposals/filtered_proposals.rb +36 -0
  227. data/decidim-proposals/app/services/decidim/proposals/proposal_serializer.rb +72 -0
  228. data/decidim-proposals/app/views/decidim/proposals/admin/proposals/index.html.erb +15 -3
  229. data/decidim-proposals/app/views/decidim/proposals/proposal_widgets/show.html.erb +4 -25
  230. data/decidim-proposals/config/locales/ca.yml +4 -0
  231. data/decidim-proposals/config/locales/en.yml +6 -1
  232. data/decidim-proposals/config/locales/es.yml +4 -0
  233. data/decidim-proposals/config/locales/fr.yml +146 -1
  234. data/decidim-proposals/decidim-proposals.gemspec +2 -2
  235. data/decidim-proposals/lib/decidim/proposals/admin_engine.rb +5 -0
  236. data/decidim-proposals/lib/decidim/proposals/feature.rb +14 -0
  237. data/decidim-proposals/spec/factories.rb +1 -0
  238. data/decidim-proposals/spec/features/admin_manages_proposals_spec.rb +1 -0
  239. data/decidim-proposals/spec/features/process_admin_manages_proposals_spec.rb +1 -0
  240. data/decidim-proposals/spec/features/proposals_spec.rb +29 -28
  241. data/decidim-proposals/spec/features/report_proposal_spec.rb +2 -2
  242. data/decidim-proposals/spec/features/vote_proposal_spec.rb +36 -32
  243. data/decidim-proposals/spec/helpers/proposal_order_helper_spec.rb +3 -3
  244. data/decidim-proposals/spec/jobs/export_job_spec.rb +57 -0
  245. data/decidim-proposals/spec/lib/decidim/proposals/feature_spec.rb +1 -0
  246. data/decidim-proposals/spec/models/decidim/proposals/proposal_vote_spec.rb +3 -3
  247. data/decidim-proposals/spec/queries/decidim/proposals/filtered_proposals_spec.rb +21 -0
  248. data/decidim-proposals/spec/services/decidim/proposals/proposal_search_spec.rb +12 -12
  249. data/decidim-proposals/spec/services/decidim/proposals/proposal_serializer_spec.rb +71 -0
  250. data/decidim-proposals/spec/shared/admin_shared_context.rb +1 -0
  251. data/decidim-proposals/spec/shared/create_proposal_examples.rb +4 -3
  252. data/decidim-proposals/spec/shared/export_proposals_examples.rb +37 -0
  253. data/decidim-proposals/spec/shared/manage_proposals_examples.rb +12 -11
  254. data/decidim-proposals/spec/shared/proposal_form_examples.rb +9 -8
  255. data/decidim-proposals/spec/spec_helper.rb +1 -0
  256. data/decidim-results/app/controllers/decidim/results/result_widgets_controller.rb +1 -0
  257. data/decidim-results/app/controllers/decidim/results/results_controller.rb +1 -1
  258. data/decidim-results/app/queries/decidim/results/filtered_results.rb +36 -0
  259. data/decidim-results/app/services/decidim/results/result_stats_calculator.rb +1 -1
  260. data/decidim-results/app/views/decidim/results/result_widgets/show.html.erb +2 -10
  261. data/decidim-results/config/locales/fr.yml +75 -1
  262. data/decidim-results/decidim-results.gemspec +2 -2
  263. data/decidim-results/lib/decidim/results/feature.rb +9 -0
  264. data/decidim-results/spec/commands/create_result_spec.rb +4 -3
  265. data/decidim-results/spec/commands/update_result_spec.rb +5 -4
  266. data/decidim-results/spec/controllers/results_controller_spec.rb +31 -0
  267. data/decidim-results/spec/factories.rb +1 -0
  268. data/decidim-results/spec/features/explore_results_spec.rb +75 -74
  269. data/decidim-results/spec/forms/result_form_spec.rb +2 -1
  270. data/decidim-results/spec/queries/decidim/results/filtered_results_spec.rb +21 -0
  271. data/decidim-results/spec/services/result_search_spec.rb +4 -3
  272. data/decidim-results/spec/services/result_stats_calculator_spec.rb +1 -0
  273. data/decidim-results/spec/shared/admin_shared_context.rb +1 -0
  274. data/decidim-results/spec/spec_helper.rb +1 -0
  275. data/decidim-system/config/locales/fr.yml +64 -1
  276. data/decidim-system/decidim-system.gemspec +3 -3
  277. data/decidim-system/spec/factories.rb +1 -0
  278. data/decidim-system/spec/spec_helper.rb +1 -0
  279. data/docs/how_to_create_a_plugin.md +117 -139
  280. data/lib/generators/decidim/install_generator.rb +1 -1
  281. data/package.json +30 -31
  282. data/tslint.json +1 -2
  283. data/webpack.config.js +2 -3
  284. data/yarn.lock +976 -1326
  285. metadata +68 -31
  286. data/decidim-admin/yarn.lock +0 -4
  287. data/decidim-api/.gitignore +0 -7
  288. data/decidim-budgets/.gitignore +0 -7
  289. data/decidim-meetings/.gitignore +0 -7
  290. data/decidim-pages/.gitignore +0 -3
  291. data/decidim-proposals/.gitignore +0 -3
  292. data/decidim-results/.gitignore +0 -7
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "spec_helper"
2
3
 
3
4
  describe "Proposals feature" do
@@ -8,7 +8,7 @@ module Decidim
8
8
  let!(:feature) { create(:feature, organization: organization, manifest_name: "proposals") }
9
9
  let!(:participatory_process) { create(:participatory_process, organization: organization) }
10
10
  let!(:author) { create(:user, organization: organization) }
11
- let!(:proposal) { create(:proposal, feature: feature, author: author)}
11
+ let!(:proposal) { create(:proposal, feature: feature, author: author) }
12
12
  let!(:proposal_vote) { create(:proposal_vote, proposal: proposal, author: author) }
13
13
 
14
14
  subject { proposal_vote }
@@ -26,9 +26,9 @@ module Decidim
26
26
  end
27
27
 
28
28
  it "validates uniqueness for author and proposal combination" do
29
- expect {
29
+ expect do
30
30
  create(:proposal_vote, proposal: proposal, author: author)
31
- }.to raise_error(ActiveRecord::RecordInvalid)
31
+ end.to raise_error(ActiveRecord::RecordInvalid)
32
32
  end
33
33
 
34
34
  context "when no author" do
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe Decidim::Proposals::FilteredProposals do
5
+ let(:organization) { create(:organization) }
6
+ let(:participatory_process) { create(:participatory_process, organization: organization) }
7
+ let(:feature) { create(:proposal_feature, participatory_process: participatory_process) }
8
+ let(:another_feature) { create(:proposal_feature, participatory_process: participatory_process) }
9
+
10
+ let(:proposals) { create_list(:proposal, 3, feature: feature) }
11
+ let(:old_proposals) { create_list(:proposal, 3, feature: feature, created_at: 10.days.ago) }
12
+ let(:another_proposals) { create_list(:proposal, 3, feature: another_feature) }
13
+
14
+ it "returns proposals included in a collection of features" do
15
+ expect(Decidim::Proposals::FilteredProposals.for([feature, another_feature])).to match_array proposals.concat(old_proposals, another_proposals)
16
+ end
17
+
18
+ it "returns proposals created in a date range" do
19
+ expect(Decidim::Proposals::FilteredProposals.for([feature, another_feature], 2.weeks.ago, 1.week.ago)).to match_array old_proposals
20
+ end
21
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "spec_helper"
2
3
 
3
4
  module Decidim
@@ -8,7 +9,7 @@ module Decidim
8
9
  let(:scope2) { create :scope, organization: feature.organization }
9
10
  let(:participatory_process) { feature.participatory_process }
10
11
  let(:user) { create(:user, organization: feature.organization) }
11
- let!(:proposal) { create(:proposal, feature: feature, scope: scope1)}
12
+ let!(:proposal) { create(:proposal, feature: feature, scope: scope1) }
12
13
 
13
14
  describe "results" do
14
15
  let(:activity) { [] }
@@ -19,7 +20,7 @@ module Decidim
19
20
  let(:scope_id) { nil }
20
21
 
21
22
  subject do
22
- described_class.new({
23
+ described_class.new(
23
24
  feature: feature,
24
25
  activity: activity,
25
26
  search_text: search_text,
@@ -28,7 +29,7 @@ module Decidim
28
29
  related_to: related_to,
29
30
  scope_id: scope_id,
30
31
  current_user: user
31
- }).results
32
+ ).results
32
33
  end
33
34
 
34
35
  it "only includes proposals from the given feature" do
@@ -115,7 +116,7 @@ module Decidim
115
116
  end
116
117
 
117
118
  context "scope_id" do
118
- let!(:proposal2) { create(:proposal, feature: feature, scope: scope2)}
119
+ let!(:proposal2) { create(:proposal, feature: feature, scope: scope2) }
119
120
 
120
121
  context "when a single id is being sent" do
121
122
  let(:scope_id) { scope1.id }
@@ -134,7 +135,7 @@ module Decidim
134
135
  end
135
136
 
136
137
  context "when `global` is being sent" do
137
- let!(:resource_without_scope) { create(:proposal, feature: feature, scope: nil)}
138
+ let!(:resource_without_scope) { create(:proposal, feature: feature, scope: nil) }
138
139
  let(:scope_id) { ["global"] }
139
140
 
140
141
  it "returns resources without a scope" do
@@ -151,12 +152,12 @@ module Decidim
151
152
 
152
153
  it "returns only proposals related to meetings" do
153
154
  related_proposal = create(:proposal, :accepted, feature: feature)
154
- related_proposal_2 = create(:proposal, :accepted, feature: feature)
155
+ related_proposal2 = create(:proposal, :accepted, feature: feature)
155
156
  create_list(:proposal, 3, feature: feature)
156
157
  meeting.link_resources([related_proposal], "proposals_from_meeting")
157
- related_proposal_2.link_resources([meeting], "proposals_from_meeting")
158
+ related_proposal2.link_resources([meeting], "proposals_from_meeting")
158
159
 
159
- expect(subject).to match_array([related_proposal, related_proposal_2])
160
+ expect(subject).to match_array([related_proposal, related_proposal2])
160
161
  end
161
162
  end
162
163
 
@@ -165,15 +166,14 @@ module Decidim
165
166
  let(:results_feature) { create(:feature, manifest_name: "results", participatory_process: participatory_process) }
166
167
  let(:result) { create :result, feature: results_feature }
167
168
 
168
-
169
169
  it "returns only proposals related to results" do
170
170
  related_proposal = create(:proposal, :accepted, feature: feature)
171
- related_proposal_2 = create(:proposal, :accepted, feature: feature)
171
+ related_proposal2 = create(:proposal, :accepted, feature: feature)
172
172
  create_list(:proposal, 3, feature: feature)
173
173
  result.link_resources([related_proposal], "included_proposals")
174
- related_proposal_2.link_resources([result], "included_proposals")
174
+ related_proposal2.link_resources([result], "included_proposals")
175
175
 
176
- expect(subject).to match_array([related_proposal, related_proposal_2])
176
+ expect(subject).to match_array([related_proposal, related_proposal2])
177
177
  end
178
178
  end
179
179
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ module Decidim
5
+ module Proposals
6
+ describe ProposalSerializer do
7
+ let!(:proposal) { create(:proposal) }
8
+ let!(:category) { create(:category, participatory_process: feature.participatory_process) }
9
+ let(:participatory_process) { feature.participatory_process }
10
+ let(:feature) { proposal.feature }
11
+
12
+ let!(:meetings_feature) { create(:feature, manifest_name: "meetings", participatory_process: participatory_process) }
13
+ let(:meetings) { create_list(:meeting, 2, feature: meetings_feature) }
14
+
15
+ before do
16
+ proposal.update_attribute(:category, category)
17
+ proposal.link_resources(meetings, "proposals_from_meeting")
18
+ end
19
+
20
+ subject do
21
+ described_class.new(proposal)
22
+ end
23
+
24
+ describe "#serialize" do
25
+ let(:serialized) { subject.serialize }
26
+
27
+ it "serializes the id" do
28
+ expect(serialized).to include(id: proposal.id)
29
+ end
30
+
31
+ it "serializes the category" do
32
+ expect(serialized[:category]).to include(id: category.id)
33
+ expect(serialized[:category]).to include(name: category.name)
34
+ end
35
+
36
+ it "serializes the title" do
37
+ expect(serialized).to include(title: proposal.title)
38
+ end
39
+
40
+ it "serializes the body" do
41
+ expect(serialized).to include(body: proposal.body)
42
+ end
43
+
44
+ it "serializes the amount of votes" do
45
+ expect(serialized).to include(votes: proposal.proposal_votes_count)
46
+ end
47
+
48
+ it "serializes the amount of comments" do
49
+ expect(serialized).to include(comments: proposal.comments.count)
50
+ end
51
+
52
+ it "serializes the date of creation" do
53
+ expect(serialized).to include(created_at: proposal.created_at)
54
+ end
55
+
56
+ it "serializes the url" do
57
+ expect(serialized[:url]).to include("http", proposal.id.to_s)
58
+ end
59
+
60
+ it "serializes the feature" do
61
+ expect(serialized[:feature]).to include(id: proposal.feature.id)
62
+ end
63
+
64
+ it "serializes the meetings" do
65
+ expect(serialized[:meeting_urls].length).to eq(2)
66
+ expect(serialized[:meeting_urls].first).to match(%r{http.*/meetings})
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  RSpec.shared_context "admin" do
2
3
  let(:organization) { create(:organization) }
3
4
  let!(:user) { create(:user, :admin, :confirmed, organization: organization) }
@@ -77,9 +77,10 @@ RSpec.shared_examples "create a proposal" do |with_author|
77
77
  let(:address) { "Carrer Pare Llaurador 113, baixos, 08224 Terrassa" }
78
78
 
79
79
  before do
80
- Geocoder::Lookup::Test.add_stub(address, [
81
- { 'latitude' => latitude, 'longitude' => longitude }
82
- ])
80
+ Geocoder::Lookup::Test.add_stub(
81
+ address,
82
+ [{ "latitude" => latitude, "longitude" => longitude }]
83
+ )
83
84
  end
84
85
 
85
86
  it "sets the latitude and longitude" do
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+ RSpec.shared_examples "export proposals" do
4
+ let!(:proposals) { create_list :proposal, 3, feature: current_feature }
5
+
6
+ around do |example|
7
+ perform_enqueued_jobs do
8
+ example.run
9
+ end
10
+ end
11
+
12
+ it "exports a CSV" do
13
+ find(".exports.dropdown").click
14
+ click_link "CSV"
15
+
16
+ within ".callout.success" do
17
+ expect(page).to have_content("in progress")
18
+ end
19
+
20
+ expect(last_email.subject).to include("proposals", "csv")
21
+ expect(last_email.attachments.length).to be_positive
22
+ expect(last_email.attachments.first.filename).to match(/^proposals.*\.zip$/)
23
+ end
24
+
25
+ it "exports a JSON" do
26
+ find(".exports.dropdown").click
27
+ click_link "JSON"
28
+
29
+ within ".callout.success" do
30
+ expect(page).to have_content("in progress")
31
+ end
32
+
33
+ expect(last_email.subject).to include("proposals", "json")
34
+ expect(last_email.attachments.length).to be_positive
35
+ expect(last_email.attachments.first.filename).to match(/^proposals.*\.zip$/)
36
+ end
37
+ end
@@ -6,9 +6,10 @@ RSpec.shared_examples "manage proposals" do
6
6
  let(:longitude) { 2.1234 }
7
7
 
8
8
  before do
9
- Geocoder::Lookup::Test.add_stub(address, [
10
- { 'latitude' => latitude, 'longitude' => longitude }
11
- ])
9
+ Geocoder::Lookup::Test.add_stub(
10
+ address,
11
+ [{ "latitude" => latitude, "longitude" => longitude }]
12
+ )
12
13
  end
13
14
 
14
15
  context "previewing proposals" do
@@ -122,9 +123,9 @@ RSpec.shared_examples "manage proposals" do
122
123
  context "when geocoding is enabled" do
123
124
  let!(:current_feature) do
124
125
  create(:proposal_feature,
125
- :with_geocoding_enabled,
126
- manifest: manifest,
127
- participatory_process: participatory_process)
126
+ :with_geocoding_enabled,
127
+ manifest: manifest,
128
+ participatory_process: participatory_process)
128
129
  end
129
130
 
130
131
  it "creates a new proposal related to the process scope" do
@@ -158,7 +159,7 @@ RSpec.shared_examples "manage proposals" do
158
159
 
159
160
  context "when official_proposals setting is disabled" do
160
161
  before do
161
- current_feature.update_attributes(settings: { official_proposals_enabled: false } )
162
+ current_feature.update_attributes(settings: { official_proposals_enabled: false })
162
163
  end
163
164
 
164
165
  it "cannot create a new proposal" do
@@ -170,7 +171,7 @@ RSpec.shared_examples "manage proposals" do
170
171
 
171
172
  context "when the proposal_answering feature setting is enabled" do
172
173
  before do
173
- current_feature.update_attributes(settings: { proposal_answering_enabled: true } )
174
+ current_feature.update_attributes(settings: { proposal_answering_enabled: true })
174
175
  end
175
176
 
176
177
  context "when the proposal_answering step setting is enabled" do
@@ -235,9 +236,9 @@ RSpec.shared_examples "manage proposals" do
235
236
 
236
237
  it "can edit a proposal answer" do
237
238
  proposal.update_attributes!(
238
- state: 'rejected',
239
+ state: "rejected",
239
240
  answer: {
240
- 'en' => "I don't like it"
241
+ "en" => "I don't like it"
241
242
  },
242
243
  answered_at: Time.current
243
244
  )
@@ -291,7 +292,7 @@ RSpec.shared_examples "manage proposals" do
291
292
 
292
293
  context "when the proposal_answering feature setting is disabled" do
293
294
  before do
294
- current_feature.update_attributes(settings: { proposal_answering_enabled: false } )
295
+ current_feature.update_attributes(settings: { proposal_answering_enabled: false })
295
296
  end
296
297
 
297
298
  it "cannot answer a proposal" do
@@ -7,8 +7,8 @@ RSpec.shared_examples "a proposal form" do
7
7
  let(:author) { create(:user, organization: feature.organization) }
8
8
  let(:category) { create(:category, participatory_process: feature.participatory_process) }
9
9
  let(:scope) { create(:scope, organization: feature.organization) }
10
- let(:category_id) { category.try(:id)}
11
- let(:scope_id) { scope.try(:id)}
10
+ let(:category_id) { category.try(:id) }
11
+ let(:scope_id) { scope.try(:id) }
12
12
  let(:latitude) { 40.1234 }
13
13
  let(:longitude) { 2.1234 }
14
14
  let(:address) { nil }
@@ -58,28 +58,29 @@ RSpec.shared_examples "a proposal form" do
58
58
 
59
59
  context "with invalid category_id" do
60
60
  let(:category_id) { 987 }
61
- it { is_expected.to be_invalid}
61
+ it { is_expected.to be_invalid }
62
62
  end
63
63
 
64
64
  context "with invalid scope_id" do
65
65
  let(:scope_id) { 987 }
66
- it { is_expected.to be_invalid}
66
+ it { is_expected.to be_invalid }
67
67
  end
68
68
 
69
69
  context "when geocoding is enabled" do
70
70
  let(:feature) { create(:proposal_feature, :with_geocoding_enabled) }
71
71
 
72
72
  context "when the address is not present" do
73
- it { is_expected.to be_invalid}
73
+ it { is_expected.to be_invalid }
74
74
  end
75
75
 
76
76
  context "when the address is present" do
77
77
  let(:address) { "Carrer Pare Llaurador 113, baixos, 08224 Terrassa" }
78
78
 
79
79
  before do
80
- Geocoder::Lookup::Test.add_stub(address, [
81
- { 'latitude' => latitude, 'longitude' => longitude }
82
- ])
80
+ Geocoder::Lookup::Test.add_stub(
81
+ address,
82
+ [{ "latitude" => latitude, "longitude" => longitude }]
83
+ )
83
84
  end
84
85
 
85
86
  it "validates the address and store its coordinates" do
@@ -1,2 +1,3 @@
1
+ # frozen_string_literal: true
1
2
  ENV["ENGINE_NAME"] = File.dirname(File.dirname(__FILE__)).split("/").last
2
3
  require "decidim/dev/test/base_spec_helper"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Decidim
2
3
  module Results
3
4
  class ResultWidgetsController < Decidim::WidgetsController
@@ -12,7 +12,7 @@ module Decidim
12
12
  private
13
13
 
14
14
  def results
15
- @results ||= search.results.page(params[:page]).per(12)
15
+ @results ||= search.results.order("title -> '#{I18n.locale}' ASC").page(params[:page]).per(12)
16
16
  end
17
17
 
18
18
  def result
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Results
4
+ # A class used to find results filtered by features and a date range
5
+ class FilteredResults < Rectify::Query
6
+ # Syntactic sugar to initialize the class and return the queried objects.
7
+ #
8
+ # features - An array of Decidim::Feature
9
+ # start_at - A date to filter resources created after it
10
+ # end_at - A date to filter resources created before it.
11
+ def self.for(features, start_at = nil, end_at = nil)
12
+ new(features, start_at, end_at).query
13
+ end
14
+
15
+ # Initializes the class.
16
+ #
17
+ # features - An array of Decidim::Feature
18
+ # start_at - A date to filter resources created after it
19
+ # end_at - A date to filter resources created before it.
20
+ def initialize(features, start_at = nil, end_at = nil)
21
+ @features = features
22
+ @start_at = start_at
23
+ @end_at = end_at
24
+ end
25
+
26
+ # Finds the Results scoped to an array of features and filtered
27
+ # by a range of dates.
28
+ def query
29
+ results = Decidim::Results::Result.where(feature: @features)
30
+ results = results.where("created_at >= ?", @start_at) if @start_at.present?
31
+ results = results.where("created_at <= ?", @end_at) if @end_at.present?
32
+ results
33
+ end
34
+ end
35
+ end
36
+ end
@@ -20,7 +20,7 @@ module Decidim
20
20
  end
21
21
 
22
22
  def comments_count
23
- Decidim::Comments::Comment.where(commentable: proposals).count
23
+ Decidim::Comments::Comment.where(root_commentable: proposals).count
24
24
  end
25
25
 
26
26
  def attendees_count
@@ -1,10 +1,2 @@
1
- <div class="column">
2
- <article class="card card--result">
3
- <div class="card__content">
4
- <%= link_to model, class: "card__link" do %>
5
- <h5 class="card__title"><%= translated_attribute model.title %></h5>
6
- <% end %>
7
- <%== translated_attribute model.description %>
8
- </div>
9
- </article>
10
- </div>
1
+ <% content_for(:title, translated_attribute(model.title)) %>
2
+ <%== translated_attribute model.description %>