about summary refs log tree commit diff
path: root/app/lib/ostatus/activity/base.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/ostatus/activity/base.rb')
-rw-r--r--app/lib/ostatus/activity/base.rb50
1 files changed, 50 insertions, 0 deletions
diff --git a/app/lib/ostatus/activity/base.rb b/app/lib/ostatus/activity/base.rb
new file mode 100644
index 000000000..f528815b3
--- /dev/null
+++ b/app/lib/ostatus/activity/base.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+class Ostatus::Activity::Base
+  def initialize(xml, account = nil)
+    @xml = xml
+    @account = account
+  end
+
+  def status?
+    [:activity, :note, :comment].include?(type)
+  end
+
+  def verb
+    raw = @xml.at_xpath('./activity:verb', activity: TagManager::AS_XMLNS).content
+    TagManager::VERBS.key(raw)
+  rescue
+    :post
+  end
+
+  def type
+    raw = @xml.at_xpath('./activity:object-type', activity: TagManager::AS_XMLNS).content
+    TagManager::TYPES.key(raw)
+  rescue
+    :activity
+  end
+
+  def id
+    @xml.at_xpath('./xmlns:id', xmlns: TagManager::XMLNS).content
+  end
+
+  def url
+    link = @xml.at_xpath('./xmlns:link[@rel="alternate"]', xmlns: TagManager::XMLNS)
+    link.nil? ? nil : link['href']
+  end
+
+  private
+
+  def find_status(uri)
+    if TagManager.instance.local_id?(uri)
+      local_id = TagManager.instance.unique_tag_to_local_id(uri, 'Status')
+      return Status.find_by(id: local_id)
+    end
+
+    Status.find_by(uri: uri)
+  end
+
+  def redis
+    Redis.current
+  end
+end