summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzegorz.bizon@ntsn.pl>2015-12-02 08:48:21 +0100
committerGrzegorz Bizon <grzegorz.bizon@ntsn.pl>2015-12-03 13:38:59 +0100
commitba08811d07cd1804b027b1a37a5278723cdbeb2c (patch)
tree21c333743edb9925959b6a7a4e252fe28b6b1051 /app
parent22d87b74a9de5d603f101699d7a3665db9627037 (diff)
downloadgitlab-ce-ba08811d07cd1804b027b1a37a5278723cdbeb2c.tar.gz
Move note emoji-award implementation to note model (feature envy)
Diffstat (limited to 'app')
-rw-r--r--app/models/note.rb33
-rw-r--r--app/services/notes/create_service.rb24
2 files changed, 33 insertions, 24 deletions
diff --git a/app/models/note.rb b/app/models/note.rb
index 40b46b85da1..8acb2cf7582 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -72,6 +72,7 @@ class Note < ActiveRecord::Base
serialize :st_diff
before_create :set_diff, if: ->(n) { n.line_code.present? }
+ before_validation :set_award!
class << self
def discussions_from_notes(notes)
@@ -349,4 +350,36 @@ class Note < ActiveRecord::Base
def editable?
!system?
end
+
+ # Checks if note is an award added from an issue comment.
+ #
+ # If note is an award, this method sets is_award to true,
+ # and changes note content to award-emoji name.
+ #
+ # Awards are only supported for issue comments.
+ #
+ # Method is executed as a before_validation callback.
+ #
+ def set_award!
+ return unless issue_comment? && contains_emoji_only?
+
+ self.is_award = true
+ self.note = award_emoji_name
+ end
+
+ private
+
+ def issue_comment?
+ noteable.kind_of?(Issue)
+ end
+
+ def contains_emoji_only?
+ (note =~ /\A:[-_+[:alnum:]]*:\s?\z/) ? true : false
+ end
+
+ def award_emoji_name
+ return nil unless contains_emoji_only?
+
+ note.match(/\A:([-_+[:alnum:]]*):\s?/)[1]
+ end
end
diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb
index 20a3ba30755..a8486e6a5a1 100644
--- a/app/services/notes/create_service.rb
+++ b/app/services/notes/create_service.rb
@@ -5,11 +5,6 @@ module Notes
note.author = current_user
note.system = false
- if award_emoji_note?
- note.is_award = true
- note.note = emoji_name
- end
-
if note.save
notification_service.new_note(note)
@@ -33,24 +28,5 @@ module Notes
note.project.execute_hooks(note_data, :note_hooks)
note.project.execute_services(note_data, :note_hooks)
end
-
- private
-
- def award_emoji_note?
- # We support award-emojis only in issue discussion
- issue_comment? && contains_emoji_only?
- end
-
- def contains_emoji_only?
- params[:note] =~ /\A:[-_+[:alnum:]]*:\s?\z/
- end
-
- def issue_comment?
- params[:noteable_type] == 'Issue'
- end
-
- def emoji_name
- params[:note].match(/\A:([-_+[:alnum:]]*):\s?/)[1]
- end
end
end