decidim-core 0.9.3 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/append_redirect_url_to_modals.js.es6 +1 -1
  3. data/app/assets/javascripts/decidim/data_picker.js.es6 +32 -28
  4. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +2 -2
  5. data/app/assets/javascripts/decidim/foundation.js.es6 +1 -2
  6. data/app/assets/stylesheets/decidim/_decidim.scss +6 -1
  7. data/app/assets/stylesheets/decidim/modules/_address.scss +4 -0
  8. data/app/assets/stylesheets/decidim/modules/_block-banner.scss +39 -0
  9. data/app/assets/stylesheets/decidim/modules/_buttons.scss +76 -1
  10. data/app/assets/stylesheets/decidim/modules/_callout.scss +4 -0
  11. data/app/assets/stylesheets/decidim/modules/_cards.scss +117 -16
  12. data/app/assets/stylesheets/decidim/modules/_collapsible-list.scss +19 -0
  13. data/app/assets/stylesheets/decidim/modules/_data-picker.scss +0 -1
  14. data/app/assets/stylesheets/decidim/modules/_docs-manager.scss +16 -0
  15. data/app/assets/stylesheets/decidim/modules/_icons.scss +13 -4
  16. data/app/assets/stylesheets/decidim/modules/_margins.scss +39 -0
  17. data/app/assets/stylesheets/decidim/modules/_modules.scss +4 -0
  18. data/app/assets/stylesheets/decidim/modules/_navbar.scss +26 -0
  19. data/app/assets/stylesheets/decidim/modules/_process-phase.scss +49 -0
  20. data/app/assets/stylesheets/decidim/modules/_reveal.scss +39 -0
  21. data/app/assets/stylesheets/decidim/modules/_typography.scss +45 -0
  22. data/app/assets/stylesheets/decidim/modules/_wizard-steps.scss +45 -0
  23. data/app/assets/stylesheets/decidim/utils/_helpers.scss +14 -0
  24. data/app/assets/stylesheets/decidim/utils/_mixins.scss +34 -0
  25. data/app/assets/stylesheets/decidim/utils/_settings.scss +6 -3
  26. data/app/commands/decidim/create_report.rb +2 -2
  27. data/app/controllers/decidim/devise/invitations_controller.rb +1 -1
  28. data/app/controllers/decidim/features/base_controller.rb +1 -1
  29. data/app/controllers/decidim/locales_controller.rb +1 -1
  30. data/app/forms/decidim/registration_form.rb +1 -1
  31. data/app/helpers/decidim/decidim_form_helper.rb +26 -1
  32. data/app/helpers/decidim/meta_tags_helper.rb +2 -0
  33. data/app/helpers/decidim/resource_reference_helper.rb +24 -0
  34. data/app/helpers/decidim/scopes_helper.rb +22 -4
  35. data/app/helpers/decidim/view_hooks_helper.rb +6 -3
  36. data/app/mailers/decidim/messaging/conversation_mailer.rb +2 -0
  37. data/app/models/decidim/abilities/base_ability.rb +1 -1
  38. data/app/models/decidim/action_log.rb +57 -0
  39. data/app/models/decidim/area.rb +25 -0
  40. data/app/models/decidim/area_type.rb +20 -0
  41. data/app/models/decidim/attachment.rb +3 -0
  42. data/app/models/decidim/attachment_collection.rb +16 -0
  43. data/app/models/decidim/authorization.rb +1 -0
  44. data/app/models/decidim/categorization.rb +2 -0
  45. data/app/models/decidim/category.rb +8 -0
  46. data/app/models/decidim/feature.rb +6 -1
  47. data/app/models/decidim/moderation.rb +7 -0
  48. data/app/models/decidim/newsletter.rb +7 -0
  49. data/app/models/decidim/organization.rb +9 -0
  50. data/app/models/decidim/participatory_process_user_role.rb +9 -0
  51. data/app/models/decidim/resource_link.rb +8 -1
  52. data/app/models/decidim/scope.rb +7 -0
  53. data/app/models/decidim/static_page.rb +7 -0
  54. data/app/models/decidim/user.rb +5 -1
  55. data/app/models/decidim/user_group.rb +7 -0
  56. data/app/presenters/decidim/admin_log/feature_presenter.rb +43 -0
  57. data/app/presenters/decidim/admin_log/moderation_presenter.rb +48 -0
  58. data/app/presenters/decidim/admin_log/newsletter_presenter.rb +47 -0
  59. data/app/presenters/decidim/admin_log/newsletter_resource_presenter.rb +18 -0
  60. data/app/presenters/decidim/admin_log/organization_presenter.rb +84 -0
  61. data/app/presenters/decidim/admin_log/scope_presenter.rb +54 -0
  62. data/app/presenters/decidim/admin_log/static_page_presenter.rb +48 -0
  63. data/app/presenters/decidim/admin_log/static_page_resource_presenter.rb +18 -0
  64. data/app/presenters/decidim/admin_log/user_group_presenter.rb +31 -0
  65. data/app/presenters/decidim/admin_log/user_presenter.rb +59 -0
  66. data/app/presenters/decidim/area_presenter.rb +14 -0
  67. data/app/presenters/decidim/area_type_presenter.rb +14 -0
  68. data/app/presenters/decidim/category_presenter.rb +14 -0
  69. data/app/presenters/decidim/log/base_presenter.rb +253 -0
  70. data/app/presenters/decidim/log/diff_presenter.rb +120 -0
  71. data/app/presenters/decidim/log/resource_presenter.rb +71 -0
  72. data/app/presenters/decidim/log/space_presenter.rb +63 -0
  73. data/app/presenters/decidim/log/user_presenter.rb +85 -0
  74. data/app/presenters/decidim/log/value_types/area_presenter.rb +28 -0
  75. data/app/presenters/decidim/log/value_types/date_presenter.rb +20 -0
  76. data/app/presenters/decidim/log/value_types/default_presenter.rb +43 -0
  77. data/app/presenters/decidim/log/value_types/locale_presenter.rb +20 -0
  78. data/app/presenters/decidim/log/value_types/percentage_presenter.rb +21 -0
  79. data/app/presenters/decidim/log/value_types/scope_presenter.rb +28 -0
  80. data/app/presenters/decidim/log/value_types/scope_type_presenter.rb +28 -0
  81. data/app/presenters/decidim/user_presenter.rb +1 -1
  82. data/app/services/decidim/action_authorizer.rb +1 -1
  83. data/app/services/decidim/action_logger.rb +108 -0
  84. data/app/services/decidim/events_manager.rb +1 -1
  85. data/app/services/decidim/log/diff_changeset_calculator.rb +135 -0
  86. data/app/services/decidim/resource_search.rb +2 -8
  87. data/app/services/decidim/settings_change.rb +31 -0
  88. data/app/services/decidim/traceability.rb +57 -11
  89. data/app/types/decidim/core/component_type.rb +12 -0
  90. data/app/types/decidim/core/date_time_type.rb +12 -0
  91. data/app/types/decidim/core/date_type.rb +13 -0
  92. data/app/types/decidim/core/decidim_type.rb +23 -0
  93. data/app/types/decidim/core/localized_string_type.rb +14 -0
  94. data/app/types/decidim/core/organization_type.rb +20 -0
  95. data/app/types/decidim/core/participatory_space_type.rb +12 -0
  96. data/app/types/decidim/core/session_type.rb +19 -0
  97. data/app/types/decidim/core/statistic_type.rb +22 -0
  98. data/app/types/decidim/core/translated_field_type.rb +45 -0
  99. data/app/types/decidim/core/user_group_type.rb +39 -0
  100. data/app/types/decidim/core/user_type.rb +41 -0
  101. data/app/validators/etiquette_validator.rb +1 -1
  102. data/app/views/decidim/application/_attachments.html.erb +4 -0
  103. data/app/views/decidim/application/_collection.html.erb +14 -0
  104. data/app/views/decidim/application/_document.html.erb +19 -0
  105. data/app/views/decidim/application/_documents.html.erb +8 -23
  106. data/app/views/decidim/shared/_announcement.html.erb +3 -2
  107. data/app/views/decidim/shared/_tags.html.erb +1 -0
  108. data/app/views/decidim/widgets/_data_picker.html.erb +6 -0
  109. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  110. data/config/initializers/devise.rb +3 -3
  111. data/config/locales/ca.yml +65 -11
  112. data/config/locales/en.yml +64 -10
  113. data/config/locales/es.yml +66 -12
  114. data/config/locales/eu.yml +61 -10
  115. data/config/locales/fi.yml +64 -10
  116. data/config/locales/fr.yml +64 -10
  117. data/config/locales/gl.yml +64 -10
  118. data/config/locales/it.yml +64 -10
  119. data/config/locales/nl.yml +64 -10
  120. data/config/locales/pl.yml +60 -10
  121. data/config/locales/pt-BR.yml +64 -10
  122. data/config/locales/pt.yml +64 -10
  123. data/config/locales/sv.yml +64 -10
  124. data/config/locales/uk.yml +72 -0
  125. data/db/migrate/20170215115407_add_organization_custom_reference.rb +1 -1
  126. data/db/migrate/20170313095436_add_available_authorizations_to_organization.rb +1 -1
  127. data/db/migrate/20171207182729_create_decidim_attachment_collections.rb +12 -0
  128. data/db/migrate/20180130093153_add_action_log.rb +18 -0
  129. data/db/migrate/20180206143340_fix_reference_for_all_resources.rb +13 -0
  130. data/db/migrate/20180215104821_create_decidim_area_types.rb +11 -0
  131. data/db/migrate/20180215104945_create_decidim_areas.rb +12 -0
  132. data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
  133. data/db/migrate/20180226140756_add_version_to_action_logs.rb +19 -0
  134. data/db/migrate/20180314085339_rename_maximum_votes_per_proposal_to_threshold_per_proposal.rb +27 -0
  135. data/db/migrate/20180326075746_change_event_name_and_class_to_rename_to_publish_proposal_event.rb +17 -0
  136. data/db/seeds.rb +28 -0
  137. data/lib/decidim/abilities/participatory_process_role_ability.rb +2 -2
  138. data/lib/decidim/api/author_interface.rb +25 -0
  139. data/lib/decidim/api/component_interface.rb +16 -0
  140. data/lib/decidim/api/participatory_space_interface.rb +38 -0
  141. data/lib/decidim/authorable.rb +8 -0
  142. data/lib/decidim/core.rb +27 -9
  143. data/lib/decidim/core/engine.rb +3 -4
  144. data/lib/decidim/core/test.rb +2 -0
  145. data/lib/decidim/core/test/factories.rb +62 -6
  146. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +1 -1
  147. data/lib/decidim/core/test/shared_examples/comments_examples.rb +47 -5
  148. data/lib/decidim/core/test/shared_examples/component_type.rb +7 -0
  149. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +63 -0
  150. data/lib/decidim/core/test/shared_examples/has_attachments.rb +21 -0
  151. data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
  152. data/lib/decidim/core/test/shared_examples/simple_event.rb +27 -1
  153. data/lib/decidim/core/version.rb +1 -1
  154. data/lib/decidim/events/author_event.rb +1 -1
  155. data/lib/decidim/events/base_event.rb +1 -1
  156. data/lib/decidim/events/simple_event.rb +21 -0
  157. data/lib/decidim/exporters/excel.rb +1 -1
  158. data/lib/decidim/feature_manifest.rb +2 -0
  159. data/lib/decidim/form_builder.rb +37 -3
  160. data/lib/decidim/has_attachment_collections.rb +18 -0
  161. data/lib/decidim/has_attachments.rb +14 -0
  162. data/lib/decidim/has_category.rb +5 -0
  163. data/lib/decidim/has_reference.rb +4 -4
  164. data/lib/decidim/loggable.rb +32 -0
  165. data/lib/decidim/participable.rb +0 -2
  166. data/lib/decidim/participatory_space_manifest.rb +2 -0
  167. data/lib/decidim/publicable.rb +2 -2
  168. data/lib/decidim/query_extensions.rb +46 -14
  169. data/lib/decidim/resourceable.rb +15 -6
  170. data/lib/decidim/scopable.rb +35 -1
  171. data/lib/decidim/scopable_feature.rb +16 -0
  172. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ca.js +0 -0
  173. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.es.js +0 -0
  174. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.eu.js +0 -0
  175. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.fi.js +0 -0
  176. data/vendor/assets/javascripts/leaflet.markercluster.js +0 -0
  177. metadata +91 -38
  178. data/app/commands/decidim/remove_admin.rb +0 -25
  179. data/app/helpers/decidim/feature_reference_helper.rb +0 -25
  180. data/lib/decidim/core/api.rb +0 -13
  181. data/lib/decidim/core/api/author_interface.rb +0 -18
  182. data/lib/decidim/core/api/decidim_type.rb +0 -17
  183. data/lib/decidim/core/api/localized_string_type.rb +0 -12
  184. data/lib/decidim/core/api/process_step_type.rb +0 -19
  185. data/lib/decidim/core/api/process_type.rb +0 -17
  186. data/lib/decidim/core/api/session_type.rb +0 -17
  187. data/lib/decidim/core/api/translated_field_type.rb +0 -43
  188. data/lib/decidim/core/api/user_group_type.rb +0 -37
  189. data/lib/decidim/core/api/user_type.rb +0 -39
  190. data/lib/decidim/devise_failure_app.rb +0 -36
  191. data/lib/decidim/has_scope.rb +0 -25
  192. data/lib/decidim/i18n_exceptions.rb +0 -15
@@ -19,6 +19,8 @@ module Decidim
19
19
  attribute :name, Symbol
20
20
  attribute :hooks, Hash[Symbol => Array[Proc]], default: {}
21
21
 
22
+ attribute :query_type, String, default: "Decidim::Core::ComponentType"
23
+
22
24
  # A path with the `scss` stylesheet this engine provides. It is used to
23
25
  # mix this engine's stylesheets with the main app's stylesheets so it can
24
26
  # use the scss variables and mixins provided by Decidim::Core.
@@ -135,7 +135,7 @@ module Decidim
135
135
 
136
136
  # Public: Generates a picker field for scope selection.
137
137
  #
138
- # name - The name of the field (usually scope_id)
138
+ # attribute - The name of the field (usually scope_id)
139
139
  # options - An optional Hash with options:
140
140
  # - multiple - Multiple mode, to allow multiple scopes selection.
141
141
  # - label - Show label?
@@ -144,8 +144,12 @@ module Decidim
144
144
  #
145
145
  # Returns a String.
146
146
  def scopes_picker(attribute, options = {})
147
- picker_options = { id: "#{@object_name}_#{attribute}", class: "picker-#{options[:multiple] ? "multiple" : "single"}",
148
- name: "#{@object_name}[#{attribute}]" }
147
+ picker_options = {
148
+ id: "#{@object_name}_#{attribute}",
149
+ class: "picker-#{options[:multiple] ? "multiple" : "single"}",
150
+ name: "#{@object_name}[#{attribute}]"
151
+ }
152
+
149
153
  picker_options[:class] += " is-invalid-input" if error?(attribute)
150
154
 
151
155
  prompt_params = yield(nil)
@@ -157,6 +161,36 @@ module Decidim
157
161
  template.html_safe
158
162
  end
159
163
 
164
+ # Public: Generates a picker field for selection (either simple or multiselect).
165
+ #
166
+ # attribute - The name of the object's attribute.
167
+ # options - A Hash with options:
168
+ # - multiple: Multiple mode, to allow selection of multiple items.
169
+ # - label: Show label?
170
+ # - name: (optional) The name attribute of the input elements.
171
+ # prompt_params - Hash with options:
172
+ # - url: The url where the ajax endpoint that will fill the content of the selector popup (the prompt).
173
+ # - text: Text in the button to open the Data Picker selector.
174
+ #
175
+ # Also it should receive a block that returns a Hash with :url and :text for each selected scope
176
+ #
177
+ # Returns an html String.
178
+ def data_picker(attribute, options = {}, prompt_params = {})
179
+ picker_options = {
180
+ id: "#{@object_name}_#{attribute}",
181
+ class: "picker-#{options[:multiple] ? "multiple" : "single"}",
182
+ name: options[:name] || "#{@object_name}[#{attribute}]"
183
+ }
184
+ picker_options[:class] += " is-invalid-input" if error?(attribute)
185
+
186
+ items = object.send(attribute).collect { |item| [item, yield(item)] }
187
+ template = ""
188
+ template += label(attribute, label_for(attribute) + required_for_attribute(attribute)) unless options[:label] == false
189
+ template += @template.render("decidim/widgets/data_picker", picker_options: picker_options, prompt_params: prompt_params, items: items)
190
+ template += error_and_help_text(attribute, options)
191
+ template.html_safe
192
+ end
193
+
160
194
  # Public: Override so checkboxes are rendered before the label.
161
195
  def check_box(attribute, options = {}, checked_value = "1", unchecked_value = "0")
162
196
  custom_label(attribute, options[:label], options[:label_options], true, false) do
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ # A concern with the features needed when you want a model to be able to create
7
+ # links from it to another resource.
8
+ module HasAttachmentCollections
9
+ extend ActiveSupport::Concern
10
+
11
+ included do
12
+ has_many :attachment_collections,
13
+ class_name: "Decidim::AttachmentCollection",
14
+ dependent: :destroy,
15
+ as: :collection_for
16
+ end
17
+ end
18
+ end
@@ -28,6 +28,20 @@ module Decidim
28
28
  def documents
29
29
  @documents ||= attachments.select(&:document?)
30
30
  end
31
+
32
+ # All the attachments that are documents for this process that has a collection.
33
+ #
34
+ # Returns an Array<Attachment>
35
+ def documents_with_collection
36
+ documents.select(&:attachment_collection_id?)
37
+ end
38
+
39
+ # All the attachments that are documents for this process that not has a collection.
40
+ #
41
+ # Returns an Array<Attachment>
42
+ def documents_without_collection
43
+ documents.reject(&:attachment_collection_id?)
44
+ end
31
45
  end
32
46
  end
33
47
  end
@@ -13,6 +13,11 @@ module Decidim
13
13
 
14
14
  validate :category_belongs_to_organization
15
15
 
16
+ def previous_category
17
+ return if categorization.versions.count <= 1
18
+ Decidim::Category.find_by(id: categorization.versions.last.reify.decidim_category_id)
19
+ end
20
+
16
21
  private
17
22
 
18
23
  def category_belongs_to_organization
@@ -20,16 +20,16 @@ module Decidim
20
20
  private
21
21
 
22
22
  # Public: Calculates a unique reference for the model using the function
23
- # provided by configuration
23
+ # provided by configuration. Works for both feature resources and
24
+ # participatory spaces.
24
25
  #
25
26
  # Returns a String.
26
27
  def calculate_reference
27
- return unless feature
28
- Decidim.resource_reference_generator.call(self, feature)
28
+ Decidim.reference_generator.call(self, respond_to?(:feature) ? feature : nil)
29
29
  end
30
30
 
31
31
  # Internal: Sets the unique reference to the model. Note that if the resource
32
- # implements `Decidim::Traceable` then any normal update (or `update_attributes`)
32
+ # implements `Decidim::Traceable` then any normal update (or `update`)
33
33
  # will create a new version through an ActiveRecord update callback, but here
34
34
  # we can't track the author of the version, so we use the `update_column` method
35
35
  # which does not trigger callbacks.
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ # A concern that adds logging capability to the given model. Including this
7
+ # allows `Decidim::ActionLog` instances related to this class to properly
8
+ # render.
9
+ #
10
+ # We encourage you to overwrite the `log_presenter_class_for` class method
11
+ # to return your custom presenter for the given log type.
12
+ #
13
+ # Example:
14
+ #
15
+ # class MyModel < ApplicationRecord
16
+ # include Decidim::Loggable
17
+ # end
18
+ module Loggable
19
+ extend ActiveSupport::Concern
20
+
21
+ class_methods do
22
+ # Public: Finds the presenter class for the given log type.
23
+ #
24
+ # log - a symbol representing the log type.
25
+ #
26
+ # Returns a Class.
27
+ def log_presenter_class_for(_log)
28
+ Decidim::Log::BasePresenter
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,7 +7,6 @@ module Decidim
7
7
  module Participable
8
8
  extend ActiveSupport::Concern
9
9
 
10
- # rubocop:disable Metrics/BlockLength
11
10
  included do
12
11
  def demodulized_name
13
12
  self.class.name.demodulize
@@ -66,7 +65,6 @@ module Decidim
66
65
  self.class.participatory_space_manifest
67
66
  end
68
67
  end
69
- # rubocop:enable Metrics/BlockLength
70
68
 
71
69
  class_methods do
72
70
  def slug_format
@@ -22,6 +22,8 @@ module Decidim
22
22
  # When not explicitly set, it will use the model name.
23
23
  attribute :route_name, String
24
24
 
25
+ attribute :query_type, String, default: "Decidim::Core::ParticipatorySpaceType"
26
+
25
27
  # A String with the feature's icon. The icon must be stored in the
26
28
  # engine's assets path.
27
29
  attribute :icon, String
@@ -35,7 +35,7 @@ module Decidim
35
35
  #
36
36
  # Returns true if the record was properly saved, false otherwise.
37
37
  def publish!
38
- update_attributes!(published_at: Time.current)
38
+ update!(published_at: Time.current)
39
39
  end
40
40
 
41
41
  #
@@ -43,7 +43,7 @@ module Decidim
43
43
  #
44
44
  # Returns true if the record was properly saved, false otherwise.
45
45
  def unpublish!
46
- update_attributes!(published_at: nil)
46
+ update!(published_at: nil)
47
47
  end
48
48
  end
49
49
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/api/component_interface"
4
+ require "decidim/api/participatory_space_interface"
5
+
3
6
  module Decidim
4
7
  # This module's job is to extend the API with custom fields related to
5
8
  # decidim-core.
@@ -9,29 +12,58 @@ module Decidim
9
12
  # type - A GraphQL::BaseType to extend.
10
13
  #
11
14
  # Returns nothing.
12
- def self.extend!(type)
13
- type.define do
14
- field :processes do
15
- type !types[ProcessType]
16
- description "Lists all processes."
15
+ def self.define(type)
16
+ Decidim.participatory_space_manifests.each do |participatory_space_manifest|
17
+ type.field participatory_space_manifest.name.to_s.camelize(:lower) do
18
+ type types[participatory_space_manifest.query_type.constantize]
19
+ description "Lists all #{participatory_space_manifest.name}"
17
20
 
18
21
  resolve lambda { |_obj, _args, ctx|
19
- ParticipatoryProcesses::OrganizationPublishedParticipatoryProcesses.new(ctx[:current_organization])
22
+ participatory_space_manifest.model_class_name.constantize.public_spaces.where(
23
+ organization: ctx[:current_organization]
24
+ )
20
25
  }
21
26
  end
22
27
 
23
- field :session do
24
- type SessionType
25
- description "Return's information about the logged in user"
28
+ type.field participatory_space_manifest.name.to_s.singularize.camelize(:lower) do
29
+ type participatory_space_manifest.query_type.constantize
30
+ description "Finds a #{participatory_space_manifest.name.to_s.singularize}"
31
+ argument :id, !types.ID, "The ID of the #{participatory_space_manifest.name.to_s.singularize}"
26
32
 
27
- resolve lambda { |_obj, _args, ctx|
28
- ctx[:current_user]
33
+ resolve lambda { |_obj, args, ctx|
34
+ participatory_space_manifest.model_class_name.constantize.public_spaces.find_by(
35
+ organization: ctx[:current_organization],
36
+ id: args[:id]
37
+ )
29
38
  }
30
39
  end
40
+ end
31
41
 
32
- field :decidim, DecidimType, "Decidim's framework properties." do
33
- resolve ->(_obj, _args, _ctx) { Decidim }
34
- end
42
+ type.field :component, Decidim::Core::ComponentInterface do
43
+ description "Lists the components this space contains."
44
+ argument :id, !types.ID, "The ID of the component to be found"
45
+
46
+ resolve lambda { |_, args, ctx|
47
+ feature = Decidim::Feature.published.find_by(id: args[:id])
48
+ feature&.organization == ctx[:current_organization] ? feature : nil
49
+ }
50
+ end
51
+
52
+ type.field :session do
53
+ type Core::SessionType
54
+ description "Return's information about the logged in user"
55
+
56
+ resolve lambda { |_obj, _args, ctx|
57
+ ctx[:current_user]
58
+ }
59
+ end
60
+
61
+ type.field :decidim, Core::DecidimType, "Decidim's framework properties." do
62
+ resolve ->(_obj, _args, _ctx) { Decidim }
63
+ end
64
+
65
+ type.field :organization, Core::OrganizationType, "The current organization" do
66
+ resolve ->(_obj, _args, ctx) { ctx[:current_organization] }
35
67
  end
36
68
  end
37
69
  end
@@ -63,12 +63,21 @@ module Decidim
63
63
  transaction do
64
64
  resource_links_from.where(name: link_name).delete_all
65
65
  Array.wrap(resources).each do |resource|
66
- Decidim::ResourceLink.create!(
67
- from: self,
68
- to: resource,
69
- name: link_name,
70
- data: data
71
- )
66
+ payload = {
67
+ from_type: self.class.name,
68
+ from_id: id,
69
+ to_type: resource.class.name,
70
+ to_id: resource.id
71
+ }
72
+ event_name = "decidim.resourceable.#{link_name}.created"
73
+ ActiveSupport::Notifications.instrument event_name, this: payload do
74
+ Decidim::ResourceLink.create!(
75
+ from: self,
76
+ to: resource,
77
+ name: link_name,
78
+ data: data
79
+ )
80
+ end
72
81
  end
73
82
  end
74
83
  end
@@ -3,7 +3,22 @@
3
3
  require "active_support/concern"
4
4
 
5
5
  module Decidim
6
- # This concern contains the logic related to scopes.
6
+ # A concern with the features needed when you want a model to have a scope.
7
+ #
8
+ # The including model needs to implement the following interface:
9
+ #
10
+ # @abstract An instance method that returns the id of the scope
11
+ # @method decidim_scope_id
12
+ # @return [Integer]
13
+ #
14
+ # @abstract An instance method that states whether scopes are enabled or not
15
+ # @method scopes_enabled
16
+ # @return [Boolean]
17
+ #
18
+ # @abstract An method that gives an associated organization
19
+ # @method organization
20
+ # @return [Decidim::Organization]
21
+ #
7
22
  module Scopable
8
23
  extend ActiveSupport::Concern
9
24
 
@@ -12,6 +27,10 @@ module Decidim
12
27
  foreign_key: "decidim_scope_id",
13
28
  class_name: "Decidim::Scope",
14
29
  optional: true
30
+
31
+ delegate :scopes, to: :organization
32
+
33
+ validate :scope_belongs_to_organization
15
34
  end
16
35
 
17
36
  # Gets the children scopes of the object's scope.
@@ -29,5 +48,20 @@ module Decidim
29
48
  def has_subscopes?
30
49
  scopes_enabled && subscopes.any?
31
50
  end
51
+
52
+ # Whether the passed subscope is out of the resource's scope.
53
+ #
54
+ # Returns a boolean
55
+ def out_of_scope?(subscope)
56
+ scope && !scope.ancestor_of?(subscope)
57
+ end
58
+
59
+ private
60
+
61
+ def scope_belongs_to_organization
62
+ return if !scope || !organization
63
+
64
+ errors.add(:scope, :invalid) unless organization.scopes.where(id: scope.id).exists?
65
+ end
32
66
  end
33
67
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ # This concern contains the logic related to scopes included by components.
7
+ module ScopableFeature
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ include Scopable
12
+
13
+ delegate :scopes_enabled, to: :participatory_space
14
+ end
15
+ end
16
+ end
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-02-27 00:00:00.000000000 Z
13
+ date: 2018-03-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: active_link_to
@@ -32,14 +32,14 @@ dependencies:
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '7.1'
35
+ version: '8.0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '7.1'
42
+ version: '8.0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: cancancan
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -302,16 +302,22 @@ dependencies:
302
302
  name: pg
303
303
  requirement: !ruby/object:Gem::Requirement
304
304
  requirements:
305
- - - "~>"
305
+ - - ">="
306
+ - !ruby/object:Gem::Version
307
+ version: '0.18'
308
+ - - "<"
306
309
  - !ruby/object:Gem::Version
307
- version: 0.21.0
310
+ version: '2'
308
311
  type: :runtime
309
312
  prerelease: false
310
313
  version_requirements: !ruby/object:Gem::Requirement
311
314
  requirements:
312
- - - "~>"
315
+ - - ">="
316
+ - !ruby/object:Gem::Version
317
+ version: '0.18'
318
+ - - "<"
313
319
  - !ruby/object:Gem::Version
314
- version: 0.21.0
320
+ version: '2'
315
321
  - !ruby/object:Gem::Dependency
316
322
  name: premailer-rails
317
323
  requirement: !ruby/object:Gem::Requirement
@@ -332,20 +338,14 @@ dependencies:
332
338
  requirements:
333
339
  - - "~>"
334
340
  - !ruby/object:Gem::Version
335
- version: '5.1'
336
- - - "<"
337
- - !ruby/object:Gem::Version
338
- version: '5.2'
341
+ version: 5.1.5
339
342
  type: :runtime
340
343
  prerelease: false
341
344
  version_requirements: !ruby/object:Gem::Requirement
342
345
  requirements:
343
346
  - - "~>"
344
347
  - !ruby/object:Gem::Version
345
- version: '5.1'
346
- - - "<"
347
- - !ruby/object:Gem::Version
348
- version: '5.2'
348
+ version: 5.1.5
349
349
  - !ruby/object:Gem::Dependency
350
350
  name: rails-i18n
351
351
  requirement: !ruby/object:Gem::Requirement
@@ -366,14 +366,14 @@ dependencies:
366
366
  requirements:
367
367
  - - "~>"
368
368
  - !ruby/object:Gem::Version
369
- version: 0.10.0
369
+ version: 0.11.0
370
370
  type: :runtime
371
371
  prerelease: false
372
372
  version_requirements: !ruby/object:Gem::Requirement
373
373
  requirements:
374
374
  - - "~>"
375
375
  - !ruby/object:Gem::Version
376
- version: 0.10.0
376
+ version: 0.11.0
377
377
  - !ruby/object:Gem::Dependency
378
378
  name: redis
379
379
  requirement: !ruby/object:Gem::Requirement
@@ -506,28 +506,28 @@ dependencies:
506
506
  requirements:
507
507
  - - '='
508
508
  - !ruby/object:Gem::Version
509
- version: 0.9.3
509
+ version: 0.10.0
510
510
  type: :runtime
511
511
  prerelease: false
512
512
  version_requirements: !ruby/object:Gem::Requirement
513
513
  requirements:
514
514
  - - '='
515
515
  - !ruby/object:Gem::Version
516
- version: 0.9.3
516
+ version: 0.10.0
517
517
  - !ruby/object:Gem::Dependency
518
518
  name: decidim-dev
519
519
  requirement: !ruby/object:Gem::Requirement
520
520
  requirements:
521
521
  - - '='
522
522
  - !ruby/object:Gem::Version
523
- version: 0.9.3
523
+ version: 0.10.0
524
524
  type: :development
525
525
  prerelease: false
526
526
  version_requirements: !ruby/object:Gem::Requirement
527
527
  requirements:
528
528
  - - '='
529
529
  - !ruby/object:Gem::Version
530
- version: 0.9.3
530
+ version: 0.10.0
531
531
  description: Adds core features so other engines can hook into the framework.
532
532
  email:
533
533
  - josepjaume@gmail.com
@@ -605,15 +605,18 @@ files:
605
605
  - app/assets/stylesheets/decidim/map.css
606
606
  - app/assets/stylesheets/decidim/modules/_address.scss
607
607
  - app/assets/stylesheets/decidim/modules/_author-avatar.scss
608
+ - app/assets/stylesheets/decidim/modules/_block-banner.scss
608
609
  - app/assets/stylesheets/decidim/modules/_buttons.scss
609
610
  - app/assets/stylesheets/decidim/modules/_callout.scss
610
611
  - app/assets/stylesheets/decidim/modules/_card-grid.scss
611
612
  - app/assets/stylesheets/decidim/modules/_cards.scss
613
+ - app/assets/stylesheets/decidim/modules/_collapsible-list.scss
612
614
  - app/assets/stylesheets/decidim/modules/_comments.scss
613
615
  - app/assets/stylesheets/decidim/modules/_cookie-bar.scss
614
616
  - app/assets/stylesheets/decidim/modules/_data-picker.scss
615
617
  - app/assets/stylesheets/decidim/modules/_datepicker.scss
616
618
  - app/assets/stylesheets/decidim/modules/_definition-data.scss
619
+ - app/assets/stylesheets/decidim/modules/_docs-manager.scss
617
620
  - app/assets/stylesheets/decidim/modules/_extra.scss
618
621
  - app/assets/stylesheets/decidim/modules/_filter-tags.scss
619
622
  - app/assets/stylesheets/decidim/modules/_filters.scss
@@ -651,6 +654,7 @@ files:
651
654
  - app/assets/stylesheets/decidim/modules/_typography.scss
652
655
  - app/assets/stylesheets/decidim/modules/_user-form.scss
653
656
  - app/assets/stylesheets/decidim/modules/_video.scss
657
+ - app/assets/stylesheets/decidim/modules/_wizard-steps.scss
654
658
  - app/assets/stylesheets/decidim/utils/_fontface.scss
655
659
  - app/assets/stylesheets/decidim/utils/_helpers.scss
656
660
  - app/assets/stylesheets/decidim/utils/_keyframes.scss
@@ -667,7 +671,6 @@ files:
667
671
  - app/commands/decidim/invite_user_again.rb
668
672
  - app/commands/decidim/messaging/reply_to_conversation.rb
669
673
  - app/commands/decidim/messaging/start_conversation.rb
670
- - app/commands/decidim/remove_admin.rb
671
674
  - app/commands/decidim/unsubscribe_settings.rb
672
675
  - app/commands/decidim/update_account.rb
673
676
  - app/commands/decidim/update_notifications_settings.rb
@@ -732,7 +735,6 @@ files:
732
735
  - app/helpers/decidim/cta_button_helper.rb
733
736
  - app/helpers/decidim/decidim_form_helper.rb
734
737
  - app/helpers/decidim/feature_path_helper.rb
735
- - app/helpers/decidim/feature_reference_helper.rb
736
738
  - app/helpers/decidim/filters_helper.rb
737
739
  - app/helpers/decidim/humanize_booleans_helper.rb
738
740
  - app/helpers/decidim/icon_helper.rb
@@ -750,6 +752,7 @@ files:
750
752
  - app/helpers/decidim/participatory_space_helpers.rb
751
753
  - app/helpers/decidim/replace_buttons_helper.rb
752
754
  - app/helpers/decidim/resource_helper.rb
755
+ - app/helpers/decidim/resource_reference_helper.rb
753
756
  - app/helpers/decidim/sanitize_helper.rb
754
757
  - app/helpers/decidim/scopes_helper.rb
755
758
  - app/helpers/decidim/traceability_helper.rb
@@ -778,8 +781,12 @@ files:
778
781
  - app/models/decidim/abilities/participatory_process_collaborator_ability.rb
779
782
  - app/models/decidim/abilities/participatory_process_moderator_ability.rb
780
783
  - app/models/decidim/abilities/user_manager_ability.rb
784
+ - app/models/decidim/action_log.rb
781
785
  - app/models/decidim/application_record.rb
786
+ - app/models/decidim/area.rb
787
+ - app/models/decidim/area_type.rb
782
788
  - app/models/decidim/attachment.rb
789
+ - app/models/decidim/attachment_collection.rb
783
790
  - app/models/decidim/authorization.rb
784
791
  - app/models/decidim/categorization.rb
785
792
  - app/models/decidim/category.rb
@@ -804,8 +811,33 @@ files:
804
811
  - app/models/decidim/user.rb
805
812
  - app/models/decidim/user_group.rb
806
813
  - app/models/decidim/user_group_membership.rb
814
+ - app/presenters/decidim/admin_log/feature_presenter.rb
815
+ - app/presenters/decidim/admin_log/moderation_presenter.rb
816
+ - app/presenters/decidim/admin_log/newsletter_presenter.rb
817
+ - app/presenters/decidim/admin_log/newsletter_resource_presenter.rb
818
+ - app/presenters/decidim/admin_log/organization_presenter.rb
819
+ - app/presenters/decidim/admin_log/scope_presenter.rb
820
+ - app/presenters/decidim/admin_log/static_page_presenter.rb
821
+ - app/presenters/decidim/admin_log/static_page_resource_presenter.rb
822
+ - app/presenters/decidim/admin_log/user_group_presenter.rb
823
+ - app/presenters/decidim/admin_log/user_presenter.rb
824
+ - app/presenters/decidim/area_presenter.rb
825
+ - app/presenters/decidim/area_type_presenter.rb
826
+ - app/presenters/decidim/category_presenter.rb
807
827
  - app/presenters/decidim/home_stats_presenter.rb
808
828
  - app/presenters/decidim/inline_menu_presenter.rb
829
+ - app/presenters/decidim/log/base_presenter.rb
830
+ - app/presenters/decidim/log/diff_presenter.rb
831
+ - app/presenters/decidim/log/resource_presenter.rb
832
+ - app/presenters/decidim/log/space_presenter.rb
833
+ - app/presenters/decidim/log/user_presenter.rb
834
+ - app/presenters/decidim/log/value_types/area_presenter.rb
835
+ - app/presenters/decidim/log/value_types/date_presenter.rb
836
+ - app/presenters/decidim/log/value_types/default_presenter.rb
837
+ - app/presenters/decidim/log/value_types/locale_presenter.rb
838
+ - app/presenters/decidim/log/value_types/percentage_presenter.rb
839
+ - app/presenters/decidim/log/value_types/scope_presenter.rb
840
+ - app/presenters/decidim/log/value_types/scope_type_presenter.rb
809
841
  - app/presenters/decidim/menu_item_presenter.rb
810
842
  - app/presenters/decidim/menu_presenter.rb
811
843
  - app/presenters/decidim/resource_locator_presenter.rb
@@ -816,13 +848,28 @@ files:
816
848
  - app/queries/decidim/stats_users_count.rb
817
849
  - app/scrubbers/decidim/user_input_scrubber.rb
818
850
  - app/services/decidim/action_authorizer.rb
851
+ - app/services/decidim/action_logger.rb
819
852
  - app/services/decidim/email_notification_generator.rb
820
853
  - app/services/decidim/events_manager.rb
854
+ - app/services/decidim/log/diff_changeset_calculator.rb
821
855
  - app/services/decidim/notification_generator.rb
822
856
  - app/services/decidim/notification_generator_for_recipient.rb
823
857
  - app/services/decidim/resource_search.rb
858
+ - app/services/decidim/settings_change.rb
824
859
  - app/services/decidim/static_map_generator.rb
825
860
  - app/services/decidim/traceability.rb
861
+ - app/types/decidim/core/component_type.rb
862
+ - app/types/decidim/core/date_time_type.rb
863
+ - app/types/decidim/core/date_type.rb
864
+ - app/types/decidim/core/decidim_type.rb
865
+ - app/types/decidim/core/localized_string_type.rb
866
+ - app/types/decidim/core/organization_type.rb
867
+ - app/types/decidim/core/participatory_space_type.rb
868
+ - app/types/decidim/core/session_type.rb
869
+ - app/types/decidim/core/statistic_type.rb
870
+ - app/types/decidim/core/translated_field_type.rb
871
+ - app/types/decidim/core/user_group_type.rb
872
+ - app/types/decidim/core/user_type.rb
826
873
  - app/uploaders/decidim/application_uploader.rb
827
874
  - app/uploaders/decidim/attachment_uploader.rb
828
875
  - app/uploaders/decidim/avatar_uploader.rb
@@ -841,6 +888,8 @@ files:
841
888
  - app/views/decidim/account/delete.html.erb
842
889
  - app/views/decidim/account/show.html.erb
843
890
  - app/views/decidim/application/_attachments.html.erb
891
+ - app/views/decidim/application/_collection.html.erb
892
+ - app/views/decidim/application/_document.html.erb
844
893
  - app/views/decidim/application/_documents.html.erb
845
894
  - app/views/decidim/application/_photos.html.erb
846
895
  - app/views/decidim/cookie_policy/accept.js.erb
@@ -901,6 +950,7 @@ files:
901
950
  - app/views/decidim/shared/_static_map.html.erb
902
951
  - app/views/decidim/shared/_tags.html.erb
903
952
  - app/views/decidim/shared/_version_author.html.erb
953
+ - app/views/decidim/widgets/_data_picker.html.erb
904
954
  - app/views/decidim/widgets/show.js.erb
905
955
  - app/views/devise/mailer/confirmation_instructions.html.erb
906
956
  - app/views/devise/mailer/invitation_instructions.html.erb
@@ -1041,6 +1091,7 @@ files:
1041
1091
  - db/migrate/20171107103253_create_versions.rb
1042
1092
  - db/migrate/20171107103254_add_object_changes_to_versions.rb
1043
1093
  - db/migrate/20171117100533_create_decidim_receipts.rb
1094
+ - db/migrate/20171207182729_create_decidim_attachment_collections.rb
1044
1095
  - db/migrate/20171212103803_create_unique_nicknames.rb
1045
1096
  - db/migrate/20180115090038_extend_user_profile.rb
1046
1097
  - db/migrate/20180123125308_add_enable_omnipresent_banner_to_decidim_organizations.rb
@@ -1048,11 +1099,21 @@ files:
1048
1099
  - db/migrate/20180123125432_add_omnipresent_banner_short_description_to_decidim_organizations.rb
1049
1100
  - db/migrate/20180123125452_add_omnipresent_banner_url_to_decidim_organizations.rb
1050
1101
  - db/migrate/20180125063433_add_highlighted_content_banner_to_decidim_organizations.rb
1102
+ - db/migrate/20180130093153_add_action_log.rb
1103
+ - db/migrate/20180206143340_fix_reference_for_all_resources.rb
1104
+ - db/migrate/20180215104821_create_decidim_area_types.rb
1105
+ - db/migrate/20180215104945_create_decidim_areas.rb
1051
1106
  - db/migrate/20180221101934_fix_nickname_index.rb
1107
+ - db/migrate/20180226140756_add_version_to_action_logs.rb
1108
+ - db/migrate/20180314085339_rename_maximum_votes_per_proposal_to_threshold_per_proposal.rb
1109
+ - db/migrate/20180326075746_change_event_name_and_class_to_rename_to_publish_proposal_event.rb
1052
1110
  - db/seeds.rb
1053
1111
  - db/seeds/homepage_image.jpg
1054
1112
  - lib/decidim/abilities.rb
1055
1113
  - lib/decidim/abilities/participatory_process_role_ability.rb
1114
+ - lib/decidim/api/author_interface.rb
1115
+ - lib/decidim/api/component_interface.rb
1116
+ - lib/decidim/api/participatory_space_interface.rb
1056
1117
  - lib/decidim/attributes.rb
1057
1118
  - lib/decidim/attributes/time_with_zone.rb
1058
1119
  - lib/decidim/authorable.rb
@@ -1065,24 +1126,16 @@ files:
1065
1126
  - lib/decidim/content_renderers/base_renderer.rb
1066
1127
  - lib/decidim/content_renderers/user_renderer.rb
1067
1128
  - lib/decidim/core.rb
1068
- - lib/decidim/core/api.rb
1069
- - lib/decidim/core/api/author_interface.rb
1070
- - lib/decidim/core/api/decidim_type.rb
1071
- - lib/decidim/core/api/localized_string_type.rb
1072
- - lib/decidim/core/api/process_step_type.rb
1073
- - lib/decidim/core/api/process_type.rb
1074
- - lib/decidim/core/api/session_type.rb
1075
- - lib/decidim/core/api/translated_field_type.rb
1076
- - lib/decidim/core/api/user_group_type.rb
1077
- - lib/decidim/core/api/user_type.rb
1078
1129
  - lib/decidim/core/engine.rb
1079
1130
  - lib/decidim/core/test.rb
1080
1131
  - lib/decidim/core/test/factories.rb
1081
1132
  - lib/decidim/core/test/shared_examples/announcements_examples.rb
1082
1133
  - lib/decidim/core/test/shared_examples/authorable.rb
1083
1134
  - lib/decidim/core/test/shared_examples/comments_examples.rb
1135
+ - lib/decidim/core/test/shared_examples/component_type.rb
1084
1136
  - lib/decidim/core/test/shared_examples/errors.rb
1085
1137
  - lib/decidim/core/test/shared_examples/follows_examples.rb
1138
+ - lib/decidim/core/test/shared_examples/has_attachment_collections.rb
1086
1139
  - lib/decidim/core/test/shared_examples/has_attachments.rb
1087
1140
  - lib/decidim/core/test/shared_examples/has_category.rb
1088
1141
  - lib/decidim/core/test/shared_examples/has_feature.rb
@@ -1098,7 +1151,6 @@ files:
1098
1151
  - lib/decidim/core/test/shared_examples/simple_event.rb
1099
1152
  - lib/decidim/core/test/shared_examples/user_localised_email_examples.rb
1100
1153
  - lib/decidim/core/version.rb
1101
- - lib/decidim/devise_failure_app.rb
1102
1154
  - lib/decidim/engine_router.rb
1103
1155
  - lib/decidim/events.rb
1104
1156
  - lib/decidim/events/author_event.rb
@@ -1124,13 +1176,13 @@ files:
1124
1176
  - lib/decidim/followable.rb
1125
1177
  - lib/decidim/form_builder.rb
1126
1178
  - lib/decidim/friendly_dates.rb
1179
+ - lib/decidim/has_attachment_collections.rb
1127
1180
  - lib/decidim/has_attachments.rb
1128
1181
  - lib/decidim/has_category.rb
1129
1182
  - lib/decidim/has_feature.rb
1130
1183
  - lib/decidim/has_reference.rb
1131
- - lib/decidim/has_scope.rb
1132
1184
  - lib/decidim/has_settings.rb
1133
- - lib/decidim/i18n_exceptions.rb
1185
+ - lib/decidim/loggable.rb
1134
1186
  - lib/decidim/manifest_registry.rb
1135
1187
  - lib/decidim/menu.rb
1136
1188
  - lib/decidim/menu_item.rb
@@ -1148,6 +1200,7 @@ files:
1148
1200
  - lib/decidim/resource_manifest.rb
1149
1201
  - lib/decidim/resourceable.rb
1150
1202
  - lib/decidim/scopable.rb
1203
+ - lib/decidim/scopable_feature.rb
1151
1204
  - lib/decidim/settings_manifest.rb
1152
1205
  - lib/decidim/stats_registry.rb
1153
1206
  - lib/decidim/traceable.rb
@@ -1206,7 +1259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1206
1259
  version: '0'
1207
1260
  requirements: []
1208
1261
  rubyforge_project:
1209
- rubygems_version: 2.7.3
1262
+ rubygems_version: 2.7.6
1210
1263
  signing_key:
1211
1264
  specification_version: 4
1212
1265
  summary: The core of the Decidim framework.