Using Date.today and Time.now might lead to inconsistencies if the time zone the application uses is not the same as the system time zone.
460 lines
6.8 KiB
Ruby
460 lines
6.8 KiB
Ruby
namespace :proposal_actions do
|
|
desc "Move link attribute to links collection"
|
|
task migrate_links: :environment do
|
|
ProposalDashboardAction.where.not(link: nil).each do |action|
|
|
next if action.link.blank?
|
|
|
|
Link.create!(
|
|
label: action.title,
|
|
url: action.link,
|
|
linkable: action
|
|
)
|
|
end
|
|
end
|
|
|
|
desc "Initialize proposal settings"
|
|
task initialize_settings: :environment do
|
|
%w[
|
|
proposals.successful_proposal_id
|
|
proposals.poll_short_title
|
|
proposals.poll_description
|
|
proposals.poll_link
|
|
proposals.email_short_title
|
|
proposals.email_description
|
|
proposals.poster_short_title
|
|
proposals.poster_description
|
|
].each do |key|
|
|
Setting[key] = nil if Setting.find_by(key: key).nil?
|
|
end
|
|
end
|
|
|
|
desc "Publish all proposals"
|
|
task publish_all: :environment do
|
|
Proposal.draft.find_each do |proposal|
|
|
proposal.update_columns(published_at: proposal.created_at, updated_at: Time.current)
|
|
end
|
|
end
|
|
|
|
desc "Simulate successful proposal"
|
|
task create_successful_proposal: :environment do
|
|
expected_supports = [
|
|
1049,
|
|
596,
|
|
273,
|
|
208,
|
|
97,
|
|
74,
|
|
148,
|
|
116,
|
|
83,
|
|
62,
|
|
42,
|
|
20,
|
|
36,
|
|
40,
|
|
44,
|
|
38,
|
|
45,
|
|
17,
|
|
15,
|
|
15,
|
|
10,
|
|
28,
|
|
22,
|
|
32,
|
|
26,
|
|
15,
|
|
16,
|
|
21,
|
|
26,
|
|
25,
|
|
14,
|
|
12,
|
|
11,
|
|
18,
|
|
27,
|
|
27,
|
|
22,
|
|
119,
|
|
103,
|
|
65,
|
|
79,
|
|
140,
|
|
96,
|
|
102,
|
|
96,
|
|
65,
|
|
42,
|
|
39,
|
|
108,
|
|
380,
|
|
424,
|
|
302,
|
|
233,
|
|
98,
|
|
88,
|
|
78,
|
|
149,
|
|
202,
|
|
137,
|
|
135,
|
|
48,
|
|
52,
|
|
90,
|
|
47,
|
|
120,
|
|
83,
|
|
55,
|
|
29,
|
|
38,
|
|
51,
|
|
64,
|
|
105,
|
|
27,
|
|
17,
|
|
8,
|
|
13,
|
|
16,
|
|
118,
|
|
105,
|
|
69,
|
|
136,
|
|
85,
|
|
50,
|
|
32,
|
|
32,
|
|
34,
|
|
38,
|
|
24,
|
|
23,
|
|
34,
|
|
16,
|
|
41,
|
|
22,
|
|
13,
|
|
17,
|
|
44,
|
|
98,
|
|
52,
|
|
42,
|
|
38,
|
|
12,
|
|
7,
|
|
14,
|
|
14,
|
|
25,
|
|
20,
|
|
21,
|
|
10,
|
|
10,
|
|
11,
|
|
22,
|
|
44,
|
|
28,
|
|
9,
|
|
35,
|
|
30,
|
|
24,
|
|
22,
|
|
91,
|
|
41,
|
|
34,
|
|
42,
|
|
23,
|
|
21,
|
|
18,
|
|
18,
|
|
19,
|
|
21,
|
|
58,
|
|
31,
|
|
30,
|
|
24,
|
|
38,
|
|
32,
|
|
20,
|
|
372,
|
|
520,
|
|
178,
|
|
85,
|
|
150,
|
|
562,
|
|
212,
|
|
110,
|
|
50,
|
|
49,
|
|
53,
|
|
69,
|
|
134,
|
|
78,
|
|
42,
|
|
62,
|
|
76,
|
|
141,
|
|
101,
|
|
196,
|
|
209,
|
|
196,
|
|
211,
|
|
165,
|
|
181,
|
|
361,
|
|
736,
|
|
325,
|
|
194,
|
|
194,
|
|
126,
|
|
122,
|
|
143,
|
|
186,
|
|
339,
|
|
169,
|
|
97,
|
|
125,
|
|
120,
|
|
152,
|
|
88,
|
|
27,
|
|
45,
|
|
23,
|
|
35,
|
|
39,
|
|
53,
|
|
40,
|
|
23,
|
|
26,
|
|
22,
|
|
20,
|
|
30,
|
|
18,
|
|
22,
|
|
15,
|
|
50,
|
|
42,
|
|
23,
|
|
11,
|
|
94,
|
|
113,
|
|
115,
|
|
122,
|
|
159,
|
|
184,
|
|
173,
|
|
211,
|
|
161,
|
|
144,
|
|
115,
|
|
99,
|
|
80,
|
|
77,
|
|
123,
|
|
355,
|
|
338,
|
|
226,
|
|
201,
|
|
70,
|
|
47,
|
|
117,
|
|
116,
|
|
61,
|
|
79,
|
|
284,
|
|
607,
|
|
565,
|
|
541,
|
|
347,
|
|
265,
|
|
204,
|
|
158,
|
|
127,
|
|
110,
|
|
173,
|
|
137,
|
|
92,
|
|
135,
|
|
95,
|
|
104,
|
|
131,
|
|
106,
|
|
103,
|
|
85,
|
|
81,
|
|
46,
|
|
58,
|
|
88,
|
|
108,
|
|
85,
|
|
78,
|
|
52,
|
|
39,
|
|
21,
|
|
33,
|
|
50,
|
|
57,
|
|
53,
|
|
32,
|
|
263,
|
|
162,
|
|
89,
|
|
142,
|
|
70,
|
|
48,
|
|
39,
|
|
26,
|
|
19,
|
|
25,
|
|
24,
|
|
36,
|
|
48,
|
|
48,
|
|
26,
|
|
19,
|
|
40,
|
|
1916,
|
|
535,
|
|
214,
|
|
106,
|
|
73,
|
|
50,
|
|
42,
|
|
62,
|
|
54,
|
|
54,
|
|
82,
|
|
124,
|
|
112,
|
|
104,
|
|
328,
|
|
256,
|
|
309,
|
|
547,
|
|
68,
|
|
27,
|
|
41,
|
|
55,
|
|
55,
|
|
37,
|
|
32,
|
|
29,
|
|
14,
|
|
18,
|
|
23,
|
|
21,
|
|
18,
|
|
11,
|
|
10,
|
|
16,
|
|
12,
|
|
49,
|
|
74,
|
|
230,
|
|
110,
|
|
63,
|
|
17,
|
|
14,
|
|
26,
|
|
300,
|
|
137,
|
|
45,
|
|
25,
|
|
7,
|
|
6,
|
|
19,
|
|
12,
|
|
7,
|
|
53,
|
|
53,
|
|
14,
|
|
14,
|
|
17,
|
|
10,
|
|
8,
|
|
6,
|
|
5,
|
|
7,
|
|
5,
|
|
3,
|
|
5,
|
|
5,
|
|
4,
|
|
4,
|
|
3,
|
|
1,
|
|
4,
|
|
7,
|
|
7,
|
|
5,
|
|
6,
|
|
3,
|
|
3,
|
|
8,
|
|
6,
|
|
6,
|
|
4,
|
|
7,
|
|
4,
|
|
5,
|
|
9,
|
|
5,
|
|
1,
|
|
3,
|
|
4,
|
|
1,
|
|
2,
|
|
5,
|
|
4,
|
|
3,
|
|
5
|
|
]
|
|
|
|
votes_count = expected_supports.inject(0.0) { |sum, x| sum + x }
|
|
goal_votes = Setting["votes_for_proposal_success"].to_f
|
|
cached_votes_up = 0
|
|
|
|
author = User.all.sample
|
|
description = "<p>This is an example of a successful proposal with an ideal progress.</p>"
|
|
proposal = Proposal.create!(author: author,
|
|
title: Faker::Lorem.sentence(3).truncate(60),
|
|
summary: Faker::Lorem.sentence(3),
|
|
responsible_name: Faker::Name.name,
|
|
description: description,
|
|
created_at: Time.current - expected_supports.length.days,
|
|
tag_list: "Example",
|
|
geozone: Geozone.all.sample,
|
|
skip_map: "1",
|
|
terms_of_service: "1",
|
|
published_at: Time.current - expected_supports.length.days)
|
|
|
|
expected_supports.each_with_index do |supports, day_offset|
|
|
supports = (supports * goal_votes / votes_count).ceil
|
|
cached_votes_up += supports
|
|
|
|
supports.times do |i|
|
|
user = User.create!(
|
|
username: "user_#{proposal.id}_#{day_offset}_#{i}",
|
|
email: "user_#{proposal.id}_#{day_offset}_#{i}@consul.dev",
|
|
password: "12345678",
|
|
password_confirmation: "12345678",
|
|
confirmed_at: Time.current - expected_supports.length.days,
|
|
terms_of_service: "1",
|
|
gender: ["Male", "Female"].sample,
|
|
date_of_birth: rand((Time.current - 80.years)..(Time.current - 16.years)),
|
|
public_activity: (rand(1..100) > 30)
|
|
)
|
|
|
|
Vote.create!(
|
|
votable: proposal,
|
|
voter: user,
|
|
vote_flag: false,
|
|
vote_weight: 1,
|
|
created_at: proposal.published_at + day_offset.days,
|
|
updated_at: proposal.published_at + day_offset.days
|
|
)
|
|
end
|
|
end
|
|
|
|
Setting["proposals.successful_proposal_id"] = proposal.id
|
|
proposal.update(cached_votes_up: cached_votes_up)
|
|
end
|
|
end
|