Commit 31b7f3229c5199572dc4981124c5088825f7b7ad
1 parent
27793a54
Exists in
master
and in
29 other branches
rails3: fix spaminator plugin
Showing
11 changed files
with
101 additions
and
85 deletions
Show diff stats
... | ... | @@ -0,0 +1 @@ |
1 | +gem "progressbar" | ... | ... |
plugins/spaminator/lib/spaminator_plugin.rb
... | ... | @@ -15,7 +15,7 @@ class SpaminatorPlugin < Noosfero::Plugin |
15 | 15 | def self.schedule_scan(environment) |
16 | 16 | settings = Noosfero::Plugin::Settings.new(environment, self) |
17 | 17 | if !settings.scanning |
18 | - job = Delayed::Job.enqueue(SpaminatorPlugin::ScanJob.new(environment.id), 0, settings.period.to_i.days.from_now) | |
18 | + job = Delayed::Job.enqueue(SpaminatorPlugin::ScanJob.new(environment.id), :run_at => settings.period.to_i.days.from_now) | |
19 | 19 | settings.scheduled_scan = job.id |
20 | 20 | settings.save! |
21 | 21 | end | ... | ... |
plugins/spaminator/lib/spaminator_plugin/mailer.rb
1 | 1 | class SpaminatorPlugin::Mailer < Noosfero::Plugin::MailerBase |
2 | 2 | |
3 | + include Rails.application.routes.url_helpers | |
3 | 4 | def inactive_person_notification(person) |
4 | - recipients person.email | |
5 | - from "#{person.environment.name} <#{person.environment.contact_email}>" | |
6 | - subject _("[%s] You must reactivate your account.") % person.environment.name | |
7 | - content_type 'text/html' | |
8 | - body :person => person, | |
9 | - :environment => person.environment, | |
10 | - :url => url_for(:host => person.default_hostname, :controller => 'account', :action => 'forgot_password') | |
5 | + mail( | |
6 | + :to => person.email, | |
7 | + :from => "#{person.environment.name} <#{person.environment.contact_email}>", | |
8 | + :subject => _("[%s] You must reactivate your account.") % person.environment.name, | |
9 | + :content_type => 'text/html', | |
10 | + :body => {:person => person, | |
11 | + :environment => person.environment, | |
12 | + :url => url_for(:host => person.default_hostname, :controller => 'account', :action => 'forgot_password')} | |
13 | + ) | |
14 | + end | |
15 | + | |
16 | + class Job < Struct.new(:person, :method) | |
17 | + def perform | |
18 | + SpaminatorPlugin::Mailer.send(method, person).deliver | |
19 | + end | |
11 | 20 | end |
12 | 21 | |
13 | 22 | end | ... | ... |
plugins/spaminator/lib/spaminator_plugin/report.rb
... | ... | @@ -5,10 +5,12 @@ class SpaminatorPlugin::Report < Noosfero::Plugin::ActiveRecord |
5 | 5 | |
6 | 6 | validates_presence_of :environment |
7 | 7 | |
8 | - named_scope :from, lambda { |environment| {:conditions => {:environment_id => environment}}} | |
8 | + attr_accessible :environment | |
9 | 9 | |
10 | - def after_initialize | |
11 | - self.failed ||= {:people => [], :comments => []} | |
10 | + scope :from, lambda { |environment| {:conditions => {:environment_id => environment}}} | |
11 | + | |
12 | + after_initialize do |report| | |
13 | + report.failed = {:people => [], :comments => []} if report.failed.blank? | |
12 | 14 | end |
13 | 15 | |
14 | 16 | def spams | ... | ... |
plugins/spaminator/lib/spaminator_plugin/spaminator.rb
1 | +# encoding: utf-8 | |
1 | 2 | require 'spaminator_plugin/mailer' |
2 | 3 | |
3 | 4 | class SpaminatorPlugin::Spaminator |
... | ... | @@ -13,8 +14,8 @@ class SpaminatorPlugin::Spaminator |
13 | 14 | end |
14 | 15 | |
15 | 16 | def initialize_logger(environment) |
16 | - logdir = File.join(RAILS_ROOT, 'log', SpaminatorPlugin.name.underscore) | |
17 | - File.makedirs(logdir) if !File.exist?(logdir) | |
17 | + logdir = Rails.root.join('log', SpaminatorPlugin.name.underscore) | |
18 | + FileUtils.mkdir_p(logdir) if !File.exist?(logdir) | |
18 | 19 | logpath = File.join(logdir, "#{environment.name.to_slug}_#{ENV['RAILS_ENV']}_#{Time.now.strftime('%F_%T')}.log") |
19 | 20 | @logger = Logger.new(logpath) |
20 | 21 | end |
... | ... | @@ -28,9 +29,10 @@ class SpaminatorPlugin::Spaminator |
28 | 29 | def initialize(environment) |
29 | 30 | @environment = environment |
30 | 31 | @settings = Noosfero::Plugin::Settings.new(@environment, SpaminatorPlugin) |
31 | - @report = SpaminatorPlugin::Report.new(:environment => environment, | |
32 | + @report = SpaminatorPlugin::Report.new({:environment => environment, | |
32 | 33 | :total_people => Person.count, |
33 | - :total_comments => Comment.count) | |
34 | + :total_comments => Comment.count}, | |
35 | + :without_protection => true) | |
34 | 36 | self.class.initialize_logger(environment) |
35 | 37 | end |
36 | 38 | |
... | ... | @@ -158,7 +160,7 @@ class SpaminatorPlugin::Spaminator |
158 | 160 | |
159 | 161 | def disable_person(person) |
160 | 162 | if person.disable |
161 | - SpaminatorPlugin::Mailer.delay.deliver_inactive_person_notification(person) | |
163 | + Delayed::Job.enqueue(SpaminatorPlugin::Mailer::Job.new(person, :inactive_person_notification)) | |
162 | 164 | end |
163 | 165 | end |
164 | 166 | ... | ... |
plugins/spaminator/test/unit/spaminator_plugin/mailer_test.rb
... | ... | @@ -18,7 +18,7 @@ class SpaminatorPlugin::MailerTest < ActiveSupport::TestCase |
18 | 18 | environment.save |
19 | 19 | |
20 | 20 | person = create_user('spammer').person |
21 | - mail = SpaminatorPlugin::Mailer.deliver_inactive_person_notification(person) | |
21 | + mail = SpaminatorPlugin::Mailer.inactive_person_notification(person).deliver | |
22 | 22 | |
23 | 23 | assert_equal ['spammer@noosfero.org'], mail.to |
24 | 24 | assert_equal ['no-reply@noosfero.org'], mail.from | ... | ... |
plugins/spaminator/test/unit/spaminator_plugin/report_test.rb
... | ... | @@ -5,11 +5,11 @@ class SpaminatorPlugin::ReportTest < ActiveSupport::TestCase |
5 | 5 | should 'must belong to an environment' do |
6 | 6 | report = SpaminatorPlugin::Report.new |
7 | 7 | report.valid? |
8 | - assert report.errors.invalid?(:environment) | |
8 | + assert report.errors.include?(:environment) | |
9 | 9 | |
10 | 10 | report.environment = Environment.default |
11 | 11 | report.valid? |
12 | - assert !report.errors.invalid?(:environment) | |
12 | + assert !report.errors.include?(:environment) | |
13 | 13 | end |
14 | 14 | |
15 | 15 | should 'have scope of all reports from an environment' do |
... | ... | @@ -21,7 +21,7 @@ class SpaminatorPlugin::ReportTest < ActiveSupport::TestCase |
21 | 21 | |
22 | 22 | reports = SpaminatorPlugin::Report.from(environment) |
23 | 23 | |
24 | - assert_equal ActiveRecord::NamedScope::Scope, reports.class | |
24 | + assert_equal ActiveRecord::Relation, reports.class | |
25 | 25 | assert_includes reports, r1 |
26 | 26 | assert_includes reports, r2 |
27 | 27 | assert_includes reports, r3 | ... | ... |
plugins/spaminator/test/unit/spaminator_plugin/spaminator_test.rb
... | ... | @@ -121,7 +121,7 @@ class SpaminatorPlugin::SpaminatorTest < ActiveSupport::TestCase |
121 | 121 | |
122 | 122 | should 'mark person as spammer' do |
123 | 123 | person = create_user('spammer').person |
124 | - assert_difference AbuseComplaint.finished, :count, 1 do | |
124 | + assert_difference 'AbuseComplaint.finished.count', 1 do | |
125 | 125 | spaminator.send(:mark_as_spammer, person) |
126 | 126 | end |
127 | 127 | person.reload |
... | ... | @@ -130,16 +130,18 @@ class SpaminatorPlugin::SpaminatorTest < ActiveSupport::TestCase |
130 | 130 | |
131 | 131 | should 'send email notification after disabling person' do |
132 | 132 | person = create_user('spammer').person |
133 | - assert_difference(ActionMailer::Base.deliveries, :size, 1) do | |
133 | + assert_difference 'ActionMailer::Base.deliveries.size', 1 do | |
134 | 134 | spaminator.send(:disable_person, person) |
135 | + process_delayed_job_queue | |
135 | 136 | end |
136 | 137 | end |
137 | 138 | |
138 | 139 | should 'not send email notification if person was not disabled' do |
139 | 140 | person = create_user('spammer').person |
140 | 141 | person.expects(:disable).returns(false) |
141 | - assert_no_difference(ActionMailer::Base.deliveries, :size) do | |
142 | + assert_no_difference 'ActionMailer::Base.deliveries.size' do | |
142 | 143 | spaminator.send(:disable_person, person) |
144 | + process_delayed_job_queue | |
143 | 145 | end |
144 | 146 | end |
145 | 147 | ... | ... |
plugins/spaminator/test/unit/spaminator_plugin_test.rb
... | ... | @@ -12,13 +12,13 @@ class SpaminatorPluginTest < ActiveSupport::TestCase |
12 | 12 | should 'schedule a scan if not already scanning' do |
13 | 13 | settings.scanning = true |
14 | 14 | settings.save! |
15 | - assert_no_difference Delayed::Job, :count do | |
15 | + assert_no_difference 'Delayed::Job.count' do | |
16 | 16 | SpaminatorPlugin.schedule_scan(environment) |
17 | 17 | end |
18 | 18 | |
19 | 19 | settings.scanning = false |
20 | 20 | settings.save! |
21 | - assert_difference Delayed::Job, :count, 1 do | |
21 | + assert_difference 'Delayed::Job.count', 1 do | |
22 | 22 | SpaminatorPlugin.schedule_scan(environment) |
23 | 23 | end |
24 | 24 | end | ... | ... |
plugins/spaminator/views/spaminator_plugin_admin/index.html.erb
0 → 100644
... | ... | @@ -0,0 +1,60 @@ |
1 | +<h1><%= _('Spaminator settings')%></h1> | |
2 | + | |
3 | +<%= form_for(:settings) do |f| %> | |
4 | + | |
5 | + <div id="spaminator-config-fields"> | |
6 | + <%= labelled_form_field _('Period (days) for scanning spammers'), f.text_field(:period, :size => 4) %> | |
7 | + | |
8 | + <p id="deploy-status"> | |
9 | + <% if @settings.deployed.nil? %> | |
10 | + <%= _("Spaminator was never deployed. While deployed, Spaminator will periodically scan your social network for spams. Do it now!") %> | |
11 | + <% elsif @settings.deployed %> | |
12 | + <%= _("Spaminator is deployed.") %> | |
13 | + <% else %> | |
14 | + <%= _("Spaminator is withhold.") %> | |
15 | + <% end %> | |
16 | + </p> | |
17 | + <p id="next-run-status"> | |
18 | + <% if @settings.scanning %> | |
19 | + <%= _("Spaminator is scanning...") %> | |
20 | + <% elsif @settings.deployed %> | |
21 | + <%= _("Next scan on %s days.") % @next_run %> | |
22 | + <% end %> | |
23 | + </p> | |
24 | + | |
25 | + <% content = @settings.scanning ? _('Scanning...') : _('Scan now!') %> | |
26 | + <% klass = @settings.scanning ? 'disabled' : '' %> | |
27 | + <%= button(:search, content, {:action => 'scan'}, :class => klass, :disabled => @settings.scanning) %> | |
28 | + <% if !@settings.scanning %> | |
29 | + <%= button(:right, _('Deploy'), {:action => 'deploy'}, :title => _('Schedule next scan for the period defined')) if !@settings.deployed %> | |
30 | + <%= button(:cancel, _('Withhold'), {:action => 'withhold'}, :title => _('Cancel next scheduled scans')) if @settings.deployed %> | |
31 | + <% end %> | |
32 | + | |
33 | + <% button_bar do %> | |
34 | + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> | |
35 | + <% end %> | |
36 | + </div> | |
37 | + | |
38 | + <table id="spaminator-report-table"> | |
39 | + <tr> | |
40 | + <th><%= _('Date') %></th> | |
41 | + <th><%= _('Spams') %></th> | |
42 | + <th><%= _('Spammers')%></th> | |
43 | + </tr> | |
44 | + <% @reports.each do |report| %> | |
45 | + <tr> | |
46 | + <td><%= report.formated_date %></td> | |
47 | + <td title='<%= _('Spam comments found / number of comments verified') %>'><%= "#{report.spams} / #{report.total_comments}" %></td> | |
48 | + <td title='<%= _('Spammers found / number of users verified') %>'><%= "#{report.spammers} / #{report.total_people}" %></td> | |
49 | + </tr> | |
50 | + <% end %> | |
51 | + <tr id="spaminator-reports-see-all"> | |
52 | + <% content = @reports_count > 0 ? link_to(_('SEE FULL REPORTS (%s)') % @reports_count, :action => 'reports') : _('No Report') %> | |
53 | + <td colspan='3'><%= content %></td> | |
54 | + </tr> | |
55 | + </table> | |
56 | + | |
57 | + <br style='clear: both'/> | |
58 | + | |
59 | +<% end %> | |
60 | + | ... | ... |
plugins/spaminator/views/spaminator_plugin_admin/index.rhtml
... | ... | @@ -1,60 +0,0 @@ |
1 | -<h1><%= _('Spaminator settings')%></h1> | |
2 | - | |
3 | -<%= form_for(:settings) do |f| %> | |
4 | - | |
5 | - <div id="spaminator-config-fields"> | |
6 | - <%= labelled_form_field _('Period (days) for scanning spammers'), f.text_field(:period, :size => 4) %> | |
7 | - | |
8 | - <p id="deploy-status"> | |
9 | - <% if @settings.deployed.nil? %> | |
10 | - <%= _("Spaminator was never deployed. While deployed, Spaminator will periodically scan your social network for spams. Do it now!") %> | |
11 | - <% elsif @settings.deployed %> | |
12 | - <%= _("Spaminator is deployed.") %> | |
13 | - <% else %> | |
14 | - <%= _("Spaminator is withhold.") %> | |
15 | - <% end %> | |
16 | - </p> | |
17 | - <p id="next-run-status"> | |
18 | - <% if @settings.scanning %> | |
19 | - <%= _("Spaminator is scanning...") %> | |
20 | - <% elsif @settings.deployed %> | |
21 | - <%= _("Next scan on %s days.") % @next_run %> | |
22 | - <% end %> | |
23 | - </p> | |
24 | - | |
25 | - <% content = @settings.scanning ? _('Scanning...') : _('Scan now!') %> | |
26 | - <% klass = @settings.scanning ? 'disabled' : '' %> | |
27 | - <%= button(:search, content, {:action => 'scan'}, :class => klass, :disabled => @settings.scanning) %> | |
28 | - <% if !@settings.scanning %> | |
29 | - <%= button(:right, _('Deploy'), {:action => 'deploy'}, :title => _('Schedule next scan for the period defined')) if !@settings.deployed %> | |
30 | - <%= button(:cancel, _('Withhold'), {:action => 'withhold'}, :title => _('Cancel next scheduled scans')) if @settings.deployed %> | |
31 | - <% end %> | |
32 | - | |
33 | - <% button_bar do %> | |
34 | - <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> | |
35 | - <% end %> | |
36 | - </div> | |
37 | - | |
38 | - <table id="spaminator-report-table"> | |
39 | - <tr> | |
40 | - <th><%= _('Date') %></th> | |
41 | - <th><%= _('Spams') %></th> | |
42 | - <th><%= _('Spammers')%></th> | |
43 | - </tr> | |
44 | - <% @reports.each do |report| %> | |
45 | - <tr> | |
46 | - <td><%= report.formated_date %></td> | |
47 | - <td title='<%= _('Spam comments found / number of comments verified') %>'><%= "#{report.spams} / #{report.total_comments}" %></td> | |
48 | - <td title='<%= _('Spammers found / number of users verified') %>'><%= "#{report.spammers} / #{report.total_people}" %></td> | |
49 | - </tr> | |
50 | - <% end %> | |
51 | - <tr id="spaminator-reports-see-all"> | |
52 | - <% content = @reports_count > 0 ? link_to(_('SEE FULL REPORTS (%s)') % @reports_count, :action => 'reports') : _('No Report') %> | |
53 | - <td colspan='3'><%= content %></td> | |
54 | - </tr> | |
55 | - </table> | |
56 | - | |
57 | - <br style='clear: both'/> | |
58 | - | |
59 | -<% end %> | |
60 | - |