jekyll-activity-pub 0.1.0rc10 → 0.1.0rc12

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: 170103e5349bb552e32725ce5ba90938ea4fcf7b034ff1286f680b67bb69d93c
4
- data.tar.gz: 3db2d02b5f965168b0888d2fee69a132eef6073aeb4da1000ca80f64930f2e27
3
+ metadata.gz: 52d19e3cacf79bb7a5c041ae37b4caae232947f50fc94eb7b269edebe37a15b7
4
+ data.tar.gz: 976bf99864bc71f49bec91090de41b4ddb829cfc296ba0addaa7dc43400daddd
5
5
  SHA512:
6
- metadata.gz: a69f783567780f8bf77fc2bc1b4b59435cacfda2a4c9d9f091fdf0390a4160b7e555d22b0d24939a86f8f931866ad79e4b788194067911b6c39e00f44fb517cf
7
- data.tar.gz: 3d26355f79661701e5a4fe5b5a48793c34bc73725befaed5a61239aede84b0bd94172578abe044d6a0fdf9c220472aa3e81913426e461bf1bfcd8d8a57a23182
6
+ metadata.gz: abfa3e386181380e62a2223b64c3201f5b3751921f669c4129e637959c0600c8fa529f8ce929540a51c975154f7a5c007e4d39522561e1c05ce82ff1eda7bce5
7
+ data.tar.gz: 98bb2c9fcec4955dc7b79582421fca47d6d50008bce879a821e5d3d2dc4c800901566230dc402ec1ea03f173c1ce1457d2c3c6751a5f8b9991b16c329edd7604
@@ -49,6 +49,7 @@ module Jekyll
49
49
  'id' => absolute_url(doc.url),
50
50
  'summary' => summary,
51
51
  'published' => (doc.data['created_at'] || doc.date).xmlschema,
52
+ 'updated' => doc.data['last_modified_at']&.xmlschema,
52
53
  'attributedTo' => absolute_url(actor.url),
53
54
  'to' => [
54
55
  'https://www.w3.org/ns/activitystreams#Public'
@@ -9,6 +9,9 @@ module Jekyll
9
9
  class Create < Jekyll::Page
10
10
  include Helper
11
11
 
12
+ # Where is the date stored
13
+ DATE_ATTRIBUTE = 'published'
14
+
12
15
  # @param :object [Jekyll::ActivityPub::Activity]
13
16
  attr_reader :object
14
17
 
@@ -26,10 +29,11 @@ module Jekyll
26
29
  @actor = actor
27
30
 
28
31
  dest = Pathname.new(object.destination(site.dest)).relative_path_from(site.dest)
29
- name = "#{type.downcase}.jsonld"
32
+ name = "#{date.to_i}.jsonld"
30
33
  dir = File.join(
31
34
  File.dirname(dest),
32
- File.basename(dest, '.jsonld')
35
+ File.basename(dest, '.jsonld'),
36
+ type.downcase
33
37
  )
34
38
 
35
39
  super(site, '', dir, name)
@@ -43,14 +47,19 @@ module Jekyll
43
47
  'type' => type,
44
48
  'id' => absolute_url(url),
45
49
  'actor' => absolute_url(actor.url),
46
- 'published' => object.data['published'],
50
+ 'published' => object.data[DATE_ATTRIBUTE],
47
51
  'to' => object.data['to'],
48
52
  'cc' => object.data['cc'],
49
- 'object' => absolute_url(object.url),
53
+ 'object' => object.data,
50
54
  'inReplyTo' => object.data['in_reply_to']
51
55
  }
52
56
  end
53
57
 
58
+ # @return [Time]
59
+ def date
60
+ @date ||= Time.parse(object.data[DATE_ATTRIBUTE])
61
+ end
62
+
54
63
  private
55
64
 
56
65
  def type
@@ -21,6 +21,13 @@ module Jekyll
21
21
  def destination(_)
22
22
  site.in_dest_dir(relative_path)
23
23
  end
24
+
25
+ # @return [Time, nil]
26
+ def updated_at
27
+ @updated_at ||= Time.parse(data['updated'])
28
+ rescue StandardError
29
+ nil
30
+ end
24
31
  end
25
32
 
26
33
  class << self
@@ -120,10 +127,7 @@ module Jekyll
120
127
  data['notifications'].reject do |object_url, _|
121
128
  done? object_url
122
129
  end.each do |object_url, status|
123
- path = site.in_dest_dir(object_url)
124
- data = JSON.parse(File.read(path)) if File.exist? path
125
- object = PseudoObject.new(url: object_url, site: site, relative_path: object_url, data: data || {})
126
- process_object(outbox_endpoint, actor_object, object, status)
130
+ process_object(outbox_endpoint, actor_object, object_for(object_url), status)
127
131
  end
128
132
 
129
133
  # Store everything for later
@@ -151,12 +155,13 @@ module Jekyll
151
155
  end
152
156
 
153
157
  # Updates an activity if it was previously created, otherwise
154
- # create it
158
+ # create it, or update it again if it was modified later
155
159
  #
156
160
  # @param :path [String]
157
161
  # @return [nil]
158
162
  def update(path)
159
- if created?(path)
163
+ # Compare Unix timestamps
164
+ if created?(path) && (object_for(path)&.updated_at&.to_i || 0) > (status(path)['updated_at'] || 0)
160
165
  action(path, 'update')
161
166
  else
162
167
  create(path)
@@ -329,6 +334,18 @@ module Jekyll
329
334
  rescue NameError
330
335
  Jekyll.logger.warn 'ActivityPub:', "Action \"#{action}\" for #{object.url} unrecognized, ignoring."
331
336
  end
337
+
338
+ def object_for(path)
339
+ @@object_for ||= {}
340
+ @@object_for[path_relative_to_dest(path)] ||=
341
+ begin
342
+ rel = path_relative_to_dest(path)
343
+ path = site.in_dest_dir(rel)
344
+ data = JSON.parse(File.read(path)) if File.exist? path
345
+
346
+ PseudoObject.new(url: rel, site: site, relative_path: rel, data: data || {})
347
+ end
348
+ end
332
349
  end
333
350
  end
334
351
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'jekyll/page'
4
+ require_relative 'helper'
5
+
6
+ module Jekyll
7
+ module ActivityPub
8
+ # Represents a removed activity
9
+ class Tombstone < Jekyll::Page
10
+ include Helper
11
+
12
+ # @param :object_id [String]
13
+ attr_reader :object_id
14
+
15
+ # Initialize with default data
16
+ #
17
+ # @param :site [Jekyll::Site]
18
+ # @param :object_id [String]
19
+ def initialize(site, object_id, )
20
+ @context = StubContext.new(registers: { site: site })
21
+ @object_id = object_id
22
+
23
+ dest = Pathname.new(object.destination(site.dest)).relative_path_from(site.dest)
24
+ name = 'tombstone.jsonld'
25
+ dir = File.join(
26
+ File.dirname(dest),
27
+ File.basename(dest, '.jsonld')
28
+ )
29
+
30
+ super(site, '', dir, name)
31
+
32
+ trigger_hooks :post_init
33
+ end
34
+
35
+ def read_yaml(*)
36
+ @data = {
37
+ '@context' => 'https://www.w3.org/ns/activitystreams',
38
+ 'type' => 'Tomsbtone',
39
+ 'id' => absolute_url(object_id),
40
+ 'published' => object.data[DATE_ATTRIBUTE],
41
+ 'to' => object.data['to'],
42
+ 'cc' => object.data['cc'],
43
+ 'object' => object.data,
44
+ 'inReplyTo' => object.data['in_reply_to']
45
+ }
46
+ end
47
+
48
+ # @return [Time]
49
+ def date
50
+ @date ||= Time.parse(object.data[DATE_ATTRIBUTE])
51
+ end
52
+
53
+ private
54
+
55
+ def type
56
+ @type ||= self.class.name.split('::').last
57
+ end
58
+ end
59
+ end
60
+ end
61
+
@@ -5,6 +5,8 @@ require_relative 'create'
5
5
  module Jekyll
6
6
  module ActivityPub
7
7
  # Represents an Update activity
8
- class Update < Create; end
8
+ class Update < Create
9
+ DATE_ATTRIBUTE = 'updated'
10
+ end
9
11
  end
10
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-activity-pub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0rc10
4
+ version: 0.1.0rc12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sutty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-01 00:00:00.000000000 Z
11
+ date: 2023-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: distributed-press-api-client
@@ -144,6 +144,7 @@ files:
144
144
  - lib/jekyll/activity_pub/outbox.rb
145
145
  - lib/jekyll/activity_pub/property_value.rb
146
146
  - lib/jekyll/activity_pub/public_key.rb
147
+ - lib/jekyll/activity_pub/tomsbtone.rb
147
148
  - lib/jekyll/activity_pub/update.rb
148
149
  - lib/jekyll/activity_pub/webfinger.rb
149
150
  - lib/jekyll/command_extension.rb