From 42eeecba3f334227c10533a065e238f51f6dee4c Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Wed, 24 Feb 2016 18:50:16 +0100
Subject: Service to reblog statuses

---
 app/services/post_status_service.rb |  7 +++++++
 app/services/reblog_service.rb      | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+)
 create mode 100644 app/services/reblog_service.rb

(limited to 'app')

diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb
index 39bbe9f9e..3150a0bad 100644
--- a/app/services/post_status_service.rb
+++ b/app/services/post_status_service.rb
@@ -1,4 +1,9 @@
 class PostStatusService < BaseService
+  # Post a text status update, fetch and notify remote users mentioned
+  # @param [Account] account Account from which to post
+  # @param [String] text Message
+  # @param [Status] in_reply_to Optional status to reply to
+  # @return [Status]
   def call(account, text, in_reply_to = nil)
     status = account.statuses.create!(text: text, thread: in_reply_to)
 
@@ -14,6 +19,8 @@ class PostStatusService < BaseService
       next if mentioned_account.local?
       send_interaction_service.(status.stream_entry, mentioned_account)
     end
+
+    status
   end
 
   private
diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb
new file mode 100644
index 000000000..000ed8ee6
--- /dev/null
+++ b/app/services/reblog_service.rb
@@ -0,0 +1,18 @@
+class ReblogService < BaseService
+  # Reblog a status and notify its remote author
+  # @param [Account] account Account to reblog from
+  # @param [Status] reblogged_status Status to be reblogged
+  # @return [Status]
+  def call(account, reblogged_status)
+    reblog = account.statuses.create!(reblog: reblogged_status, text: '')
+    return reblog if reblogged_status.local?
+    send_interaction_service.(reblog.stream_entry, reblogged_status.account)
+    reblog
+  end
+
+  private
+
+  def send_interaction_service
+    @send_interaction_service ||= SendInteractionService.new
+  end
+end
-- 
cgit