summaryrefslogtreecommitdiff
path: root/app/services/award_emojis/copy_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/award_emojis/copy_service.rb')
-rw-r--r--app/services/award_emojis/copy_service.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/app/services/award_emojis/copy_service.rb b/app/services/award_emojis/copy_service.rb
new file mode 100644
index 00000000000..2e500d4c697
--- /dev/null
+++ b/app/services/award_emojis/copy_service.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+# This service copies AwardEmoji from one Awardable to another.
+#
+# It expects the calling code to have performed the necessary authorization
+# checks in order to allow the copy to happen.
+module AwardEmojis
+ class CopyService
+ def initialize(from_awardable, to_awardable)
+ raise ArgumentError, 'Awardables must be different' if from_awardable == to_awardable
+
+ @from_awardable = from_awardable
+ @to_awardable = to_awardable
+ end
+
+ def execute
+ from_awardable.award_emoji.find_each do |award|
+ new_award = award.dup
+ new_award.awardable = to_awardable
+ new_award.save!
+ end
+
+ ServiceResponse.success
+ end
+
+ private
+
+ attr_accessor :from_awardable, :to_awardable
+ end
+end