summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorPatricio Cano <suprnova32@gmail.com>2016-07-27 19:03:06 -0500
committerPatricio Cano <suprnova32@gmail.com>2016-08-15 13:17:58 -0500
commit95419679f23f0628d1885dd9656cc159e9d55ea9 (patch)
tree4ec924b2f7dfbfd9e0390065d430c9daff8984bb /app/models
parent640e485c6aa19f8fca1be7fc45e7f65da4469fbd (diff)
downloadgitlab-ce-95419679f23f0628d1885dd9656cc159e9d55ea9.tar.gz
Lay the ground works to submit information to Akismet
- New concern `AkismetSubmittable` to allow issues and other `Spammable` models to be submitted to Akismet. - New model `UserAgentDetail` to store information needed for Akismet. - Services needed for their creation and tests.
Diffstat (limited to 'app/models')
-rw-r--r--app/models/concerns/akismet_submittable.rb15
-rw-r--r--app/models/issue.rb1
-rw-r--r--app/models/user_agent_detail.rb16
3 files changed, 32 insertions, 0 deletions
diff --git a/app/models/concerns/akismet_submittable.rb b/app/models/concerns/akismet_submittable.rb
new file mode 100644
index 00000000000..17821688941
--- /dev/null
+++ b/app/models/concerns/akismet_submittable.rb
@@ -0,0 +1,15 @@
+module AkismetSubmittable
+ extend ActiveSupport::Concern
+
+ included do
+ has_one :user_agent_detail, as: :subject
+ end
+
+ def can_be_submitted?
+ if user_agent_detail
+ user_agent_detail.submittable?
+ else
+ false
+ end
+ end
+end
diff --git a/app/models/issue.rb b/app/models/issue.rb
index d62ffb21467..6c2635498e5 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -8,6 +8,7 @@ class Issue < ActiveRecord::Base
include Taskable
include Spammable
include FasterCacheKeys
+ include AkismetSubmittable
DueDateStruct = Struct.new(:title, :name).freeze
NoDueDate = DueDateStruct.new('No Due Date', '0').freeze
diff --git a/app/models/user_agent_detail.rb b/app/models/user_agent_detail.rb
new file mode 100644
index 00000000000..6d76dff20e3
--- /dev/null
+++ b/app/models/user_agent_detail.rb
@@ -0,0 +1,16 @@
+class UserAgentDetail < ActiveRecord::Base
+ belongs_to :subject, polymorphic: true
+
+ validates :user_agent,
+ presence: true
+ validates :ip_address,
+ presence: true
+ validates :subject_id,
+ presence: true
+ validates :subject_type,
+ presence: true
+
+ def submittable?
+ user_agent.present? && ip_address.present?
+ end
+end