decidim-sortitions 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +31 -0
  4. data/Rakefile +3 -0
  5. data/app/assets/config/decidim_sortitions_manifest.css +1 -0
  6. data/app/assets/config/decidim_sortitions_manifest.js +1 -0
  7. data/app/assets/images/decidim/sortitions/icon.svg +4 -0
  8. data/app/assets/javascripts/decidim/sortitions/admin/sortitions.js +2 -0
  9. data/app/assets/javascripts/decidim/sortitions/social_share.js +2 -0
  10. data/app/assets/stylesheets/decidim/sortitions/_sortitions.scss +45 -0
  11. data/app/assets/stylesheets/decidim/sortitions/social_share.css.scss +18 -0
  12. data/app/commands/decidim/sortitions/admin/create_sortition.rb +81 -0
  13. data/app/commands/decidim/sortitions/admin/destroy_sortition.rb +45 -0
  14. data/app/commands/decidim/sortitions/admin/update_sortition.rb +45 -0
  15. data/app/controllers/concerns/decidim/sortitions/orderable.rb +50 -0
  16. data/app/controllers/decidim/sortitions/admin/application_controller.rb +28 -0
  17. data/app/controllers/decidim/sortitions/admin/sortitions_controller.rb +104 -0
  18. data/app/controllers/decidim/sortitions/application_controller.rb +13 -0
  19. data/app/controllers/decidim/sortitions/sortition_widgets_controller.rb +20 -0
  20. data/app/controllers/decidim/sortitions/sortitions_controller.rb +45 -0
  21. data/app/events/decidim/sortitions/create_sortition_event.rb +8 -0
  22. data/app/forms/decidim/sortitions/admin/destroy_sortition_form.rb +20 -0
  23. data/app/forms/decidim/sortitions/admin/edit_sortition_form.rb +22 -0
  24. data/app/forms/decidim/sortitions/admin/sortition_form.rb +44 -0
  25. data/app/helpers/decidim/sortitions/admin/sortitions_helper.rb +24 -0
  26. data/app/helpers/decidim/sortitions/sortitions_helper.rb +38 -0
  27. data/app/models/decidim/sortitions/abilities/admin/admin_ability.rb +23 -0
  28. data/app/models/decidim/sortitions/abilities/admin/process_admin_ability.rb +46 -0
  29. data/app/models/decidim/sortitions/application_record.rb +9 -0
  30. data/app/models/decidim/sortitions/sortition.rb +81 -0
  31. data/app/queries/decidim/sortitions/admin/participatory_space_proposal_features.rb +29 -0
  32. data/app/queries/decidim/sortitions/admin/participatory_space_proposals.rb +49 -0
  33. data/app/queries/decidim/sortitions/filtered_sortitions.rb +37 -0
  34. data/app/services/decidim/sortitions/admin/draw.rb +31 -0
  35. data/app/services/decidim/sortitions/sortition_search.rb +47 -0
  36. data/app/views/decidim/sortitions/admin/sortitions/_form.html.erb +41 -0
  37. data/app/views/decidim/sortitions/admin/sortitions/confirm_destroy.html.erb +21 -0
  38. data/app/views/decidim/sortitions/admin/sortitions/edit.html.erb +27 -0
  39. data/app/views/decidim/sortitions/admin/sortitions/index.html.erb +57 -0
  40. data/app/views/decidim/sortitions/admin/sortitions/new.html.erb +11 -0
  41. data/app/views/decidim/sortitions/admin/sortitions/show.html.erb +55 -0
  42. data/app/views/decidim/sortitions/sortition_widgets/show.html.erb +4 -0
  43. data/app/views/decidim/sortitions/sortitions/_count.html.erb +1 -0
  44. data/app/views/decidim/sortitions/sortitions/_filters.html.erb +31 -0
  45. data/app/views/decidim/sortitions/sortitions/_filters_small_view.html.erb +18 -0
  46. data/app/views/decidim/sortitions/sortitions/_filters_small_view0.html.erb +18 -0
  47. data/app/views/decidim/sortitions/sortitions/_linked_sortitions.html.erb +29 -0
  48. data/app/views/decidim/sortitions/sortitions/_proposal.html.erb +24 -0
  49. data/app/views/decidim/sortitions/sortitions/_proposal_badge.html.erb +3 -0
  50. data/app/views/decidim/sortitions/sortitions/_results_count.html.erb +8 -0
  51. data/app/views/decidim/sortitions/sortitions/_sortition.html.erb +25 -0
  52. data/app/views/decidim/sortitions/sortitions/_sortition_author.html.erb +17 -0
  53. data/app/views/decidim/sortitions/sortitions/_sortition_cancel_author.html.erb +17 -0
  54. data/app/views/decidim/sortitions/sortitions/_sortitions.html.erb +14 -0
  55. data/app/views/decidim/sortitions/sortitions/_sortitions_count.html.erb +1 -0
  56. data/app/views/decidim/sortitions/sortitions/_tags.html.erb +16 -0
  57. data/app/views/decidim/sortitions/sortitions/index.html.erb +21 -0
  58. data/app/views/decidim/sortitions/sortitions/index.js.erb +10 -0
  59. data/app/views/decidim/sortitions/sortitions/show.html.erb +134 -0
  60. data/config/initializers/social_share_button.rb +5 -0
  61. data/config/locales/ca.yml +155 -0
  62. data/config/locales/en.yml +154 -0
  63. data/config/locales/es.yml +155 -0
  64. data/db/migrate/20171215161358_create_decidim_module_sortitions_sortitions.rb +23 -0
  65. data/db/migrate/20171220164658_add_witnesses_to_sortitions.rb +7 -0
  66. data/db/migrate/20171220164744_add_additional_info_to_sortitions.rb +7 -0
  67. data/db/migrate/20180102100101_add_author_to_sortitions.rb +7 -0
  68. data/db/migrate/20180102101128_add_reference_to_sortitions.rb +8 -0
  69. data/db/migrate/20180103082645_add_title_to_sortition.rb +7 -0
  70. data/db/migrate/20180103123055_drop_decidim_category_id_from_sortitions.rb +13 -0
  71. data/db/migrate/20180103160301_add_cancel_data_to_sortition.rb +9 -0
  72. data/db/migrate/20180104143054_make_sortition_reference_nullable.rb +7 -0
  73. data/db/migrate/20180104145344_add_candidate_proposals_to_sortitions.rb +7 -0
  74. data/db/migrate/20180108132729_rename_sortitions_table.rb +7 -0
  75. data/lib/decidim/sortitions.rb +24 -0
  76. data/lib/decidim/sortitions/admin.rb +10 -0
  77. data/lib/decidim/sortitions/admin_engine.rb +35 -0
  78. data/lib/decidim/sortitions/engine.rb +26 -0
  79. data/lib/decidim/sortitions/feature.rb +43 -0
  80. data/lib/decidim/sortitions/test/factories.rb +37 -0
  81. data/lib/decidim/sortitions/version.rb +7 -0
  82. metadata +208 -0
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Sortitions
5
+ # This module contains all the domain logic associated to Decidim's Sortitions
6
+ # component admin panel.
7
+ module Admin
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Sortitions
5
+ # This is the engine that runs on the administration interface of `decidim_sorititions`.
6
+ # It mostly handles rendering the created projects associated to a participatory
7
+ # process.
8
+ class AdminEngine < ::Rails::Engine
9
+ isolate_namespace Decidim::Sortitions::Admin
10
+
11
+ paths["db/migrate"] = nil
12
+
13
+ routes do
14
+ resources :sortitions do
15
+ get "confirm_destroy", on: :member
16
+ end
17
+
18
+ root to: "sortitions#index"
19
+ end
20
+
21
+ initializer "decidim_sortitions_admin.inject_abilities_to_user" do |_app|
22
+ Decidim.configure do |config|
23
+ config.admin_abilities += [
24
+ "Decidim::Sortitions::Abilities::Admin::AdminAbility",
25
+ "Decidim::Sortitions::Abilities::Admin::ProcessAdminAbility"
26
+ ]
27
+ end
28
+ end
29
+
30
+ def load_seed
31
+ nil
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails"
4
+ require "active_support/all"
5
+
6
+ require "decidim/core"
7
+
8
+ module Decidim
9
+ module Sortitions
10
+ # Decidim's Sortitions Rails Engine.
11
+ class Engine < ::Rails::Engine
12
+ isolate_namespace Decidim::Sortitions
13
+
14
+ routes do
15
+ resources :sortitions, only: [:index, :show] do
16
+ resource :sortition_widget, only: :show, path: "embed"
17
+ end
18
+ root to: "sortitions#index"
19
+ end
20
+
21
+ initializer "decidim_sorititions.assets" do |app|
22
+ app.config.assets.precompile += %w(decidim_sortitions_manifest.js decidim_sortitions_manifest.css)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ Decidim.register_feature(:sortitions) do |feature|
4
+ feature.engine = Decidim::Sortitions::Engine
5
+ feature.admin_engine = Decidim::Sortitions::AdminEngine
6
+ feature.icon = "decidim/sortitions/icon.svg"
7
+ feature.stylesheet = "decidim/sortitions/sortitions"
8
+
9
+ feature.on(:before_destroy) do |instance|
10
+ if Decidim::Sortitions::Sortition.where(feature: instance).any?
11
+ raise StandardError, "Can't remove this feature"
12
+ end
13
+ end
14
+
15
+ # These actions permissions can be configured in the admin panel
16
+ feature.actions = %w()
17
+
18
+ feature.settings(:global) do |settings|
19
+ settings.attribute :comments_enabled, type: :boolean, default: true
20
+ end
21
+
22
+ # feature.settings(:step) do |settings|
23
+ # end
24
+
25
+ # Register an optional resource that can be referenced from other resources.
26
+ feature.register_resource do |resource|
27
+ resource.model_class_name = "Decidim::Sortitions::Sortition"
28
+ resource.template = "decidim/sortitions/sortitions/linked_sortitions"
29
+ end
30
+
31
+ feature.register_stat :sortitions_count, primary: true, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |features, start_at, end_at|
32
+ Decidim::Sortitions::FilteredSortitions.for(features, start_at, end_at).count
33
+ end
34
+
35
+ feature.seeds do |participatory_space|
36
+ feature = Decidim::Feature.create!(
37
+ name: Decidim::Features::Namer.new(participatory_space.organization.available_locales, :sortitions).i18n_name,
38
+ manifest_name: :sortitions,
39
+ published_at: Time.current,
40
+ participatory_space: participatory_space
41
+ )
42
+ end
43
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/faker/localized"
4
+ require "decidim/core/test/factories"
5
+ require "decidim/participatory_processes/test/factories"
6
+
7
+ FactoryBot.define do
8
+ factory :sortition_feature, parent: :feature do
9
+ name { Decidim::Features::Namer.new(participatory_space.organization.available_locales, :sortitions).i18n_name }
10
+ manifest_name :sortitions
11
+ participatory_space { create(:participatory_process, :with_steps, organization: organization) }
12
+ end
13
+
14
+ factory :sortition, class: "Decidim::Sortitions::Sortition" do
15
+ feature { create(:sortition_feature) }
16
+ decidim_proposals_feature { create(:proposal_feature, organization: feature.organization) }
17
+
18
+ title { Decidim::Faker::Localized.sentence(3) }
19
+ author do
20
+ create(:user, :admin, organization: feature.organization) if feature
21
+ end
22
+
23
+ dice { Faker::Number.between(1, 6).to_i }
24
+ target_items { Faker::Number.between(1, 5).to_i }
25
+ request_timestamp { Time.now.utc }
26
+ witnesses { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
27
+ additional_info { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
28
+ selected_proposals { create_list(:proposal, target_items, feature: decidim_proposals_feature).pluck(:id) }
29
+ candidate_proposals { selected_proposals }
30
+
31
+ trait :cancelled do
32
+ cancelled_on { Time.now.utc }
33
+ cancel_reason { Decidim::Faker::Localized.wrapped("<p>", "</p>") { Decidim::Faker::Localized.sentence(4) } }
34
+ cancelled_by_user { create(:user, :admin, organization: feature.organization) if feature }
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Sortitions
5
+ VERSION = "0.9.0"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,208 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: decidim-sortitions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Juan Salvador Perez Garcia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: decidim-admin
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: decidim-comments
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: decidim-core
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.9.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 5.1.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 5.1.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: social-share-button
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.0.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: decidim-dev
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.9.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.0
97
+ description: This module makes possible to select amont a set of proposal by sortition
98
+ email:
99
+ - jsperezg@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - LICENSE-AGPLv3.txt
105
+ - README.md
106
+ - Rakefile
107
+ - app/assets/config/decidim_sortitions_manifest.css
108
+ - app/assets/config/decidim_sortitions_manifest.js
109
+ - app/assets/images/decidim/sortitions/icon.svg
110
+ - app/assets/javascripts/decidim/sortitions/admin/sortitions.js
111
+ - app/assets/javascripts/decidim/sortitions/social_share.js
112
+ - app/assets/stylesheets/decidim/sortitions/_sortitions.scss
113
+ - app/assets/stylesheets/decidim/sortitions/social_share.css.scss
114
+ - app/commands/decidim/sortitions/admin/create_sortition.rb
115
+ - app/commands/decidim/sortitions/admin/destroy_sortition.rb
116
+ - app/commands/decidim/sortitions/admin/update_sortition.rb
117
+ - app/controllers/concerns/decidim/sortitions/orderable.rb
118
+ - app/controllers/decidim/sortitions/admin/application_controller.rb
119
+ - app/controllers/decidim/sortitions/admin/sortitions_controller.rb
120
+ - app/controllers/decidim/sortitions/application_controller.rb
121
+ - app/controllers/decidim/sortitions/sortition_widgets_controller.rb
122
+ - app/controllers/decidim/sortitions/sortitions_controller.rb
123
+ - app/events/decidim/sortitions/create_sortition_event.rb
124
+ - app/forms/decidim/sortitions/admin/destroy_sortition_form.rb
125
+ - app/forms/decidim/sortitions/admin/edit_sortition_form.rb
126
+ - app/forms/decidim/sortitions/admin/sortition_form.rb
127
+ - app/helpers/decidim/sortitions/admin/sortitions_helper.rb
128
+ - app/helpers/decidim/sortitions/sortitions_helper.rb
129
+ - app/models/decidim/sortitions/abilities/admin/admin_ability.rb
130
+ - app/models/decidim/sortitions/abilities/admin/process_admin_ability.rb
131
+ - app/models/decidim/sortitions/application_record.rb
132
+ - app/models/decidim/sortitions/sortition.rb
133
+ - app/queries/decidim/sortitions/admin/participatory_space_proposal_features.rb
134
+ - app/queries/decidim/sortitions/admin/participatory_space_proposals.rb
135
+ - app/queries/decidim/sortitions/filtered_sortitions.rb
136
+ - app/services/decidim/sortitions/admin/draw.rb
137
+ - app/services/decidim/sortitions/sortition_search.rb
138
+ - app/views/decidim/sortitions/admin/sortitions/_form.html.erb
139
+ - app/views/decidim/sortitions/admin/sortitions/confirm_destroy.html.erb
140
+ - app/views/decidim/sortitions/admin/sortitions/edit.html.erb
141
+ - app/views/decidim/sortitions/admin/sortitions/index.html.erb
142
+ - app/views/decidim/sortitions/admin/sortitions/new.html.erb
143
+ - app/views/decidim/sortitions/admin/sortitions/show.html.erb
144
+ - app/views/decidim/sortitions/sortition_widgets/show.html.erb
145
+ - app/views/decidim/sortitions/sortitions/_count.html.erb
146
+ - app/views/decidim/sortitions/sortitions/_filters.html.erb
147
+ - app/views/decidim/sortitions/sortitions/_filters_small_view.html.erb
148
+ - app/views/decidim/sortitions/sortitions/_filters_small_view0.html.erb
149
+ - app/views/decidim/sortitions/sortitions/_linked_sortitions.html.erb
150
+ - app/views/decidim/sortitions/sortitions/_proposal.html.erb
151
+ - app/views/decidim/sortitions/sortitions/_proposal_badge.html.erb
152
+ - app/views/decidim/sortitions/sortitions/_results_count.html.erb
153
+ - app/views/decidim/sortitions/sortitions/_sortition.html.erb
154
+ - app/views/decidim/sortitions/sortitions/_sortition_author.html.erb
155
+ - app/views/decidim/sortitions/sortitions/_sortition_cancel_author.html.erb
156
+ - app/views/decidim/sortitions/sortitions/_sortitions.html.erb
157
+ - app/views/decidim/sortitions/sortitions/_sortitions_count.html.erb
158
+ - app/views/decidim/sortitions/sortitions/_tags.html.erb
159
+ - app/views/decidim/sortitions/sortitions/index.html.erb
160
+ - app/views/decidim/sortitions/sortitions/index.js.erb
161
+ - app/views/decidim/sortitions/sortitions/show.html.erb
162
+ - config/initializers/social_share_button.rb
163
+ - config/locales/ca.yml
164
+ - config/locales/en.yml
165
+ - config/locales/es.yml
166
+ - db/migrate/20171215161358_create_decidim_module_sortitions_sortitions.rb
167
+ - db/migrate/20171220164658_add_witnesses_to_sortitions.rb
168
+ - db/migrate/20171220164744_add_additional_info_to_sortitions.rb
169
+ - db/migrate/20180102100101_add_author_to_sortitions.rb
170
+ - db/migrate/20180102101128_add_reference_to_sortitions.rb
171
+ - db/migrate/20180103082645_add_title_to_sortition.rb
172
+ - db/migrate/20180103123055_drop_decidim_category_id_from_sortitions.rb
173
+ - db/migrate/20180103160301_add_cancel_data_to_sortition.rb
174
+ - db/migrate/20180104143054_make_sortition_reference_nullable.rb
175
+ - db/migrate/20180104145344_add_candidate_proposals_to_sortitions.rb
176
+ - db/migrate/20180108132729_rename_sortitions_table.rb
177
+ - lib/decidim/sortitions.rb
178
+ - lib/decidim/sortitions/admin.rb
179
+ - lib/decidim/sortitions/admin_engine.rb
180
+ - lib/decidim/sortitions/engine.rb
181
+ - lib/decidim/sortitions/feature.rb
182
+ - lib/decidim/sortitions/test/factories.rb
183
+ - lib/decidim/sortitions/version.rb
184
+ homepage: https://github.com/decidim/decidim-module-sortitions
185
+ licenses:
186
+ - AGPL-3.0
187
+ metadata: {}
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: 2.3.1
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 2.7.3
205
+ signing_key:
206
+ specification_version: 4
207
+ summary: This module makes possible to select amont a set of proposal by sortition
208
+ test_files: []