decidim-cdtb 0.4.2 → 0.5.2
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +14 -1
- data/Gemfile +4 -4
- data/Gemfile.lock +454 -451
- data/decidim-cdtb.gemspec +1 -2
- data/lib/decidim/cdtb/fixes/nickname_fixer.rb +6 -3
- data/lib/decidim/cdtb/fixes/you_tube_embeds_fixer.rb +1 -1
- data/lib/decidim/cdtb/participatory_spaces/add_content_blocks.rb +2 -1
- data/lib/decidim/cdtb/participatory_spaces/manages_content_blocks.rb +2 -2
- data/lib/decidim/cdtb/participatory_spaces/move_images_to_content_block.rb +1 -1
- data/lib/decidim/cdtb/spam/{user_spam_detector.rb → spam_users_detector.rb} +4 -4
- data/lib/decidim/cdtb/storage/local_sharding.rb +1 -1
- data/lib/decidim/cdtb/task.rb +1 -1
- data/lib/decidim/cdtb/tasks.rb +1 -1
- data/lib/decidim/cdtb/upgrades/upgrade_modules_task.rb +1 -1
- data/lib/decidim/cdtb/upgrades/validate_migrations_task.rb +1 -1
- data/lib/decidim/cdtb/users/remover.rb +14 -15
- data/lib/decidim/cdtb/version.rb +2 -2
- data/lib/generators/cdtb/templates/validate_migrations.yml +4 -4
- data/lib/tasks/anonymize.rake +3 -3
- data/lib/tasks/census.rake +1 -1
- data/lib/tasks/fix_youtube_embeds.rake +1 -1
- data/lib/tasks/multitenants.rake +1 -1
- data/lib/tasks/participatory_spaces.rake +2 -2
- data/lib/tasks/spam.rake +2 -2
- data/lib/tasks/storage.rake +1 -1
- data/lib/tasks/upgrade.rake +2 -2
- data/lib/tasks/users.rake +3 -3
- metadata +9 -23
data/decidim-cdtb.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = "A gem to help managing Decidim applications."
|
13
13
|
spec.homepage = "https://github.com/CodiTramuntana/decidim-module-cdtb"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = ">= 3.
|
15
|
+
spec.required_ruby_version = ">= 3.1.7"
|
16
16
|
|
17
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
18
18
|
spec.metadata["source_code_uri"] = spec.homepage
|
@@ -34,6 +34,5 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_dependency "ruby-progressbar"
|
35
35
|
|
36
36
|
spec.add_development_dependency "decidim-dev", Decidim::Cdtb::DECIDIM_MIN_VERSION
|
37
|
-
spec.add_development_dependency "faker"
|
38
37
|
spec.metadata["rubygems_mfa_required"] = "true"
|
39
38
|
end
|
@@ -7,12 +7,15 @@ module Decidim
|
|
7
7
|
#
|
8
8
|
class NicknameFixer < ::Decidim::Cdtb::Task
|
9
9
|
def initialize
|
10
|
+
regex= Decidim::UserBaseEntity::REGEXP_NICKNAME.source.gsub("\\z", "\\Z")
|
11
|
+
@query= Decidim::User.where.not("nickname ~ ?", regex)
|
12
|
+
|
10
13
|
progress_bar= { title: "Decidim::User" }
|
11
|
-
super("FIX NICKNAMES", progress_bar:
|
14
|
+
super("FIX NICKNAMES", progress_bar:)
|
12
15
|
end
|
13
16
|
|
14
17
|
def prepare_execution(_ctx)
|
15
|
-
@num_users=
|
18
|
+
@num_users= @query.count
|
16
19
|
log_task_info("Checking #{@num_users} users...")
|
17
20
|
end
|
18
21
|
|
@@ -23,7 +26,7 @@ module Decidim
|
|
23
26
|
def do_execution(context)
|
24
27
|
progress_bar= context[:progress_bar]
|
25
28
|
|
26
|
-
|
29
|
+
@query.find_each do |user|
|
27
30
|
Decidim::User.validators_on(:nickname).each do |validator|
|
28
31
|
validator.validate_each(user, :nickname, user.nickname)
|
29
32
|
end
|
@@ -13,7 +13,7 @@ module Decidim
|
|
13
13
|
progress_bar= { title: self.class.name }
|
14
14
|
@processed_models = processed_models
|
15
15
|
@content_block_names = content_block_names
|
16
|
-
super("ADD CONTENT BLOCKS", progress_bar:
|
16
|
+
super("ADD CONTENT BLOCKS", progress_bar:)
|
17
17
|
end
|
18
18
|
|
19
19
|
attr_reader :num_added
|
@@ -73,6 +73,7 @@ module Decidim
|
|
73
73
|
|
74
74
|
current_content_blocks.each do |content_block|
|
75
75
|
# hero is usually the first content block
|
76
|
+
next if content_block.nil?
|
76
77
|
next if content_block == extra_data_content_block || content_block.manifest_name == "hero"
|
77
78
|
|
78
79
|
content_block.update(weight: content_block.weight + 10)
|
@@ -18,7 +18,7 @@ module Decidim
|
|
18
18
|
log_task_step("Adding #{content_block_name} to #{space.slug}[#{space.id}]")
|
19
19
|
Decidim::ContentBlock.create(
|
20
20
|
decidim_organization_id: space.organization.id,
|
21
|
-
weight
|
21
|
+
weight:,
|
22
22
|
scope_name: scope_name(space),
|
23
23
|
scoped_resource_id: space.id,
|
24
24
|
manifest_name: content_block_name,
|
@@ -39,7 +39,7 @@ module Decidim
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def current_space_content_blocks(scope_name, organization, scoped_resource_id)
|
42
|
-
Decidim::ContentBlock.for_scope(scope_name, organization:
|
42
|
+
Decidim::ContentBlock.for_scope(scope_name, organization:).where(scoped_resource_id:)
|
43
43
|
end
|
44
44
|
|
45
45
|
def manifest_for(resource)
|
@@ -12,7 +12,7 @@ module Decidim
|
|
12
12
|
def initialize(processed_models)
|
13
13
|
progress_bar= { title: self.class.name }
|
14
14
|
@processed_models = processed_models
|
15
|
-
super("MOVING IMAGES...", progress_bar:
|
15
|
+
super("MOVING IMAGES...", progress_bar:)
|
16
16
|
end
|
17
17
|
|
18
18
|
attr_reader :num_added
|
@@ -7,7 +7,7 @@ module Decidim
|
|
7
7
|
module Spam
|
8
8
|
# Detect spam behavior in users
|
9
9
|
#
|
10
|
-
class
|
10
|
+
class SpamUsersDetector < ::Decidim::Cdtb::Task
|
11
11
|
# rubocop:disable Style/RedundantRegexpEscape
|
12
12
|
URL_REGEX = %r{(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|
|
13
13
|
www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|
|
@@ -17,7 +17,7 @@ module Decidim
|
|
17
17
|
def initialize(organization = nil)
|
18
18
|
@organization = organization
|
19
19
|
progress_bar = { title: "Decidim::User" }
|
20
|
-
super("SPAM DETECTOR", progress_bar:
|
20
|
+
super("SPAM DETECTOR", progress_bar:)
|
21
21
|
end
|
22
22
|
|
23
23
|
def prepare_execution(_ctx)
|
@@ -44,7 +44,7 @@ module Decidim
|
|
44
44
|
filepath= Rails.env.test? ? "tmp/#{filename}" : filename
|
45
45
|
CSV.open(filepath, "w") do |csv|
|
46
46
|
csv_headers = ["ID", "Is suspicious?", "Name", "Email", "Nickname", "Personal URL", "About",
|
47
|
-
"Organization ID", "Organization Name"]
|
47
|
+
"Organization ID", "Organization Name", "Last Sign In At"]
|
48
48
|
csv << csv_headers
|
49
49
|
|
50
50
|
@users.find_each do |user|
|
@@ -56,7 +56,7 @@ module Decidim
|
|
56
56
|
end
|
57
57
|
|
58
58
|
csv << [user.id, suspicious, user.name, user.email, user.nickname, user.personal_url, user.about,
|
59
|
-
user.organization.id, user.organization.name]
|
59
|
+
user.organization.id, user.organization.name, user.last_sign_in_at&.strftime(Decidim::Cdtb::STRFTIME_FORMAT)]
|
60
60
|
|
61
61
|
progress_bar.increment
|
62
62
|
end
|
@@ -11,7 +11,7 @@ module Decidim
|
|
11
11
|
class LocalSharding < ::Decidim::Cdtb::Task
|
12
12
|
def initialize
|
13
13
|
progress_bar= { title: "ActiveStorage::Blob" }
|
14
|
-
super("S3 to local: DO SHARDING", progress_bar:
|
14
|
+
super("S3 to local: DO SHARDING", progress_bar:)
|
15
15
|
end
|
16
16
|
|
17
17
|
def prepare_execution(_ctx)
|
data/lib/decidim/cdtb/task.rb
CHANGED
@@ -29,7 +29,7 @@ module Decidim
|
|
29
29
|
init
|
30
30
|
ctx= {}
|
31
31
|
prepare_execution(ctx)
|
32
|
-
ctx[:progress_bar]= ProgressBar.create(total: total_items, title:
|
32
|
+
ctx[:progress_bar]= ProgressBar.create(total: total_items, title:) if has_progress?
|
33
33
|
do_execution(ctx)
|
34
34
|
end_execution(ctx)
|
35
35
|
finish
|
data/lib/decidim/cdtb/tasks.rb
CHANGED
@@ -8,7 +8,7 @@ require "decidim/cdtb/users/remover"
|
|
8
8
|
require "decidim/cdtb/multitenants/org_by_host_like"
|
9
9
|
require "decidim/cdtb/participatory_spaces/add_content_blocks"
|
10
10
|
require "decidim/cdtb/participatory_spaces/move_images_to_content_block"
|
11
|
-
require "decidim/cdtb/spam/
|
11
|
+
require "decidim/cdtb/spam/spam_users_detector"
|
12
12
|
require "decidim/cdtb/storage/local_sharding"
|
13
13
|
require "decidim/cdtb/storage/set_local_on_blobs"
|
14
14
|
require "decidim/cdtb/upgrades/validate_migrations_task"
|
@@ -11,7 +11,7 @@ module Decidim
|
|
11
11
|
@csv_path = csv_path
|
12
12
|
@reporter_user_email = reporter_user_email
|
13
13
|
progress_bar = { title: "Decidim::User" }
|
14
|
-
super("USER REMOVER", progress_bar:
|
14
|
+
super("USER REMOVER", progress_bar:)
|
15
15
|
end
|
16
16
|
|
17
17
|
def prepare_execution(_ctx); end
|
@@ -36,7 +36,10 @@ module Decidim
|
|
36
36
|
organization: user.organization)
|
37
37
|
comments = Decidim::Comments::Comment.where(decidim_author_id: user.id)
|
38
38
|
manage_comments(comments, user, reporter_user) unless comments.empty?
|
39
|
-
|
39
|
+
if block_user(user, reporter_user)
|
40
|
+
remove_action_logs_by(user)
|
41
|
+
destroy_user(user)
|
42
|
+
end
|
40
43
|
progress_bar.increment
|
41
44
|
end
|
42
45
|
ensure
|
@@ -53,28 +56,18 @@ module Decidim
|
|
53
56
|
def disable_email_moderations(users_emails)
|
54
57
|
log_task_step("Disabling email on moderations...")
|
55
58
|
|
56
|
-
|
57
|
-
|
58
|
-
users.find_each do |user|
|
59
|
-
user.email_on_moderations = false
|
60
|
-
user.save(validate: false)
|
61
|
-
end
|
59
|
+
Decidim::User.where(email: users_emails).update_all(email_on_moderations: false)
|
62
60
|
end
|
63
61
|
|
64
62
|
def enable_email_moderations(users_emails)
|
65
63
|
log_task_step("Enabling email on moderations...")
|
66
64
|
|
67
|
-
|
68
|
-
|
69
|
-
users.find_each do |user|
|
70
|
-
user.email_on_moderations = true
|
71
|
-
user.save(validate: false)
|
72
|
-
end
|
65
|
+
Decidim::User.where(email: users_emails).update_all(email_on_moderations: true)
|
73
66
|
end
|
74
67
|
|
75
68
|
def manage_comments(comments, user, reporter_user)
|
76
69
|
comments.find_each do |comment|
|
77
|
-
report_comment(comment, user, reporter_user)
|
70
|
+
report_comment(comment, user, reporter_user) unless comment.reported?
|
78
71
|
hide_comment(comment, user, reporter_user) unless comment.hidden?
|
79
72
|
end
|
80
73
|
end
|
@@ -163,6 +156,12 @@ module Decidim
|
|
163
156
|
current_participatory_space: comment.participatory_space
|
164
157
|
}
|
165
158
|
end
|
159
|
+
|
160
|
+
def remove_action_logs_by(user)
|
161
|
+
puts "Removing ActionLog from user #{user.id}..."
|
162
|
+
|
163
|
+
ActiveRecord::Base.connection.execute("DELETE FROM decidim_action_logs WHERE decidim_user_id = #{user.id}")
|
164
|
+
end
|
166
165
|
end
|
167
166
|
# rubocop:enable Metrics/ClassLength
|
168
167
|
end
|
data/lib/decidim/cdtb/version.rb
CHANGED
@@ -19,7 +19,7 @@ jobs:
|
|
19
19
|
runs-on: ubuntu-latest
|
20
20
|
services:
|
21
21
|
postgres:
|
22
|
-
image: postgres:
|
22
|
+
image: postgres:16
|
23
23
|
ports: ["5432:5432"]
|
24
24
|
options: >-
|
25
25
|
--health-cmd pg_isready
|
@@ -36,7 +36,7 @@ jobs:
|
|
36
36
|
SECRET_KEY_BASE: "secret_key_base"
|
37
37
|
|
38
38
|
steps:
|
39
|
-
- uses: actions/checkout@
|
39
|
+
- uses: actions/checkout@v4
|
40
40
|
with:
|
41
41
|
fetch-depth: 1
|
42
42
|
- uses: ruby/setup-ruby@master
|
@@ -44,7 +44,7 @@ jobs:
|
|
44
44
|
ruby-version: ${{ env.RUBY_VERSION }}
|
45
45
|
bundler-cache: true
|
46
46
|
- name: Recover Ruby dependency cache
|
47
|
-
uses: actions/cache@
|
47
|
+
uses: actions/cache@v4
|
48
48
|
with:
|
49
49
|
path: ./vendor/bundle
|
50
50
|
key: ${{ runner.OS }}-app-rubydeps-${{ hashFiles('Gemfile.lock') }}
|
@@ -56,7 +56,7 @@ jobs:
|
|
56
56
|
run: bundle config set --local path 'vendor/bundle'
|
57
57
|
|
58
58
|
- name: Install Ruby deps
|
59
|
-
uses: nick-
|
59
|
+
uses: nick-fields/retry@v3
|
60
60
|
with:
|
61
61
|
timeout_minutes: 10
|
62
62
|
max_attempts: 3
|
data/lib/tasks/anonymize.rake
CHANGED
@@ -12,7 +12,7 @@ namespace :cdtb do
|
|
12
12
|
|
13
13
|
def with_progress(collection, name:)
|
14
14
|
total = collection.count
|
15
|
-
progressbar = create_progress_bar(total:
|
15
|
+
progressbar = create_progress_bar(total:)
|
16
16
|
|
17
17
|
puts "Anonymizing #{total} #{name}...\n"
|
18
18
|
skip_logs do
|
@@ -27,7 +27,7 @@ namespace :cdtb do
|
|
27
27
|
ProgressBar.create(
|
28
28
|
progress_mark: " ",
|
29
29
|
remainder_mark: "\u{FF65}",
|
30
|
-
total
|
30
|
+
total:,
|
31
31
|
format: "%a %e %b\u{15E7}%i %p%% %t"
|
32
32
|
)
|
33
33
|
end
|
@@ -73,7 +73,7 @@ namespace :cdtb do
|
|
73
73
|
identity.update_columns(uid: "anonymized-identity-#{identity.id}")
|
74
74
|
end
|
75
75
|
|
76
|
-
Decidim::Authorization.where(user:
|
76
|
+
Decidim::Authorization.where(user:).find_each do |authorization|
|
77
77
|
authorization.update_columns(unique_id: authorization.id)
|
78
78
|
end
|
79
79
|
end
|
data/lib/tasks/census.rake
CHANGED
@@ -51,7 +51,7 @@ namespace :cdtb do
|
|
51
51
|
else
|
52
52
|
Decidim::Organization.find(arguments.first)
|
53
53
|
end
|
54
|
-
handler.with_context(current_organization:
|
54
|
+
handler.with_context(current_organization:)
|
55
55
|
|
56
56
|
credentials= arguments.map { |arg| arg.split(":") }
|
57
57
|
puts "Setting credentials: #{credentials}"
|
data/lib/tasks/multitenants.rake
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
namespace :cdtb do
|
7
7
|
require "decidim/cdtb/tasks_utils"
|
8
|
-
include
|
8
|
+
include Decidim::Cdtb::TasksUtils
|
9
9
|
|
10
10
|
desc <<~EODESC
|
11
11
|
Finds information about the Organization, or Organizations, searching by the :host_term argument ignorecase.
|
@@ -42,7 +42,7 @@ namespace :cdtb do
|
|
42
42
|
return "Please, select an option"
|
43
43
|
end
|
44
44
|
|
45
|
-
adder =
|
45
|
+
adder = Decidim::Cdtb::ParticipatorySpaces::AddContentBlocks.new(processed_models, content_block_names)
|
46
46
|
adder.execute!
|
47
47
|
end
|
48
48
|
|
@@ -81,7 +81,7 @@ namespace :cdtb do
|
|
81
81
|
return "Please, select an option"
|
82
82
|
end
|
83
83
|
|
84
|
-
adder =
|
84
|
+
adder = Decidim::Cdtb::ParticipatorySpaces::MoveImagesToContentBlock.new(processed_models)
|
85
85
|
adder.execute!
|
86
86
|
end
|
87
87
|
end
|
data/lib/tasks/spam.rake
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
namespace :cdtb do
|
4
4
|
namespace :spam do
|
5
|
-
desc "Show a list with users
|
5
|
+
desc "Show a list with users suspicious of being spammers"
|
6
6
|
task :users, %i[org_id] => :environment do |_task, args|
|
7
7
|
organization = args.org_id.present? ? Decidim::Organization.find(args.org_id) : nil
|
8
8
|
|
9
|
-
detector =
|
9
|
+
detector = Decidim::Cdtb::Spam::SpamUsersDetector.new(organization)
|
10
10
|
detector.execute!
|
11
11
|
end
|
12
12
|
end
|
data/lib/tasks/storage.rake
CHANGED
data/lib/tasks/upgrade.rake
CHANGED
@@ -6,13 +6,13 @@
|
|
6
6
|
namespace :cdtb do
|
7
7
|
namespace :upgrades do
|
8
8
|
require "decidim/cdtb/tasks_utils"
|
9
|
-
include
|
9
|
+
include Decidim::Cdtb::TasksUtils
|
10
10
|
|
11
11
|
desc <<~EODESC
|
12
12
|
Validates that migrations from all gems in the Gemfile have been installed.
|
13
13
|
EODESC
|
14
14
|
task validate_migrations: [:environment] do
|
15
|
-
task=
|
15
|
+
task= Decidim::Cdtb::Upgrades::ValidateMigrationsTask.new
|
16
16
|
task.execute!
|
17
17
|
raise("There are pending migrations") if task.pending_migrations?
|
18
18
|
end
|
data/lib/tasks/users.rake
CHANGED
@@ -8,7 +8,7 @@ namespace :cdtb do
|
|
8
8
|
Fix Decidim::User's nicknames.
|
9
9
|
EODESC
|
10
10
|
task fix_nicknames: [:environment] do
|
11
|
-
fixer=
|
11
|
+
fixer= Decidim::Cdtb::Fixes::NicknameFixer.new
|
12
12
|
fixer.execute!
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ namespace :cdtb do
|
|
16
16
|
Remove Decidim::User's by IDs in a CSV.
|
17
17
|
EODESC
|
18
18
|
task :remove, %i[csv_path reporter_user_email] => [:environment] do |_taks, args|
|
19
|
-
service =
|
19
|
+
service = Decidim::Cdtb::Users::Remover.new(args.csv_path, args.reporter_user_email)
|
20
20
|
service.execute!
|
21
21
|
end
|
22
22
|
|
@@ -30,7 +30,7 @@ namespace :cdtb do
|
|
30
30
|
filename= "admins"
|
31
31
|
|
32
32
|
if organization_id.present?
|
33
|
-
query= query.where(organization_id:
|
33
|
+
query= query.where(organization_id:)
|
34
34
|
filename+= "-org#{organization_id}"
|
35
35
|
end
|
36
36
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-cdtb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oliver Valls
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: decidim
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.28.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.28.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,28 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.28.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: faker
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
68
|
+
version: 0.28.0
|
83
69
|
description: A gem to help managing Decidim applications.
|
84
70
|
email:
|
85
71
|
- 199462+tramuntanal@users.noreply.github.com
|
@@ -110,7 +96,7 @@ files:
|
|
110
96
|
- lib/decidim/cdtb/participatory_spaces/add_content_blocks.rb
|
111
97
|
- lib/decidim/cdtb/participatory_spaces/manages_content_blocks.rb
|
112
98
|
- lib/decidim/cdtb/participatory_spaces/move_images_to_content_block.rb
|
113
|
-
- lib/decidim/cdtb/spam/
|
99
|
+
- lib/decidim/cdtb/spam/spam_users_detector.rb
|
114
100
|
- lib/decidim/cdtb/storage/local_sharding.rb
|
115
101
|
- lib/decidim/cdtb/storage/set_local_on_blobs.rb
|
116
102
|
- lib/decidim/cdtb/task.rb
|
@@ -151,14 +137,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
151
137
|
requirements:
|
152
138
|
- - ">="
|
153
139
|
- !ruby/object:Gem::Version
|
154
|
-
version: 3.
|
140
|
+
version: 3.1.7
|
155
141
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
142
|
requirements:
|
157
143
|
- - ">="
|
158
144
|
- !ruby/object:Gem::Version
|
159
145
|
version: '0'
|
160
146
|
requirements: []
|
161
|
-
rubygems_version: 3.
|
147
|
+
rubygems_version: 3.3.27
|
162
148
|
signing_key:
|
163
149
|
specification_version: 4
|
164
150
|
summary: CodiTramuntana's Decidim Toolbelt (cdtb).
|