decidim-generators 0.29.2 → 0.30.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  "homepage_uri" => "https://decidim.org",
19
19
  "source_code_uri" => "https://github.com/decidim/decidim"
20
20
  }
21
- s.required_ruby_version = "~> 3.2.0"
21
+ s.required_ruby_version = "~> 3.3.0"
22
22
 
23
23
  s.name = "decidim-generators"
24
24
 
@@ -166,9 +166,9 @@ module Decidim
166
166
 
167
167
  if branch.present?
168
168
  get target_gemfile, "Gemfile", force: true
169
- append_file "Gemfile", %(\ngem "net-imap", "~> 0.2.3", group: :development)
169
+ append_file "Gemfile", %(\ngem "net-imap", "~> 0.5.0", group: :development)
170
170
  append_file "Gemfile", %(\ngem "net-pop", "~> 0.1.1", group: :development)
171
- append_file "Gemfile", %(\ngem "net-smtp", "~> 0.3.1", group: :development)
171
+ append_file "Gemfile", %(\ngem "net-smtp", "~> 0.5.0", group: :development)
172
172
  get "#{target_gemfile}.lock", "Gemfile.lock", force: true
173
173
  else
174
174
  copy_file target_gemfile, "Gemfile", force: true
@@ -181,7 +181,7 @@ module Decidim
181
181
 
182
182
  gsub_file "Gemfile", /gem "decidim-dev".*/, "gem \"decidim-dev\", #{gem_modifier}"
183
183
 
184
- %w(conferences design initiatives templates).each do |component|
184
+ %w(ai conferences design initiatives templates).each do |component|
185
185
  if options[:demo]
186
186
  gsub_file "Gemfile", /gem "decidim-#{component}".*/, "gem \"decidim-#{component}\", #{gem_modifier}"
187
187
  else
@@ -216,20 +216,22 @@ module Decidim
216
216
 
217
217
  template "sidekiq.yml.erb", "config/sidekiq.yml", force: true
218
218
 
219
+ gsub_file "config/environments/development.rb",
220
+ /Rails.application.configure do/,
221
+ "Rails.application.configure do\n config.active_job.queue_adapter = :sidekiq\n"
219
222
  gsub_file "config/environments/production.rb",
220
223
  /# config.active_job.queue_adapter = :resque/,
221
224
  "config.active_job.queue_adapter = ENV['QUEUE_ADAPTER'] if ENV['QUEUE_ADAPTER'].present?"
222
225
 
223
226
  prepend_file "config/routes.rb", "require \"sidekiq/web\"\n\n"
227
+
224
228
  route <<~RUBY
225
229
  authenticate :user, ->(u) { u.admin? } do
226
230
  mount Sidekiq::Web => "/sidekiq"
227
231
  end
228
232
  RUBY
229
233
 
230
- add_production_gems do
231
- gem "sidekiq"
232
- end
234
+ append_file "Gemfile", %(gem "sidekiq")
233
235
  end
234
236
 
235
237
  def add_production_gems(&block)
@@ -363,6 +365,7 @@ module Decidim
363
365
  return unless options[:demo]
364
366
 
365
367
  copy_file "dummy_authorization_handler.rb", "app/services/dummy_authorization_handler.rb"
368
+ copy_file "ephemeral_dummy_authorization_handler.rb", "app/services/ephemeral_dummy_authorization_handler.rb"
366
369
  copy_file "another_dummy_authorization_handler.rb", "app/services/another_dummy_authorization_handler.rb"
367
370
  copy_file "verifications_initializer.rb", "config/initializers/decidim_verifications.rb"
368
371
  end
@@ -384,6 +387,12 @@ module Decidim
384
387
  copy_file "budgets_initializer.rb", "config/initializers/decidim_budgets.rb"
385
388
  end
386
389
 
390
+ def ai_toolkit
391
+ return unless options[:demo]
392
+
393
+ copy_file "ai_initializer.rb", "config/initializers/decidim_ai.rb"
394
+ end
395
+
387
396
  def timestamp_service
388
397
  return unless options[:demo]
389
398
 
@@ -1 +1 @@
1
- 3.2.2
1
+ 3.3.4
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ if Decidim.module_installed?(:ai)
4
+ Decidim::Ai::Language.formatter = "Decidim::Ai::Language::Formatter"
5
+
6
+ Decidim::Ai::SpamDetection.reporting_user_email = "your-admin@example.org"
7
+
8
+ Decidim::Ai::SpamDetection.resource_score_threshold = 0.75 # default
9
+
10
+ # The entry must be a hash with the following keys:
11
+ # - name: the name of the analyzer
12
+ # - strategy: the class of the strategy to use
13
+ # - options: a hash with the options to pass to the strategy
14
+ # Example:
15
+ # Decidim::Ai::SpamDetection.resource_analyzers = [
16
+ # {
17
+ # name: :bayes,
18
+ # strategy: Decidim::Ai::SpamContent::BayesStrategy,
19
+ # options: {
20
+ # adapter: :redis,
21
+ # params: {
22
+ # url: lambda { ENV["REDIS_URL"] }
23
+ # scheme: "redis"
24
+ # host: "127.0.0.1"
25
+ # port: 6379
26
+ # path: nil
27
+ # timeout: 5.0
28
+ # password: nil
29
+ # db: 0
30
+ # driver: nil
31
+ # id: nil
32
+ # tcp_keepalive: 0
33
+ # reconnect_attempts: 1
34
+ # inherit_socket: false
35
+ # }
36
+ # }
37
+ # }
38
+ # ]
39
+ Decidim::Ai::SpamDetection.resource_analyzers = [
40
+ {
41
+ name: :bayes,
42
+ strategy: Decidim::Ai::SpamDetection::Strategy::Bayes,
43
+ options: {
44
+ adapter: ENV.fetch("DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE", "redis"),
45
+ params: { url: ENV.fetch("DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE_REDIS_URL", "redis://localhost:6379/2") }
46
+ }
47
+ }
48
+ ]
49
+
50
+ # If you want to use a different spam detection service, you can define your own service.
51
+ # Refer to documentation for more details.
52
+ #
53
+ Decidim::Ai::SpamDetection.resource_detection_service = "Decidim::Ai::SpamDetection::Service"
54
+
55
+ # Customize here what are the analyzed models. You may want to use this to
56
+ # override what we register by default, or to register your own resources.
57
+ # Follow the documentation on how to trail more resources
58
+ Decidim::Ai::SpamDetection.resource_models = begin
59
+ models = {}
60
+ models["Decidim::Comments::Comment"] = "Decidim::Ai::SpamDetection::Resource::Comment" if Decidim.module_installed?("comments")
61
+ models["Decidim::Debates::Debate"] = "Decidim::Ai::SpamDetection::Resource::Debate" if Decidim.module_installed?("debates")
62
+ models["Decidim::Initiative"] = "Decidim::Ai::SpamDetection::Resource::Initiative" if Decidim.module_installed?("initiatives")
63
+ models["Decidim::Meetings::Meeting"] = "Decidim::Ai::SpamDetection::Resource::Meeting" if Decidim.module_installed?("meetings")
64
+ models["Decidim::Proposals::Proposal"] = "Decidim::Ai::SpamDetection::Resource::Proposal" if Decidim.module_installed?("proposals")
65
+ models["Decidim::Proposals::CollaborativeDraft"] = "Decidim::Ai::SpamDetection::Resource::CollaborativeDraft" if Decidim.module_installed?("proposals")
66
+ models
67
+ end
68
+
69
+ Decidim::Ai::SpamDetection.user_score_threshold = 0.75 # default
70
+
71
+ # The entry must be a hash with the following keys:
72
+ # - name: the name of the analyzer
73
+ # - strategy: the class of the strategy to use
74
+ # - options: a hash with the options to pass to the strategy
75
+ # Example:
76
+ # Decidim::Ai::SpamDetection.user_analyzers = [
77
+ # {
78
+ # name: :bayes,
79
+ # strategy: Decidim::Ai::SpamContent::BayesStrategy,
80
+ # options: {
81
+ # adapter: :redis,
82
+ # params: {
83
+ # url: lambda { ENV["REDIS_URL"] }
84
+ # }
85
+ # }
86
+ # }
87
+ # ]
88
+ Decidim::Ai::SpamDetection.user_analyzers = [
89
+ {
90
+ name: :bayes,
91
+ strategy: Decidim::Ai::SpamDetection::Strategy::Bayes,
92
+ options: {
93
+ adapter: ENV.fetch("DECIDIM_SPAM_DETECTION_BACKEND_USER", "redis"),
94
+ params: { url: ENV.fetch("DECIDIM_SPAM_DETECTION_BACKEND_USER_REDIS_URL", "redis://localhost:6379/3") }
95
+ }
96
+ }
97
+ ]
98
+
99
+ # Customize here what are the analyzed models. You may want to use this to
100
+ # override what we register by default, or to register your own resources.
101
+ # Follow the documentation on how to trail more resources
102
+ Decidim::Ai::SpamDetection.user_models = {
103
+ "Decidim::UserGroup" => "Decidim::Ai::SpamDetection::Resource::UserBaseEntity",
104
+ "Decidim::User" => "Decidim::Ai::SpamDetection::Resource::UserBaseEntity"
105
+ }
106
+
107
+ # If you want to use a different spam detection service, you can define your own service.
108
+ # Refer to documentation for more details.
109
+ #
110
+ Decidim::Ai::SpamDetection.user_detection_service = "Decidim::Ai::SpamDetection::Service"
111
+ end
@@ -27,7 +27,6 @@ class DummyAuthorizationHandler < Decidim::AuthorizationHandler
27
27
  attribute :document_number, String
28
28
  attribute :postal_code, String
29
29
  attribute :birthday, Decidim::Attributes::LocalizedDate
30
- attribute :scope_id, Integer
31
30
 
32
31
  # You can (and should) also define validations on each attribute:
33
32
  #
@@ -36,7 +35,6 @@ class DummyAuthorizationHandler < Decidim::AuthorizationHandler
36
35
  # You can also define custom validations:
37
36
  #
38
37
  validate :valid_document_number
39
- validate :valid_scope_id
40
38
 
41
39
  # The only method that needs to be implemented for an authorization handler.
42
40
  # Here you can add your business logic to check if the authorization should
@@ -56,12 +54,6 @@ class DummyAuthorizationHandler < Decidim::AuthorizationHandler
56
54
  document_number
57
55
  end
58
56
 
59
- # The user scope
60
- #
61
- def scope
62
- user.organization.scopes.find_by(id: scope_id) if scope_id
63
- end
64
-
65
57
  # If you need to store any of the defined attributes in the authorization you
66
58
  # can do it here.
67
59
  #
@@ -69,7 +61,7 @@ class DummyAuthorizationHandler < Decidim::AuthorizationHandler
69
61
  # it is created, and available though authorization.metadata
70
62
  #
71
63
  def metadata
72
- super.merge(document_number:, postal_code:, scope_id:)
64
+ super.merge(document_number:, postal_code:)
73
65
  end
74
66
 
75
67
  private
@@ -78,21 +70,16 @@ class DummyAuthorizationHandler < Decidim::AuthorizationHandler
78
70
  errors.add(:document_number, :invalid) unless document_number.to_s.end_with?("X")
79
71
  end
80
72
 
81
- def valid_scope_id
82
- errors.add(:scope_id, :invalid) if scope_id && !scope
83
- end
84
-
85
73
  # If you need custom authorization logic, you can implement your own action
86
74
  # authorizer. In this case, it allows to set a list of valid postal codes for
87
75
  # an authorization.
88
76
  class DummyActionAuthorizer < Decidim::Verifications::DefaultActionAuthorizer
89
- attr_reader :allowed_postal_codes, :allowed_scope_id
77
+ attr_reader :allowed_postal_codes
90
78
 
91
79
  # Overrides the parent class method, but it still uses it to keep the base behavior
92
80
  def authorize
93
81
  # Remove the additional setting from the options hash to avoid to be considered missing.
94
82
  @allowed_postal_codes ||= options.delete("allowed_postal_codes")&.split(/[\W,;]+/)
95
- @allowed_scope_id ||= options.delete("allowed_scope_id")&.to_i
96
83
 
97
84
  status_code, data = *super
98
85
 
@@ -118,62 +105,18 @@ class DummyAuthorizationHandler < Decidim::AuthorizationHandler
118
105
  end
119
106
  end
120
107
 
121
- if allowed_scope.present?
122
- # Does not authorize users with different scope
123
- status_code = :unauthorized if status_code == :ok && disallowed_user_user_scope
124
-
125
- # Adds an extra message to inform the user about additional restrictions for this authorization
126
- if disallowed_user_user_scope
127
- if user_scope_id
128
- i18n_scope_key = "extra_explanation.user_scope"
129
- user_scope_params = { user_scope_name: }
130
- else
131
- i18n_scope_key = "extra_explanation.scope"
132
- user_scope_params = {}
133
- end
134
-
135
- extra_explanations << { key: i18n_scope_key,
136
- params: { scope: "decidim.verifications.dummy_authorization",
137
- scope_name: allowed_scope.name[I18n.locale.to_s] }.merge(user_scope_params) }
138
- end
139
- end
140
-
141
108
  data[:extra_explanation] = extra_explanations if extra_explanations.any?
142
109
 
143
110
  [status_code, data]
144
111
  end
145
112
 
146
- # Adds the list of allowed postal codes and scope to the redirect URL, to allow forms to inform about it
113
+ # Adds the list of allowed postal codes to the redirect URL, to allow forms to inform about it
147
114
  def redirect_params
148
- { postal_codes: allowed_postal_codes&.join(","), scope: allowed_scope_id }.merge(user_metadata_params)
115
+ { postal_codes: allowed_postal_codes&.join(",") }.merge(user_metadata_params)
149
116
  end
150
117
 
151
118
  private
152
119
 
153
- def allowed_scope
154
- @allowed_scope ||= Decidim::Scope.find(allowed_scope_id) if allowed_scope_id
155
- end
156
-
157
- def user_scope
158
- @user_scope ||= Decidim::Scope.find(user_scope_id) if user_scope_id
159
- end
160
-
161
- def user_scope_id
162
- return unless authorization
163
-
164
- @user_scope_id ||= authorization.metadata["scope_id"]&.to_i
165
- end
166
-
167
- def user_scope_name
168
- @user_scope_name ||= user_scope.name[I18n.locale.to_s] if authorization && user_scope
169
- end
170
-
171
- def disallowed_user_user_scope
172
- return unless user_scope || allowed_scope.present?
173
-
174
- allowed_scope_id != user_scope_id
175
- end
176
-
177
120
  def user_postal_code
178
121
  @user_postal_code ||= authorization.metadata["postal_code"] if authorization && authorization.metadata
179
122
  end
@@ -189,8 +132,6 @@ class DummyAuthorizationHandler < Decidim::AuthorizationHandler
189
132
 
190
133
  @user_metadata_params ||= begin
191
134
  user_metadata_params = {}
192
- user_metadata_params[:user_scope_name] = user_scope.name[I18n.locale.to_s] if user_scope
193
-
194
135
  user_metadata_params[:user_postal_code] = authorization.metadata["postal_code"] if authorization.metadata["postal_code"].present?
195
136
 
196
137
  user_metadata_params
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class EphemeralDummyAuthorizationHandler < DummyAuthorizationHandler
4
+ # This method is set to use the same partial as DummyAuthorizationHandler
5
+ # instead of inferring it from the class name
6
+ def to_partial_path
7
+ "dummy_authorization/form"
8
+ end
9
+ end
@@ -405,6 +405,7 @@ Decidim.configure do |config|
405
405
  config.password_similarity_length = Rails.application.secrets.decidim[:password_similarity_length] if Rails.application.secrets.decidim[:password_similarity_length].present?
406
406
  config.denied_passwords = Rails.application.secrets.decidim[:denied_passwords] if Rails.application.secrets.decidim[:denied_passwords].present?
407
407
  config.allow_open_redirects = Rails.application.secrets.decidim[:allow_open_redirects] if Rails.application.secrets.decidim[:allow_open_redirects].present?
408
+ config.enable_etiquette_validator = Rails.application.secrets.decidim[:enable_etiquette_validator] if Rails.application.secrets.decidim[:enable_etiquette_validator].present?
408
409
  end
409
410
 
410
411
  if Decidim.module_installed? :api
@@ -46,6 +46,7 @@ decidim_default: &decidim_default
46
46
  social_share_services: <%%= Decidim::Env.new("DECIDIM_SOCIAL_SHARE_SERVICES", "X, Facebook, WhatsApp, Telegram").to_array.to_json %>
47
47
  service_worker_enabled: <%%= Decidim::Env.new("DECIDIM_SERVICE_WORKER_ENABLED", Rails.env.exclude?("development")).to_boolean_string %>
48
48
  page_blocks: <%%= Decidim::Env.new("DECIDIM_PAGE_BLOCKS", "terms-of-service").to_array %>
49
+ enable_etiquette_validator: <%%= Decidim::Env.new("DECIDIM_ENABLE_ETIQUETTE_VALIDATOR", true).to_boolean_string %>
49
50
  admin_password:
50
51
  expiration_days: <%%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_EXPIRATION_DAYS", 90).to_i %>
51
52
  min_length: <%%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_MIN_LENGTH", 15).to_i %>
@@ -70,7 +71,7 @@ decidim_default: &decidim_default
70
71
  creation_enabled: <%%= Decidim::Env.new("INITIATIVES_CREATION_ENABLED", "auto").default_or_present_if_exists.to_s %>
71
72
  minimum_committee_members: <%%= Decidim::Env.new("INITIATIVES_MINIMUM_COMMITTEE_MEMBERS", 2).to_i %>
72
73
  default_signature_time_period_length: <%%= Decidim::Env.new("INITIATIVES_DEFAULT_SIGNATURE_TIME_PERIOD_LENGTH", 120).to_i %>
73
- default_components: <%%= Decidim::Env.new("INITIATIVES_DEFAULT_COMPONENTS", "pages, meetings").to_array.to_json %>
74
+ default_components: <%%= Decidim::Env.new("INITIATIVES_DEFAULT_COMPONENTS", "pages, meetings, blogs").to_array.to_json %>
74
75
  first_notification_percentage: <%%= Decidim::Env.new("INITIATIVES_FIRST_NOTIFICATION_PERCENTAGE", 33).to_i %>
75
76
  second_notification_percentage: <%%= Decidim::Env.new("INITIATIVES_SECOND_NOTIFICATION_PERCENTAGE", 66).to_i %>
76
77
  stats_cache_expiration_time: <%%= Decidim::Env.new("INITIATIVES_STATS_CACHE_EXPIRATION_TIME", 5).to_i %>
@@ -111,21 +112,21 @@ default: &default
111
112
  decidim:
112
113
  <<: *decidim_default
113
114
  omniauth:
115
+ google_oauth2:
116
+ enabled: <%%= Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID").to_boolean_string %>
117
+ icon_path: "media/images/google.svg"
118
+ client_id: <%%= ENV["OMNIAUTH_GOOGLE_CLIENT_ID"] %>
119
+ client_secret: <%%= ENV["OMNIAUTH_GOOGLE_CLIENT_SECRET"] %>
114
120
  facebook:
115
121
  enabled: <%%= Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_ID").to_boolean_string %>
116
122
  app_id: <%%= ENV["OMNIAUTH_FACEBOOK_APP_ID"] %>
117
123
  app_secret: <%%= ENV["OMNIAUTH_FACEBOOK_APP_SECRET"] %>
118
- icon: facebook-fill
124
+ icon_path: "media/images/facebook.svg"
119
125
  twitter:
120
126
  enabled: <%%= Decidim::Env.new("OMNIAUTH_TWITTER_API_KEY").to_boolean_string %>
121
127
  api_key: <%%= ENV["OMNIAUTH_TWITTER_API_KEY"] %>
122
128
  api_secret: <%%= ENV["OMNIAUTH_TWITTER_API_SECRET"] %>
123
- icon: twitter-x-fill
124
- google_oauth2:
125
- enabled: <%%= Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID").to_boolean_string %>
126
- icon: google-fill
127
- client_id: <%%= ENV["OMNIAUTH_GOOGLE_CLIENT_ID"] %>
128
- client_secret: <%%= ENV["OMNIAUTH_GOOGLE_CLIENT_SECRET"] %>
129
+ icon_path: "media/images/twitter-x.svg"
129
130
  maps:
130
131
  dynamic_provider: <%%= Decidim::Env.new("MAPS_DYNAMIC_PROVIDER", ENV["MAPS_PROVIDER"]).to_s %>
131
132
  static_provider: <%%= Decidim::Env.new("MAPS_STATIC_PROVIDER", ENV["MAPS_PROVIDER"]).to_s %>
@@ -14,3 +14,4 @@
14
14
  - [metrics, 1]
15
15
  - [exports, 1]
16
16
  - [close_meeting_reminder, 1]
17
+ - [spam_analysis, 1]
@@ -9,7 +9,19 @@ Decidim::Verifications.register_workflow(:dummy_authorization_handler) do |workf
9
9
 
10
10
  workflow.options do |options|
11
11
  options.attribute :allowed_postal_codes, type: :string, default: "08001", required: false
12
- options.attribute :allowed_scope_id, type: :scope, required: false
12
+ end
13
+ end
14
+
15
+ Decidim::Verifications.register_workflow(:ephemeral_dummy_authorization_handler) do |workflow|
16
+ workflow.ephemeral = true
17
+ workflow.form = "EphemeralDummyAuthorizationHandler"
18
+ workflow.action_authorizer = "DummyAuthorizationHandler::DummyActionAuthorizer"
19
+ workflow.expires_in = 1.month
20
+ workflow.renewable = true
21
+ workflow.time_between_renewals = 5.minutes
22
+
23
+ workflow.options do |options|
24
+ options.attribute :allowed_postal_codes, type: :string, default: "05400", required: false
13
25
  end
14
26
  end
15
27
 
@@ -1 +1 @@
1
- 3.2.2
1
+ 3.3.4
@@ -5,7 +5,7 @@ source "https://rubygems.org"
5
5
 
6
6
  ruby RUBY_VERSION
7
7
 
8
- gem "decidim", "~> 0.29.2"
8
+ gem "decidim", "~> 0.30.0.rc2"
9
9
  gem "decidim-<%= component_name %>", path: "."
10
10
 
11
11
  gem "puma", ">= 6.3.1"
@@ -14,7 +14,7 @@ gem "bootsnap", "~> 1.4"
14
14
  group :development, :test do
15
15
  gem "byebug", "~> 11.0", platform: :mri
16
16
 
17
- gem "decidim-dev", "~> 0.29.2"
17
+ gem "decidim-dev", "~> 0.30.0.rc2"
18
18
  end
19
19
 
20
20
  group :development do
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "uri"
4
+
3
5
  shared_context "when generating a new application" do
4
6
  let(:env) do |example|
5
7
  #
@@ -63,10 +65,10 @@ shared_examples_for "a new development application" do
63
65
  Decidim::GemManager.plugins.each do |plugin|
64
66
  Dir.glob("#{plugin}db/migrate/*.rb").each do |migration|
65
67
  lines = File.readlines(migration)
66
- tables.concat(lines.filter { |line| line.match? "create_table" }.map { |line| line.match(/(:)([a-z_0-9]+)/)[2] })
67
- dropped.concat(lines.filter { |line| line.match? "drop_table" }.map { |line| line.match(/(:)([a-z_0-9]+)/)[2] })
68
- tables.concat(lines.filter { |line| line.match? "rename_table" }.map { |line| line.match(/(, :)([a-z_0-9]+)/)[2] })
69
- dropped.concat(lines.filter { |line| line.match? "rename_table" }.map { |line| line.match(/(:)([a-z_0-9]+)/)[2] })
68
+ tables.concat(lines.grep(/create_table/).map { |line| line.match(/(:)([a-z_0-9]+)/)[2] })
69
+ dropped.concat(lines.grep(/drop_table/).map { |line| line.match(/(:)([a-z_0-9]+)/)[2] })
70
+ tables.concat(lines.grep(/rename_table/).map { |line| line.match(/(, :)([a-z_0-9]+)/)[2] })
71
+ dropped.concat(lines.grep(/rename_table/).map { |line| line.match(/(:)([a-z_0-9]+)/)[2] })
70
72
  end
71
73
  end
72
74
  tables.each do |table|
@@ -345,7 +347,7 @@ shared_examples_for "an application with configurable env vars" do
345
347
  %w(decidim initiatives creation_enabled) => "auto",
346
348
  %w(decidim initiatives minimum_committee_members) => 2,
347
349
  %w(decidim initiatives default_signature_time_period_length) => 120,
348
- %w(decidim initiatives default_components) => %w(pages meetings),
350
+ %w(decidim initiatives default_components) => %w(pages meetings blogs),
349
351
  %w(decidim initiatives first_notification_percentage) => 33,
350
352
  %w(decidim initiatives second_notification_percentage) => 66,
351
353
  %w(decidim initiatives stats_cache_expiration_time) => 5,
@@ -834,7 +836,7 @@ shared_examples_for "an application with extra configurable env vars" do
834
836
  "creation_enabled" => true,
835
837
  "minimum_committee_members" => 2,
836
838
  "default_signature_time_period_length" => 120,
837
- "default_components" => %w(pages meetings),
839
+ "default_components" => %w(pages meetings blogs),
838
840
  "first_notification_percentage" => 33,
839
841
  "second_notification_percentage" => 66,
840
842
  "stats_cache_expiration_time" => 300, # 5.minutes
@@ -4,7 +4,7 @@
4
4
  module Decidim
5
5
  module Generators
6
6
  def self.version
7
- "0.29.2"
7
+ "0.30.0.rc2"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-generators
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.29.2
4
+ version: 0.30.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2025-02-12 00:00:00.000000000 Z
13
+ date: 2025-03-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-core
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.29.2
21
+ version: 0.30.0.rc2
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.29.2
28
+ version: 0.30.0.rc2
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: bundler
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -64,6 +64,7 @@ files:
64
64
  - lib/decidim/generators/app_templates/Dockerfile.erb
65
65
  - lib/decidim/generators/app_templates/LICENSE-AGPLv3.txt
66
66
  - lib/decidim/generators/app_templates/README.md.erb
67
+ - lib/decidim/generators/app_templates/ai_initializer.rb
67
68
  - lib/decidim/generators/app_templates/another_dummy_authorization_handler.rb
68
69
  - lib/decidim/generators/app_templates/budgets_initializer.rb
69
70
  - lib/decidim/generators/app_templates/budgets_workflow_random.en.yml
@@ -78,6 +79,7 @@ files:
78
79
  - lib/decidim/generators/app_templates/docker-compose-etherpad.yml
79
80
  - lib/decidim/generators/app_templates/docker-compose.yml.erb
80
81
  - lib/decidim/generators/app_templates/dummy_authorization_handler.rb
82
+ - lib/decidim/generators/app_templates/ephemeral_dummy_authorization_handler.rb
81
83
  - lib/decidim/generators/app_templates/initializer.rb
82
84
  - lib/decidim/generators/app_templates/package.json
83
85
  - lib/decidim/generators/app_templates/rack_profiler_initializer.rb
@@ -142,14 +144,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
144
  requirements:
143
145
  - - "~>"
144
146
  - !ruby/object:Gem::Version
145
- version: 3.2.0
147
+ version: 3.3.0
146
148
  required_rubygems_version: !ruby/object:Gem::Requirement
147
149
  requirements:
148
150
  - - ">="
149
151
  - !ruby/object:Gem::Version
150
152
  version: '0'
151
153
  requirements: []
152
- rubygems_version: 3.4.10
154
+ rubygems_version: 3.5.11
153
155
  signing_key:
154
156
  specification_version: 4
155
157
  summary: Citizen participation framework for Ruby on Rails.