decidim 0.0.1 → 0.0.2

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 (313) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +4 -5
  3. data/.eslintignore +2 -0
  4. data/.eslintrc.json +2 -0
  5. data/.gitignore +1 -0
  6. data/.inch.yml +5 -0
  7. data/.mention-bot +8 -0
  8. data/.rubocop.yml +8 -31
  9. data/.ruby-version +1 -1
  10. data/.travis.yml +24 -14
  11. data/Dockerfile +1 -3
  12. data/Gemfile +1 -3
  13. data/Gemfile.lock +175 -138
  14. data/README.md +63 -5
  15. data/Rakefile +1 -1
  16. data/codecov.yml +1 -0
  17. data/decidim-admin/Rakefile +1 -1
  18. data/decidim-admin/app/assets/javascripts/decidim/admin/application.js.es6 +0 -1
  19. data/decidim-admin/app/assets/stylesheets/decidim/admin/_foundation_and_overrides.scss +1 -0
  20. data/decidim-admin/app/assets/stylesheets/decidim/admin/_icons.scss +9 -0
  21. data/decidim-admin/app/assets/stylesheets/decidim/admin/application.scss +1 -0
  22. data/decidim-admin/app/commands/decidim/admin/create_feature.rb +3 -1
  23. data/decidim-admin/app/commands/decidim/admin/create_participatory_process.rb +26 -14
  24. data/decidim-admin/app/commands/decidim/admin/destroy_feature.rb +5 -0
  25. data/decidim-admin/app/commands/decidim/admin/destroy_participatory_process_step.rb +29 -0
  26. data/decidim-admin/app/commands/decidim/admin/update_feature.rb +47 -0
  27. data/decidim-admin/app/commands/decidim/admin/update_organization.rb +3 -1
  28. data/decidim-admin/app/controllers/decidim/admin/features_controller.rb +37 -2
  29. data/decidim-admin/app/controllers/decidim/admin/participatory_process_step_activations_controller.rb +0 -16
  30. data/decidim-admin/app/controllers/decidim/admin/participatory_process_steps_controller.rb +10 -3
  31. data/decidim-admin/app/controllers/decidim/admin/static_pages_controller.rb +4 -4
  32. data/decidim-admin/app/controllers/decidim/admin/user_groups_controller.rb +32 -0
  33. data/decidim-admin/app/controllers/decidim/admin/users_controller.rb +87 -0
  34. data/decidim-admin/app/forms/decidim/admin/category_form.rb +1 -7
  35. data/decidim-admin/app/forms/decidim/admin/feature_form.rb +26 -0
  36. data/decidim-admin/app/forms/decidim/admin/organization_form.rb +2 -0
  37. data/decidim-admin/app/forms/decidim/admin/participatory_process_step_form.rb +1 -1
  38. data/decidim-admin/app/forms/decidim/admin/static_page_form.rb +2 -3
  39. data/decidim-admin/app/models/decidim/admin/abilities/admin_user.rb +6 -0
  40. data/decidim-admin/app/views/decidim/admin/features/_feature.html.erb +4 -1
  41. data/decidim-admin/app/views/decidim/admin/features/_form.html.erb +49 -0
  42. data/decidim-admin/app/views/decidim/admin/features/_settings_fields.html.erb +5 -0
  43. data/decidim-admin/app/views/decidim/admin/features/edit.html.erb +9 -0
  44. data/decidim-admin/app/views/decidim/admin/features/index.html.erb +6 -0
  45. data/decidim-admin/app/views/decidim/admin/features/new.html.erb +1 -1
  46. data/decidim-admin/app/views/decidim/admin/organization/_form.html.erb +8 -0
  47. data/decidim-admin/app/views/decidim/admin/participatory_process_attachments/_form.html.erb +1 -1
  48. data/decidim-admin/app/views/decidim/admin/participatory_process_steps/index.html.erb +2 -6
  49. data/decidim-admin/app/views/decidim/admin/user_groups/index.html.erb +32 -0
  50. data/decidim-admin/app/views/decidim/admin/users/_form.html.erb +6 -0
  51. data/decidim-admin/app/views/decidim/admin/users/index.html.erb +54 -0
  52. data/decidim-admin/app/views/decidim/admin/users/new.html.erb +11 -0
  53. data/decidim-admin/app/views/layouts/decidim/admin/_sidebar.html.erb +2 -0
  54. data/decidim-admin/app/views/layouts/decidim/admin/participatory_process.html.erb +1 -1
  55. data/decidim-admin/config/i18n-tasks.yml +1 -0
  56. data/decidim-admin/config/locales/ca.yml +103 -5
  57. data/decidim-admin/config/locales/en.yml +57 -4
  58. data/decidim-admin/config/locales/es.yml +103 -5
  59. data/decidim-admin/config/routes.rb +11 -0
  60. data/decidim-admin/decidim-admin.gemspec +2 -3
  61. data/decidim-admin/lib/decidim/admin/features/base_controller.rb +7 -3
  62. data/decidim-admin/lib/decidim/admin/test/factories.rb +8 -0
  63. data/decidim-admin/spec/commands/create_category_spec.rb +2 -1
  64. data/decidim-admin/spec/commands/create_feature_spec.rb +21 -2
  65. data/decidim-admin/spec/commands/create_participatory_process_spec.rb +13 -1
  66. data/decidim-admin/spec/commands/create_static_page_spec.rb +1 -1
  67. data/decidim-admin/spec/commands/destroy_participatory_process_step_spec.rb +45 -0
  68. data/decidim-admin/spec/commands/update_category_spec.rb +2 -1
  69. data/decidim-admin/spec/commands/update_feature_spec.rb +79 -0
  70. data/decidim-admin/spec/commands/update_organization_spec.rb +3 -2
  71. data/decidim-admin/spec/commands/update_static_page_spec.rb +3 -2
  72. data/decidim-admin/spec/factories.rb +2 -9
  73. data/decidim-admin/spec/features/admin_manages_features_spec.rb +84 -2
  74. data/decidim-admin/spec/features/admin_manages_organization_admins_spec.rb +71 -0
  75. data/decidim-admin/spec/features/admin_manages_user_groups_spec.rb +24 -0
  76. data/decidim-admin/spec/forms/category_form_spec.rb +3 -7
  77. data/decidim-admin/spec/forms/organization_form_spec.rb +8 -2
  78. data/decidim-admin/spec/forms/participatory_process_form_spec.rb +2 -1
  79. data/decidim-admin/spec/forms/participatory_process_step_form_spec.rb +2 -21
  80. data/decidim-admin/spec/forms/scope_form_spec.rb +1 -1
  81. data/decidim-admin/spec/forms/static_page_form_spec.rb +2 -7
  82. data/decidim-admin/spec/models/abilities/admin_user_spec.rb +22 -0
  83. data/decidim-admin/spec/shared/manage_process_attachments_examples.rb +2 -1
  84. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +2 -15
  85. data/decidim-admin/spec/spec_helper.rb +3 -1
  86. data/decidim-api/Rakefile +1 -1
  87. data/decidim-api/decidim-api.gemspec +3 -3
  88. data/decidim-api/spec/factories.rb +2 -2
  89. data/decidim-api/spec/spec_helper.rb +3 -1
  90. data/decidim-comments/Rakefile +1 -1
  91. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  92. data/decidim-comments/app/commands/decidim/comments/vote_comment.rb +38 -0
  93. data/decidim-comments/app/frontend/application/icon.component.jsx +9 -4
  94. data/decidim-comments/app/frontend/application/icon.component.test.jsx +12 -2
  95. data/decidim-comments/app/frontend/comments/add_comment_form.component.jsx +43 -11
  96. data/decidim-comments/app/frontend/comments/add_comment_form.mutation.graphql +1 -4
  97. data/decidim-comments/app/frontend/comments/comment.component.jsx +67 -7
  98. data/decidim-comments/app/frontend/comments/comment.component.test.jsx +49 -1
  99. data/decidim-comments/app/frontend/comments/comment_data.fragment.graphql +3 -0
  100. data/decidim-comments/app/frontend/comments/comment_order_selector.component.jsx +51 -6
  101. data/decidim-comments/app/frontend/comments/comment_order_selector.component.test.jsx +12 -1
  102. data/decidim-comments/app/frontend/comments/comment_thread.component.jsx +11 -5
  103. data/decidim-comments/app/frontend/comments/comment_thread.component.test.jsx +13 -3
  104. data/decidim-comments/app/frontend/comments/comment_thread.fragment.graphql +1 -3
  105. data/decidim-comments/app/frontend/comments/comments.component.jsx +37 -11
  106. data/decidim-comments/app/frontend/comments/comments.component.test.jsx +44 -7
  107. data/decidim-comments/app/frontend/comments/comments.query.graphql +2 -2
  108. data/decidim-comments/app/frontend/comments/down_vote.fragment.graphql +6 -0
  109. data/decidim-comments/app/frontend/comments/down_vote.mutation.graphql +7 -0
  110. data/decidim-comments/app/frontend/comments/down_vote_button.component.jsx +84 -0
  111. data/decidim-comments/app/frontend/comments/down_vote_button.component.test.jsx +48 -0
  112. data/decidim-comments/app/frontend/comments/up_vote.fragment.graphql +6 -0
  113. data/decidim-comments/app/frontend/comments/up_vote.mutation.graphql +7 -0
  114. data/decidim-comments/app/frontend/comments/up_vote_button.component.jsx +84 -0
  115. data/decidim-comments/app/frontend/comments/up_vote_button.component.test.jsx +48 -0
  116. data/decidim-comments/app/frontend/comments/vote_button.component.jsx +19 -0
  117. data/decidim-comments/app/frontend/comments/vote_button_component.test.jsx +38 -0
  118. data/decidim-comments/app/frontend/support/generate_comments_data.js +7 -2
  119. data/decidim-comments/app/helpers/decidim/comments/comments_helper.rb +1 -1
  120. data/decidim-comments/app/models/decidim/comments/application_record.rb +9 -0
  121. data/decidim-comments/app/models/decidim/comments/comment.rb +19 -4
  122. data/decidim-comments/app/models/decidim/comments/comment_vote.rb +22 -0
  123. data/decidim-comments/app/models/decidim/comments/seed.rb +27 -0
  124. data/decidim-comments/app/queries/decidim/comments/comments_with_replies.rb +88 -0
  125. data/decidim-comments/app/resolvers/decidim/comments/vote_comment_resolver.rb +20 -0
  126. data/decidim-comments/app/types/decidim/comments/comment_mutation_type.rb +19 -0
  127. data/decidim-comments/app/types/decidim/comments/comment_type.rb +38 -2
  128. data/decidim-comments/config/locales/en.yml +1 -0
  129. data/decidim-comments/db/migrate/20161130143508_create_comments.rb +4 -2
  130. data/decidim-comments/db/migrate/20161219150806_create_comment_votes.rb +13 -0
  131. data/decidim-comments/decidim-comments.gemspec +0 -3
  132. data/decidim-comments/lib/decidim/comments/mutation_extensions.rb +9 -0
  133. data/decidim-comments/lib/decidim/comments/query_extensions.rb +3 -5
  134. data/decidim-comments/lib/decidim/comments/test/factories.rb +22 -0
  135. data/decidim-comments/spec/commands/vote_comment_spec.rb +124 -0
  136. data/decidim-comments/spec/factories.rb +2 -9
  137. data/decidim-comments/spec/features/comments_spec.rb +37 -0
  138. data/decidim-comments/spec/models/comment_spec.rb +34 -0
  139. data/decidim-comments/spec/models/comment_vote_spec.rb +44 -0
  140. data/decidim-comments/spec/models/seed_spec.rb +19 -0
  141. data/decidim-comments/spec/queries/comments_with_replies_spec.rb +86 -0
  142. data/decidim-comments/spec/spec_helper.rb +3 -1
  143. data/decidim-comments/spec/support/dummy.rb +1 -1
  144. data/decidim-comments/spec/types/comment_mutation_type_spec.rb +46 -0
  145. data/decidim-comments/spec/types/comment_type_spec.rb +57 -3
  146. data/{decidim-api → decidim-comments}/spec/types/mutation_type_spec.rb +11 -0
  147. data/decidim-dev/README.md +7 -11
  148. data/decidim-dev/decidim-dev.gemspec +5 -4
  149. data/decidim-dev/lib/decidim/dev.rb +20 -0
  150. data/decidim-dev/lib/decidim/dev/assets/Exampledocument.docx +0 -0
  151. data/decidim-dev/lib/decidim/dev/assets/Exampledocument.odt +0 -0
  152. data/decidim-dev/lib/decidim/dev/assets/Exampledocument.pdf +0 -0
  153. data/decidim-dev/lib/decidim/dev/assets/avatar.svg +14 -0
  154. data/decidim-dev/lib/decidim/dev/assets/city.jpeg +0 -0
  155. data/decidim-dev/lib/decidim/dev/assets/city2.jpeg +0 -0
  156. data/decidim-dev/lib/decidim/dev/assets/city3.jpeg +0 -0
  157. data/decidim-dev/lib/decidim/dev/assets/malicious.jpg +0 -0
  158. data/decidim-dev/lib/decidim/{common_rake.rb → dev/common_rake.rb} +1 -1
  159. data/decidim-dev/lib/decidim/{dummy_authorization_handler.rb → dev/dummy_authorization_handler.rb} +4 -4
  160. data/decidim-dev/lib/decidim/{test → dev/test}/authorization_shared_examples.rb +0 -8
  161. data/decidim-dev/lib/decidim/{test → dev/test}/base_spec_helper.rb +4 -1
  162. data/decidim-dev/lib/decidim/{test → dev/test}/i18n_spec.rb +1 -1
  163. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/action_mailer.rb +0 -0
  164. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/active_job.rb +0 -0
  165. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/authenticated_controller_context.rb +0 -0
  166. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/authorization_handlers.rb +1 -1
  167. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/capybara.rb +3 -10
  168. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/database_cleaner.rb +0 -0
  169. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/engine_routes.rb +0 -0
  170. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/factory_girl.rb +0 -0
  171. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/feature.rb +10 -0
  172. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/feature_context.rb +2 -2
  173. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/helpers.rb +4 -0
  174. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/i18n.rb +1 -0
  175. data/decidim-dev/lib/decidim/dev/test/rspec_support/phantomjs_polyfills/bind-polyfill.js +18 -0
  176. data/decidim-dev/lib/decidim/dev/test/rspec_support/phantomjs_polyfills/object-assign-polyfill.js +24 -0
  177. data/decidim-dev/lib/decidim/dev/test/rspec_support/phantomjs_polyfills/promise.js +233 -0
  178. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/translation_helpers.rb +0 -0
  179. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/warden.rb +0 -0
  180. data/decidim-dev/lib/decidim/{test → dev/test}/rspec_support/wisper.rb +0 -0
  181. data/decidim-dev/lib/generators/decidim/dummy_generator.rb +2 -2
  182. data/decidim-dev/lib/generators/decidim/templates/decidim_dev.rb +2 -0
  183. data/decidim-meetings/Rakefile +1 -1
  184. data/decidim-meetings/app/assets/images/decidim/meetings/icon.svg +1 -0
  185. data/decidim-meetings/app/commands/decidim/meetings/admin/create_meeting.rb +2 -0
  186. data/decidim-meetings/app/commands/decidim/meetings/admin/update_meeting.rb +2 -0
  187. data/decidim-meetings/app/controllers/decidim/meetings/meetings_controller.rb +30 -6
  188. data/decidim-meetings/app/forms/decidim/meetings/admin/meeting_form.rb +14 -0
  189. data/decidim-meetings/app/helpers/decidim/meetings/application_helper.rb +10 -0
  190. data/decidim-meetings/app/models/decidim/meetings/meeting.rb +18 -1
  191. data/decidim-meetings/app/services/decidim/meetings/meeting_search.rb +48 -0
  192. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/_form.html.erb +9 -2
  193. data/decidim-meetings/app/views/decidim/meetings/meetings/_filters.html.erb +24 -0
  194. data/decidim-meetings/app/views/decidim/meetings/meetings/_meetings.html.erb +30 -0
  195. data/decidim-meetings/app/views/decidim/meetings/meetings/_tags.html.erb +10 -0
  196. data/decidim-meetings/app/views/decidim/meetings/meetings/index.html.erb +8 -26
  197. data/decidim-meetings/app/views/decidim/meetings/meetings/index.js.erb +2 -0
  198. data/decidim-meetings/app/views/decidim/meetings/meetings/show.html.erb +1 -0
  199. data/decidim-meetings/config/locales/ca.yml +7 -0
  200. data/decidim-meetings/config/locales/en.yml +7 -0
  201. data/decidim-meetings/config/locales/es.yml +7 -0
  202. data/decidim-meetings/db/migrate/20161130121354_create_meetings.rb +2 -0
  203. data/decidim-meetings/decidim-meetings.gemspec +2 -0
  204. data/decidim-meetings/lib/decidim/meetings/feature.rb +7 -2
  205. data/decidim-meetings/lib/decidim/meetings/list_engine.rb +3 -0
  206. data/decidim-meetings/spec/commands/create_meeting_spec.rb +21 -0
  207. data/decidim-meetings/spec/commands/update_meeting_spec.rb +17 -2
  208. data/decidim-meetings/spec/factories.rb +3 -3
  209. data/decidim-meetings/spec/features/explore_meetings_spec.rb +53 -0
  210. data/decidim-meetings/spec/forms/meeting_form_spec.rb +19 -1
  211. data/decidim-meetings/spec/models/meeting_spec.rb +20 -0
  212. data/decidim-meetings/spec/services/meeting_search_spec.rb +146 -0
  213. data/decidim-meetings/spec/shared/admin_shared_context.rb +4 -2
  214. data/decidim-meetings/spec/shared/manage_meetings_examples.rb +5 -2
  215. data/decidim-meetings/spec/spec_helper.rb +1 -1
  216. data/decidim-pages/Rakefile +1 -1
  217. data/decidim-pages/app/assets/images/decidim/pages/icon.svg +3 -0
  218. data/decidim-pages/app/commands/decidim/pages/admin/update_page.rb +1 -2
  219. data/decidim-pages/app/forms/decidim/pages/admin/page_form.rb +0 -1
  220. data/decidim-pages/app/views/decidim/pages/admin/pages/_form.html.erb +0 -1
  221. data/decidim-pages/app/views/decidim/pages/application/show.html.erb +3 -3
  222. data/decidim-pages/config/i18n-tasks.yml +1 -0
  223. data/decidim-pages/config/locales/ca.yml +5 -1
  224. data/decidim-pages/config/locales/en.yml +5 -1
  225. data/decidim-pages/config/locales/es.yml +5 -1
  226. data/decidim-pages/db/migrate/20170110145040_remove_commentable_flag_from_pages.rb +5 -0
  227. data/decidim-pages/lib/decidim/pages/feature.rb +13 -3
  228. data/decidim-pages/spec/commands/update_page_spec.rb +2 -1
  229. data/decidim-pages/spec/factories.rb +2 -2
  230. data/decidim-pages/spec/features/admin_spec.rb +0 -11
  231. data/decidim-pages/spec/features/page_show_spec.rb +13 -10
  232. data/decidim-pages/spec/forms/page_form_spec.rb +4 -4
  233. data/decidim-pages/spec/spec_helper.rb +3 -1
  234. data/decidim-proposals/Rakefile +1 -1
  235. data/decidim-proposals/app/assets/config/decidim_proposals_manifest.css +1 -0
  236. data/decidim-proposals/app/assets/config/decidim_proposals_manifest.js +1 -0
  237. data/decidim-proposals/app/assets/images/decidim/proposals/icon.svg +1 -0
  238. data/decidim-proposals/app/assets/javascripts/decidim/proposals/social_share.js +2 -0
  239. data/decidim-proposals/app/assets/stylesheets/decidim/proposals/social_share.css.scss +14 -0
  240. data/decidim-proposals/app/commands/decidim/proposals/create_proposal.rb +5 -3
  241. data/decidim-proposals/app/controllers/decidim/proposals/admin/proposals_controller.rb +3 -3
  242. data/decidim-proposals/app/controllers/decidim/proposals/proposal_votes_controller.rb +25 -0
  243. data/decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb +33 -6
  244. data/decidim-proposals/app/forms/decidim/proposals/admin/proposal_form.rb +7 -6
  245. data/decidim-proposals/app/forms/decidim/proposals/proposal_form.rb +6 -6
  246. data/decidim-proposals/app/helpers/decidim/proposals/application_helper.rb +3 -1
  247. data/decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb +27 -0
  248. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +8 -0
  249. data/decidim-proposals/app/models/decidim/proposals/proposal_vote.rb +20 -0
  250. data/decidim-proposals/app/services/decidim/proposals/proposal_search.rb +39 -11
  251. data/decidim-proposals/app/views/decidim/proposals/admin/proposals/_form.html.erb +2 -2
  252. data/decidim-proposals/app/views/decidim/proposals/proposal_votes/create.js.erb +5 -0
  253. data/decidim-proposals/app/views/decidim/proposals/proposals/_count.html.erb +1 -0
  254. data/decidim-proposals/app/views/decidim/proposals/proposals/_filters.html.erb +26 -0
  255. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposal.html.erb +11 -2
  256. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposals.html.erb +4 -0
  257. data/decidim-proposals/app/views/decidim/proposals/proposals/_share.html.erb +33 -0
  258. data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +13 -0
  259. data/decidim-proposals/app/views/decidim/proposals/proposals/_votes_count.html.erb +6 -0
  260. data/decidim-proposals/app/views/decidim/proposals/proposals/index.html.erb +11 -11
  261. data/decidim-proposals/app/views/decidim/proposals/proposals/index.js.erb +5 -0
  262. data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +31 -4
  263. data/decidim-proposals/config/i18n-tasks.yml +1 -0
  264. data/decidim-proposals/config/initializers/social_share_button.rb +4 -0
  265. data/decidim-proposals/config/locales/ca.yml +28 -2
  266. data/decidim-proposals/config/locales/en.yml +27 -1
  267. data/decidim-proposals/config/locales/es.yml +28 -2
  268. data/decidim-proposals/db/migrate/20170112115253_create_proposal_votes.rb +12 -0
  269. data/decidim-proposals/db/migrate/20170113114245_add_text_search_indexes.rb +6 -0
  270. data/decidim-proposals/db/migrate/20170118120151_add_counter_cache_votes_to_proposals.rb +5 -0
  271. data/decidim-proposals/decidim-proposals.gemspec +2 -1
  272. data/decidim-proposals/lib/decidim/proposals/engine.rb +8 -1
  273. data/decidim-proposals/lib/decidim/proposals/feature.rb +30 -4
  274. data/decidim-proposals/spec/commands/decidim/proposals/create_proposal_spec.rb +10 -3
  275. data/decidim-proposals/spec/factories.rb +9 -4
  276. data/decidim-proposals/spec/features/admin_manages_proposals_spec.rb +2 -0
  277. data/decidim-proposals/spec/features/process_admin_manages_proposals_spec.rb +2 -0
  278. data/decidim-proposals/spec/features/proposals_spec.rb +41 -31
  279. data/decidim-proposals/spec/features/vote_proposal_spec.rb +78 -0
  280. data/decidim-proposals/spec/forms/decidim/proposals/proposal_form_spec.rb +11 -10
  281. data/decidim-proposals/spec/helpers/proposal_votes_helper_spec.rb +28 -0
  282. data/decidim-proposals/spec/lib/decidim/proposals/feature_spec.rb +1 -1
  283. data/decidim-proposals/spec/models/decidim/proposals/proposal_spec.rb +20 -3
  284. data/decidim-proposals/spec/models/decidim/proposals/proposal_vote_spec.rb +43 -0
  285. data/decidim-proposals/spec/services/decidim/proposals/proposal_search_spec.rb +50 -4
  286. data/decidim-proposals/spec/shared/manage_proposals_examples.rb +1 -1
  287. data/decidim-proposals/spec/spec_helper.rb +1 -1
  288. data/decidim-system/Rakefile +1 -1
  289. data/decidim-system/app/commands/decidim/system/register_organization.rb +13 -12
  290. data/decidim-system/decidim-system.gemspec +2 -3
  291. data/decidim-system/spec/factories.rb +1 -1
  292. data/decidim-system/spec/spec_helper.rb +3 -1
  293. data/docs/social_providers.md +41 -0
  294. data/karma.conf.js +4 -2
  295. data/lib/generators/decidim/app_generator.rb +6 -0
  296. data/lib/generators/decidim/demo_generator.rb +2 -2
  297. data/lib/generators/decidim/install_generator.rb +5 -4
  298. data/lib/generators/decidim/templates/Gemfile.erb +3 -5
  299. data/lib/generators/decidim/templates/initializer.rb +1 -1
  300. data/lib/generators/decidim/templates/secrets.yml.erb +26 -0
  301. data/lib/generators/decidim/templates/social_share_button.rb +7 -0
  302. data/package.json +16 -6
  303. data/webpack.config.js +23 -8
  304. data/yarn.lock +401 -345
  305. metadata +130 -48
  306. data/Gemfile.common +0 -1
  307. data/decidim-admin/Gemfile +0 -6
  308. data/decidim-comments/Gemfile +0 -6
  309. data/decidim-comments/package.json +0 -21
  310. data/decidim-dev/Gemfile +0 -6
  311. data/decidim-dev/lib/decidim/test/rspec_support/bullet.rb +0 -15
  312. data/decidim-dev/lib/generators/decidim/templates/bullet.rb +0 -6
  313. data/decidim-system/Gemfile +0 -6
@@ -11,11 +11,11 @@
11
11
  </div>
12
12
 
13
13
  <div class="field" >
14
- <%= form.translated :editor, :location %>
14
+ <%= form.translated :text_area, :location %>
15
15
  </div>
16
16
 
17
17
  <div class="field" >
18
- <%= form.translated :editor, :location_hints %>
18
+ <%= form.translated :text_area, :location_hints %>
19
19
  </div>
20
20
 
21
21
  <div class="field" >
@@ -30,3 +30,10 @@
30
30
  <%= form.datetime_field :end_time %>
31
31
  </div>
32
32
 
33
+ <div class="field" >
34
+ <%= form.collection_select :decidim_scope_id, current_organization.scopes, :id, :name, include_blank: true %>
35
+ </div>
36
+
37
+ <div class="field" >
38
+ <%= form.categories_select :decidim_category_id, current_participatory_process.categories, prompt: "", disable_parents: false %>
39
+ </div>
@@ -0,0 +1,24 @@
1
+ <%= filter_form_for filter do |form| %>
2
+ <div class="filters__section">
3
+ <div class="filters__search">
4
+ <div class="input-group">
5
+ <%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t('.search') %>
6
+ <div class="input-group-button">
7
+ <button type="submit" class="button button--muted">
8
+ <%= icon "magnifying-glass", aria_label: t('.search') %>
9
+ </button>
10
+ </div>
11
+ </div>
12
+ </div>
13
+ </div>
14
+
15
+ <%= form.collection_radio_buttons :order_start_time, [["asc", t('.ascendent')], ["desc", t('.descendent')]], :first, :last, legend_title: t('.date') %>
16
+
17
+ <% if current_organization.scopes.any? %>
18
+ <%= form.collection_check_boxes :scope_id, current_organization.scopes, lambda {|scope| scope.id.to_s}, :name, legend_title: t('.scopes') %>
19
+ <% end %>
20
+
21
+ <% if current_feature.categories.any? %>
22
+ <%= form.categories_select :category_id, current_feature.categories, legend_title: t('.category'), disable_parents: false, label: false, include_blank: true %>
23
+ <% end %>
24
+ <% end %>
@@ -0,0 +1,30 @@
1
+ <div class="row small-up-1 medium-up-2 card-grid">
2
+ <% meetings.each do |meeting| %>
3
+ <div class="column">
4
+ <article class="card card--meeting">
5
+ <div class="card__content">
6
+ <%= link_to meeting, class: "card__link" do %>
7
+ <h5 class="card__title"><%= translated_attribute meeting.title %></h5>
8
+ <% end %>
9
+ <div class="card__datetime">
10
+ <div class="card__datetime__date">
11
+ <%= l meeting.start_time, format: "%d" %> <span class="card__datetime__month"><%= l meeting.start_time, format: "%B" %></span>
12
+ </div>
13
+ <div class="card__datetime__time">
14
+ <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
15
+ </div>
16
+ </div>
17
+ <%== translated_attribute meeting.short_description %>
18
+ <%= render partial: "tags", locals: { meeting: meeting } %>
19
+ <div class="address card__extra">
20
+ <div class="address__icon">
21
+ <%= icon "meetings", remove_icon_class: true, width: 40, height: 70 %>
22
+ </div>
23
+ <%= render partial: 'address_details', locals: { meeting: meeting } %>
24
+ </div>
25
+ </div>
26
+ </article>
27
+ </div>
28
+ <% end %>
29
+ </div>
30
+ <%= decidim_paginate meetings, order_start_time: params[:order_start_time], scope_id: params[:scope_id] %>
@@ -0,0 +1,10 @@
1
+ <% if meeting.category.present? || meeting.scope.present? %>
2
+ <ul class="tags tags--meeting" >
3
+ <% if meeting.category.present? %>
4
+ <li><%= link_to translated_attribute(meeting.category.name), decidim_meetings.meetings_path(filter: { category_id: meeting.category.id }) %></li>
5
+ <% end %>
6
+ <% if meeting.scope.present? %>
7
+ <li><%= link_to meeting.scope.name, decidim_meetings.meetings_path(filter: { scope_id: [meeting.scope.id] }) %></li>
8
+ <% end %>
9
+ </ul>
10
+ <% end %>
@@ -1,30 +1,12 @@
1
1
  <% content_for(:title, t(".title")) %>
2
2
 
3
- <div class="row small-up-1 medium-up-2 large-up-3 card-grid">
4
- <% meetings.each do |meeting| %>
5
- <div class="column">
6
- <article class="card card--meeting">
7
- <div class="card__content">
8
- <%= link_to meeting, class: "card__link" do %>
9
- <h5 class="card__title"><%= translated_attribute meeting.title %></h5>
10
- <% end %>
11
- <div class="card__datetime">
12
- <div class="card__datetime__date">
13
- <%= l meeting.start_time, format: "%d" %> <span class="card__datetime__month"><%= l meeting.start_time, format: "%B" %></span>
14
- </div>
15
- <div class="card__datetime__time">
16
- <%= meeting.start_time.strftime("%H:%M") %> - <%= meeting.end_time.strftime("%H:%M") %>
17
- </div>
18
- </div>
19
- <%== translated_attribute meeting.description %>
20
- <div class="address card__extra">
21
- <div class="address__icon">
22
- <%= icon "meetings", removeIconClass: true, width: 40, height: 70 %>
23
- </div>
24
- <%= render partial: 'address_details', locals: { meeting: meeting } %>
25
- </div>
26
- </div>
27
- </article>
3
+ <div class="row">
4
+ <div class="columns mediumlarge-4 large-3">
5
+ <div class="card card--secondary show-for-mediumlarge" >
6
+ <%= render partial: "filters" %>
28
7
  </div>
29
- <% end %>
8
+ </div>
9
+ <div id="meetings" class="columns mediumlarge-8 large-9">
10
+ <%= render partial: "meetings" %>
11
+ </div>
30
12
  </div>
@@ -0,0 +1,2 @@
1
+ var $meetings = $('#meetings');
2
+ $meetings.html('<%= j(render partial: "meetings") %>');
@@ -30,6 +30,7 @@
30
30
  </div>
31
31
  </div>
32
32
  </div>
33
+ <%= render partial: "tags", locals: { meeting: meeting } %>
33
34
  </div>
34
35
  <div class="section">
35
36
  <h3 class="section-heading"><%= t(".meeting_description") %></h3>
@@ -32,6 +32,13 @@ ca:
32
32
  meeting:
33
33
  name: Trobada
34
34
  meetings:
35
+ filters:
36
+ ascendent: Ascendent
37
+ category: Categoria
38
+ date: Data
39
+ descendent: Descendent
40
+ scopes: Àmbits
41
+ search: Cerca
35
42
  index:
36
43
  title: Llistat de trobades
37
44
  show:
@@ -33,6 +33,13 @@ en:
33
33
  meeting:
34
34
  name: Meeting
35
35
  meetings:
36
+ filters:
37
+ ascendent: Ascendent
38
+ category: Category
39
+ date: Date
40
+ descendent: Descendent
41
+ scopes: Scopes
42
+ search: Search
36
43
  index:
37
44
  title: Meetings
38
45
  show:
@@ -32,6 +32,13 @@ es:
32
32
  meeting:
33
33
  name: Encuentro
34
34
  meetings:
35
+ filters:
36
+ ascendent: Ascendente
37
+ category: Categoría
38
+ date: Fecha
39
+ descendent: Descendiente
40
+ scopes: Ámbitos
41
+ search: Buscar
35
42
  index:
36
43
  title: Lista de encuentros
37
44
  show:
@@ -11,6 +11,8 @@ class CreateMeetings < ActiveRecord::Migration[5.0]
11
11
  t.jsonb :location_hints
12
12
  t.references :decidim_feature, index: true
13
13
  t.references :decidim_author, index: true
14
+ t.references :decidim_scope, index: true
15
+ t.references :decidim_category, index: true
14
16
 
15
17
  t.timestamps
16
18
  end
@@ -16,6 +16,8 @@ Gem::Specification.new do |s|
16
16
  s.add_dependency "decidim-core", Decidim.version
17
17
  s.add_dependency "rectify", "~> 0.8"
18
18
  s.add_dependency "date_validator", "~> 0.9"
19
+ s.add_dependency "searchlight", "~> 4.1.0"
20
+ s.add_dependency "kaminari", "~> 1.0.1"
19
21
 
20
22
  s.add_development_dependency "decidim-dev", Decidim.version
21
23
  end
@@ -5,8 +5,9 @@ require_dependency "decidim/features/namer"
5
5
  Decidim.register_feature(:meetings) do |feature|
6
6
  feature.engine = Decidim::Meetings::ListEngine
7
7
  feature.admin_engine = Decidim::Meetings::AdminEngine
8
+ feature.icon = "decidim/meetings/icon.svg"
8
9
 
9
- feature.on(:destroy) do |instance|
10
+ feature.on(:before_destroy) do |instance|
10
11
  raise StandardError, "Can't remove this feature" if Decidim::Meetings::Meeting.where(feature: instance).any?
11
12
  end
12
13
 
@@ -21,8 +22,10 @@ Decidim.register_feature(:meetings) do |feature|
21
22
  )
22
23
 
23
24
  3.times do
24
- Decidim::Meetings::Meeting.create!(
25
+ meeting = Decidim::Meetings::Meeting.create!(
25
26
  feature: feature,
27
+ scope: process.organization.scopes.sample,
28
+ category: process.categories.sample,
26
29
  title: Decidim::Faker::Localized.sentence(2),
27
30
  description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
28
31
  Decidim::Faker::Localized.paragraph(3)
@@ -36,6 +39,8 @@ Decidim.register_feature(:meetings) do |feature|
36
39
  end_time: 3.weeks.from_now + 4.hours,
37
40
  address: "#{Faker::Address.street_address} #{Faker::Address.zip} #{Faker::Address.city}"
38
41
  )
42
+
43
+ Decidim::Comments::Seed.comments_for(meeting)
39
44
  end
40
45
  end
41
46
  end
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
+ require "searchlight"
3
+ require "kaminari"
4
+
2
5
  module Decidim
3
6
  module Meetings
4
7
  # This is the engine that runs on the public interface of `decidim-meetings`.
@@ -4,6 +4,8 @@ describe Decidim::Meetings::Admin::CreateMeeting do
4
4
  let(:organization) { create :organization, available_locales: [:en] }
5
5
  let(:participatory_process) { create :participatory_process, organization: organization }
6
6
  let(:current_feature) { create :feature, participatory_process: participatory_process }
7
+ let(:scope) { create :scope, organization: organization }
8
+ let(:category) { create :category, participatory_process: participatory_process }
7
9
  let(:form) do
8
10
  double(
9
11
  :invalid? => invalid,
@@ -15,6 +17,8 @@ describe Decidim::Meetings::Admin::CreateMeeting do
15
17
  start_time: 1.day.from_now,
16
18
  end_time: 1.day.from_now + 1.hour,
17
19
  address: "address",
20
+ scope: scope,
21
+ category: category,
18
22
  current_feature: current_feature
19
23
  )
20
24
  end
@@ -31,8 +35,25 @@ describe Decidim::Meetings::Admin::CreateMeeting do
31
35
  end
32
36
 
33
37
  context "when everything is ok" do
38
+ let(:meeting) { Decidim::Meetings::Meeting.last }
39
+
34
40
  it "creates the meeting" do
35
41
  expect { subject.call }.to change { Decidim::Meetings::Meeting.count }.by(1)
36
42
  end
43
+
44
+ it "sets the scope" do
45
+ subject.call
46
+ expect(meeting.scope).to eq scope
47
+ end
48
+
49
+ it "sets the category" do
50
+ subject.call
51
+ expect(meeting.category).to eq category
52
+ end
53
+
54
+ it "sets the feature" do
55
+ subject.call
56
+ expect(meeting.feature).to eq current_feature
57
+ end
37
58
  end
38
59
  end
@@ -3,6 +3,8 @@ require "spec_helper"
3
3
  describe Decidim::Meetings::Admin::UpdateMeeting do
4
4
  let(:meeting) { create :meeting}
5
5
  let(:organization) { meeting.feature.organization }
6
+ let(:scope) { create :scope, organization: organization }
7
+ let(:category) { create :category, participatory_process: meeting.feature.participatory_process }
6
8
  let(:form) do
7
9
  double(
8
10
  :invalid? => invalid,
@@ -13,6 +15,8 @@ describe Decidim::Meetings::Admin::UpdateMeeting do
13
15
  location_hints: {en: "location_hints"},
14
16
  start_time: 1.day.from_now,
15
17
  end_time: 1.day.from_now + 1.hour,
18
+ scope: scope,
19
+ category: category,
16
20
  address: "address"
17
21
  )
18
22
  end
@@ -29,8 +33,19 @@ describe Decidim::Meetings::Admin::UpdateMeeting do
29
33
  end
30
34
 
31
35
  context "when everything is ok" do
32
- it "creates the meeting" do
33
- expect { subject.call }.to change { Decidim::Meetings::Meeting.count }.by(1)
36
+ it "updates the meeting" do
37
+ subject.call
38
+ expect(translated(meeting.title)).to eq "title"
39
+ end
40
+
41
+ it "sets the scope" do
42
+ subject.call
43
+ expect(meeting.scope).to eq scope
44
+ end
45
+
46
+ it "sets the category" do
47
+ subject.call
48
+ expect(meeting.category).to eq category
34
49
  end
35
50
  end
36
51
  end
@@ -1,5 +1,5 @@
1
- require_relative "../../decidim-core/spec/factories"
2
- require_relative "../../decidim-admin/spec/factories"
1
+ require "decidim/core/test/factories"
2
+ require "decidim/admin/test/factories"
3
3
 
4
4
  FactoryGirl.define do
5
5
  factory :meeting, class: Decidim::Meetings::Meeting do
@@ -10,7 +10,7 @@ FactoryGirl.define do
10
10
  location_hints { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
11
11
  address { Faker::Lorem.sentence(3) }
12
12
  start_time { 1.day.from_now }
13
- end_time { 1.day.from_now + 2.hours }
13
+ end_time { start_time.advance(hours: 2) }
14
14
  feature
15
15
  end
16
16
  end
@@ -34,6 +34,7 @@ describe "Explore meetings", type: :feature do
34
34
 
35
35
  context "show" do
36
36
  let(:path) { decidim_meetings.meeting_path(id: meeting.id, participatory_process_id: participatory_process.id, feature_id: current_feature.id) }
37
+ let(:meetings_count) { 1 }
37
38
  let(:meeting) { meetings.first }
38
39
 
39
40
  it "shows all meeting info" do
@@ -50,5 +51,57 @@ describe "Explore meetings", type: :feature do
50
51
  expect(page).to have_content("14:15 - 16:17")
51
52
  end
52
53
  end
54
+
55
+ context "without category or scope" do
56
+ it "does not show any tag" do
57
+ expect(page).not_to have_selector("ul.tags.tags--meeting")
58
+ end
59
+ end
60
+
61
+ context "with a category" do
62
+ let(:meeting) do
63
+ meeting = meetings.first
64
+ meeting.category = create :category, participatory_process: participatory_process
65
+ meeting.save
66
+ meeting
67
+ end
68
+
69
+ it "shows tags for category" do
70
+ expect(page).to have_selector("ul.tags.tags--meeting")
71
+ within "ul.tags.tags--meeting" do
72
+ expect(page).to have_content(translated(meeting.category.name))
73
+ end
74
+ end
75
+
76
+ it "links to the filter for this category" do
77
+ within "ul.tags.tags--meeting" do
78
+ click_link translated(meeting.category.name)
79
+ end
80
+ expect(page).to have_select("filter_category_id", selected: translated(meeting.category.name))
81
+ end
82
+ end
83
+
84
+ context "with a scope" do
85
+ let(:meeting) do
86
+ meeting = meetings.first
87
+ meeting.scope = create :scope, organization: organization
88
+ meeting.save
89
+ meeting
90
+ end
91
+
92
+ it "shows tags for scope" do
93
+ expect(page).to have_selector("ul.tags.tags--meeting")
94
+ within "ul.tags.tags--meeting" do
95
+ expect(page).to have_content(meeting.scope.name)
96
+ end
97
+ end
98
+
99
+ it "links to the filter for this scope" do
100
+ within "ul.tags.tags--meeting" do
101
+ click_link meeting.scope.name
102
+ end
103
+ expect(page).to have_checked_field(meeting.scope.name)
104
+ end
105
+ end
53
106
  end
54
107
  end
@@ -30,8 +30,14 @@ describe Decidim::Meetings::Admin::MeetingForm do
30
30
  let(:address) { Faker::Lorem.sentence(3) }
31
31
  let(:start_time) { 2.days.from_now }
32
32
  let(:end_time) { 2.days.from_now + 4.hours }
33
+ let(:scope) { create :scope, organization: organization }
34
+ let(:scope_id) { scope.id }
35
+ let(:category) { create :category, participatory_process: participatory_process }
36
+ let(:category_id) { category.id }
33
37
  let(:attributes) do
34
38
  {
39
+ decidim_scope_id: scope_id,
40
+ decidim_category_id: category_id,
35
41
  title_en: title[:en],
36
42
  description_en: description[:en],
37
43
  short_description_en: short_description[:en],
@@ -43,7 +49,7 @@ describe Decidim::Meetings::Admin::MeetingForm do
43
49
  }
44
50
  end
45
51
 
46
- subject { described_class.from_params(attributes, context).with_context(current_feature: current_feature) }
52
+ subject { described_class.from_params(attributes).with_context(context) }
47
53
 
48
54
  it { is_expected.to be_valid }
49
55
 
@@ -112,4 +118,16 @@ describe Decidim::Meetings::Admin::MeetingForm do
112
118
 
113
119
  it { is_expected.not_to be_valid }
114
120
  end
121
+
122
+ describe "when the scope does not exist" do
123
+ let(:scope_id) { scope.id + 10 }
124
+
125
+ it { is_expected.not_to be_valid }
126
+ end
127
+
128
+ describe "when the category does not exist" do
129
+ let(:category_id) { category.id + 10 }
130
+
131
+ it { is_expected.not_to be_valid }
132
+ end
115
133
  end