jekyll-activity-pub 0.1.0rc10 → 0.1.0rc11

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: 90ded40202c7b760dd22940f62dbb6c4293f79a6237262c265e80941bea76211
4
+ data.tar.gz: 3e87a0579232734f96f03d80e7ef3724daaf93a1b522a5510abd945db1d0395c
5
5
  SHA512:
6
- metadata.gz: a69f783567780f8bf77fc2bc1b4b59435cacfda2a4c9d9f091fdf0390a4160b7e555d22b0d24939a86f8f931866ad79e4b788194067911b6c39e00f44fb517cf
7
- data.tar.gz: 3d26355f79661701e5a4fe5b5a48793c34bc73725befaed5a61239aede84b0bd94172578abe044d6a0fdf9c220472aa3e81913426e461bf1bfcd8d8a57a23182
6
+ metadata.gz: 9aad7577ce38dff2e5f918b2cb81fe66b54eed700bcd56222e3bc0711536253f42fb22320d106cc30ccd3862d9db8734c7fb4697551bfb31f98b9c9ea212d87c
7
+ data.tar.gz: 3932de011836a2bb34fb9d7994be7158faad4d4fbfe5a43b5606d2be3ef9769793ae363e6c9a68c508c15b044b746522db1cca191103dfaf022800431d2d7138
@@ -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,7 +47,7 @@ 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
53
  'object' => absolute_url(object.url),
@@ -51,6 +55,11 @@ module Jekyll
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
@@ -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.0rc11
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-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: distributed-press-api-client