activitypub 0.3.2 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 112ee8d199c09e5d9ff788e2bdf02b80e745513a8812d01cfbf377fb56daac3b
4
- data.tar.gz: 7132a7c5d296315c29dad6672a511841a0557640d2b43139d1d4399c71e10487
3
+ metadata.gz: 8c0e1247ee89de99f86956188ce6bd17a3a5360b9abb222badc18b2671cca5b9
4
+ data.tar.gz: eeede65bac6dd07a3ba9acdb9569d764448d2ff06816e59741431f9a8f3fdbff
5
5
  SHA512:
6
- metadata.gz: b3f3d2e3788239c080ac7354fa5a02e27ac242911374d86b579473c0ae451f1d46eff8033b7ae91abb8cda24e865cf9c58ebfd2fbc2c86257b4ed01e3856f0a4
7
- data.tar.gz: 8c7b248e72822ca739272b4315fc3256aefe96a333b81ca0676a5717162fd345a6ff2e3eef2ff3d989172abbad8124a652c5aa6cf105c1a7880643aa20c03c53
6
+ metadata.gz: 62a13084316cbf4c333ab333f41639a1a41ec29e72d53c5a9ab61a82b13396a08eb553e2c147d9c2a35dc197756859f2c11d5c6dccfd8525573a2c1f9a74bbe3
7
+ data.tar.gz: acdb52191d7b1fc1ca31178dc8becbeaeac3c97e4a4c14e2fba27fee3ca22722edb3c766cc3d98a9188181541a8b6384643ee3d241953558fd44360d36418c95
@@ -1,23 +1,42 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'json'
3
4
 
4
5
  module ActivityPub
5
6
  class Error < StandardError; end
7
+
6
8
 
7
9
  def self.from_json(json)
8
- h = JSON.parse(json)
10
+ from_hash(JSON.parse(json))
11
+ end
12
+
13
+ def self.from_hash(h)
9
14
  type = h&.dig("type")
10
15
 
11
16
  raise Error, "'type' attribute is required" if !type
12
17
  raise NameError, "'type' attribute with '::' is not allowed" if !type.index("::").nil?
18
+
19
+ # FIXME: May need a way to override/handle custom namespaces.
13
20
 
14
21
  klass = ActivityPub.const_get(type)
15
22
 
16
23
  ob = klass ? klass.new : nil
17
24
 
18
25
  if ob
26
+ context = h.dig("@context")
27
+ ob.instance_variable_set("@_context", context) if context
28
+
19
29
  klass.ap_attributes.each do |attr|
20
- ob.instance_variable_set("@#{attr}", h.dig(attr.to_s))
30
+ v = h.dig(attr.to_s)
31
+
32
+ if v.is_a?(Hash) && v["type"]
33
+ v = from_hash(v)
34
+ elsif v.is_a?(Array)
35
+ v = v.map do |av|
36
+ av.is_a?(Hash) && av["type"] ? from_hash(av) : av
37
+ end
38
+ end
39
+ ob.instance_variable_set("@#{attr}", v)
21
40
  end
22
41
  end
23
42
 
@@ -28,7 +47,7 @@ module ActivityPub
28
47
  # for serialization and dezerialisation.
29
48
  #
30
49
  class Base
31
- def _context = "https://www.w3.org/ns/activitystreams".freeze
50
+ def _context = @_context || "https://www.w3.org/ns/activitystreams"
32
51
  def _type = self.class.name.split("::").last
33
52
 
34
53
 
@@ -31,6 +31,13 @@ module ActivityPub
31
31
  end
32
32
 
33
33
  class OrderedCollection < Collection
34
+ # "orderedItems" is not part of
35
+ # https://www.w3.org/TR/activitystreams-vocabulary/#dfn-orderedcollection,
36
+ # however it is part of at least some Mastodon exports, and so we include
37
+ # it here
38
+ #
39
+ # FIXME: Review/consider whether to marge orderedItems/items internally.
40
+ ap_attr :orderedItems
34
41
  end
35
42
 
36
43
  class CollectionPage < Collection
@@ -218,4 +225,13 @@ module ActivityPub
218
225
  class Tombstone < Object
219
226
  ap_attr :formerType, :deleted
220
227
  end
228
+
229
+ # Mastodon extensions
230
+
231
+ class Hashtag < Link
232
+ end
233
+
234
+ class PropertyValue < Object
235
+ ap_attr :value
236
+ end
221
237
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActivityPub
4
- VERSION = "0.3.2"
4
+ VERSION = "0.3.5"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activitypub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vidar Hokstad
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-03 00:00:00.000000000 Z
11
+ date: 2024-07-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: