activitypub 0.3.2 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: