jekyll-activity-pub 0.1.0rc16 → 0.1.0

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: bab8dd66e0a0cb65da8e304c0863aea81e9474d614d6e402ad1c467095104f13
4
- data.tar.gz: 3197b0125944c2d0ecc5da5f81b7add9e3cfcfc7aec7a3ecc62902097ef0ea94
3
+ metadata.gz: b01de6dccd0e03a7936d3c107f755e7f5d663e8d8e9622007f57a0a2ff0228d0
4
+ data.tar.gz: 4477807387c5b864b337299662f5c564f1c46407d47c213e27b264971cd3b823
5
5
  SHA512:
6
- metadata.gz: c9e2ca9f2b982b86a04ad682bd1ef431543db98ac38314a7188570ea1562b194f254b0cceb64aa141b96a4cc644bdefbc78ab4a2b99370901b0898d03a2cc787
7
- data.tar.gz: d5305462910540cefd06f1cabba97d15beb731924995ab7f93ada8df1e327811de4f66545a77ff5a82caa7cc75d6adc3fdabe532a7a2432811729e9f4dfab61c
6
+ metadata.gz: cda61088586cd05fa26155db048fd66845a2c32e8a66c05c51d7e8624a49048e0528cb1ccb24ea1ad21ca2d71002be6b3696a12e2ad013d2d3889328ca73fd58
7
+ data.tar.gz: 7fa8b2e1c900c0e65a82b2cf96bf408574a4e40167cf9e0d0317aadcfabf7f17c2f3e05d609e4dfa3a704740b176c10adb91c97541ba4160228e09afac2583bd
@@ -26,7 +26,6 @@ module Jekyll
26
26
  Notifier.actor_url = data['id']
27
27
  Notifier.actor = "@#{username}@#{hostname}"
28
28
 
29
- data['following'] = Notifier.following_url
30
29
  data['followers'] = Notifier.followers_url
31
30
 
32
31
  trigger_hooks :post_init
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ordered_collection'
4
+
5
+ module Jekyll
6
+ module ActivityPub
7
+ # An empty collection of followed actors
8
+ class Following < OrderedCollection
9
+ # Initialize with default data
10
+ #
11
+ # @param :site [Jekyll::Site]
12
+ # @param :actor [Jekyll::ActivityPub::Actor]
13
+ # @param :base [String]
14
+ # @param :dir [String]
15
+ # @param :name [String]
16
+ def initialize(site, actor, base = '', dir = '', name = 'following.jsonld')
17
+ super(site, base, dir, name)
18
+
19
+ actor.data['following'] = absolute_url(url)
20
+
21
+ trigger_hooks :post_init
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'jekyll/page'
4
+ require_relative 'helper'
5
+ require_relative 'version'
6
+
7
+ module Jekyll
8
+ module ActivityPub
9
+ # Points to site's metadata
10
+ class InstanceV1 < Jekyll::Page
11
+ include Helper
12
+
13
+ # Initialize with default data
14
+ #
15
+ # @param :site [Jekyll::Site]
16
+ # @param :base [String]
17
+ # @param :dir [String]
18
+ # @param :name [String]
19
+ def initialize(site, base = '', dir = 'api/v1', name = 'instance')
20
+ @context = StubContext.new(registers: { site: site })
21
+
22
+ super(site, base, dir, name)
23
+
24
+ trigger_hooks :post_init
25
+ end
26
+
27
+ def permalink
28
+ 'api/v1/instance/'
29
+ end
30
+
31
+ def output_ext
32
+ '.json'
33
+ end
34
+
35
+ def read_yaml(*)
36
+ self.data = {
37
+ 'uri' => hostname,
38
+ 'title' => public_name,
39
+ 'short_description' => summary,
40
+ 'description' => summary,
41
+ 'email' => email,
42
+ 'version' => Jekyll::ActivityPub::VERSION,
43
+ 'urls' => {},
44
+ 'stats' => {
45
+ 'user_count' => 1,
46
+ 'status_count' => 0,
47
+ 'domain_count' => 1
48
+ },
49
+ 'thumbnail' => conditional_absolute_url(avatar),
50
+ 'languages' => languages,
51
+ 'registrations' => false,
52
+ 'approval_required' => false,
53
+ 'invites_enabled' => false,
54
+ 'configuration' => {
55
+ 'accounts' => {},
56
+ 'statuses' => {},
57
+ 'media_attachments' => {},
58
+ 'polls' => {}
59
+ },
60
+ 'contact_account' => {
61
+ 'id' => 1,
62
+ 'username' => username,
63
+ 'acct' => username,
64
+ 'display_name' => public_name,
65
+ 'locked' => false,
66
+ 'bot' => false,
67
+ 'discoverable' => true,
68
+ 'group' => false,
69
+ 'created_at' => published.xmlschema,
70
+ 'note' => summary,
71
+ 'url' => site.config['url'],
72
+ 'uri' => site.config['url'],
73
+ 'avatar' => conditional_absolute_url(avatar),
74
+ 'avatar_static' => conditional_absolute_url(avatar),
75
+ 'header' => conditional_absolute_url(header),
76
+ 'header_static' => conditional_absolute_url(header),
77
+ 'followers_count' => 0,
78
+ 'following_count' => 0,
79
+ 'statuses_count' => 0,
80
+ 'last_status_at' => nil,
81
+ 'noindex' => false,
82
+ 'emojis' => [],
83
+ 'roles' => [],
84
+ 'fields' => []
85
+ },
86
+ 'rules' => []
87
+ }
88
+ end
89
+
90
+ def increase_local_posts_counter!
91
+ data['stats']['status_count'] += 1
92
+ data['contact_account']['statuses_count'] += 1
93
+ nil
94
+ end
95
+
96
+ def increase_last_status!(last_status)
97
+ self.last_status_at = last_status if !last_status_at || last_status_at < last_status
98
+ end
99
+
100
+ private
101
+
102
+ def last_status_at
103
+ data['contact_account']['last_status_at']
104
+ end
105
+
106
+ def last_status_at=(last_status)
107
+ data['contact_account']['last_status_at'] = last_status
108
+ end
109
+
110
+ # @return [String,nil]
111
+ def header
112
+ @header ||= [find_best_value_for(site.config, %w[activity_pub images], %w[image path])].flatten.compact.first
113
+ end
114
+
115
+ # @return [Array<String>]
116
+ def languages
117
+ @languages ||= site.config['locales'] || [locale]
118
+ end
119
+
120
+ # @return [String,nil]
121
+ def email
122
+ @email ||= find_best_value_for(site.config, %w[activity_pub email], 'email')
123
+ end
124
+
125
+ def avatar
126
+ @avatar ||= [find_best_value_for(site.config, %w[activity_pub icons], 'logo')].flatten.compact.first
127
+ end
128
+ end
129
+ end
130
+ end
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'jekyll/page'
4
- require_relative 'helper'
5
- require_relative 'version'
3
+ require_relative 'instance_v1'
6
4
 
7
5
  module Jekyll
8
6
  module ActivityPub
9
7
  # Points to site's metadata
10
- class Instance < Jekyll::Page
8
+ class InstanceV2 < InstanceV1
11
9
  include Helper
12
10
 
13
11
  # Initialize with default data
@@ -17,21 +15,13 @@ module Jekyll
17
15
  # @param :dir [String]
18
16
  # @param :name [String]
19
17
  def initialize(site, base = '', dir = 'api/v2', name = 'instance')
20
- @context = StubContext.new(registers: { site: site })
21
-
22
18
  super(site, base, dir, name)
23
-
24
- trigger_hooks :post_init
25
19
  end
26
20
 
27
21
  def permalink
28
22
  'api/v2/instance/'
29
23
  end
30
24
 
31
- def output_ext
32
- '.json'
33
- end
34
-
35
25
  def read_yaml(*)
36
26
  self.data = {
37
27
  'domain' => hostname,
@@ -92,25 +82,19 @@ module Jekyll
92
82
  }
93
83
  end
94
84
 
95
- private
96
-
97
- # @return [String,nil]
98
- def header
99
- @header ||= [find_best_value_for(site.config, %w[activity_pub images], %w[image path])].flatten.compact.first
85
+ def increase_local_posts_counter!
86
+ data['contact']['account']['statuses_count'] += 1
87
+ nil
100
88
  end
101
89
 
102
- # @return [Array<String>]
103
- def languages
104
- @languages ||= site.config['locales'] || [locale]
105
- end
90
+ private
106
91
 
107
- # @return [String,nil]
108
- def email
109
- @email ||= find_best_value_for(site.config, %w[activity_pub email], 'email')
92
+ def last_status_at
93
+ data['contact']['account']['last_status_at']
110
94
  end
111
95
 
112
- def avatar
113
- @avatar ||= [find_best_value_for(site.config, %w[activity_pub icons], 'logo')].flatten.compact.first
96
+ def last_status_at=(last_status)
97
+ data['contact']['account']['last_status_at'] = last_status
114
98
  end
115
99
  end
116
100
  end
@@ -64,11 +64,6 @@ module Jekyll
64
64
  "#{url}/v1/#{actor}/followers"
65
65
  end
66
66
 
67
- # @return [String]
68
- def following_url
69
- "#{url}/v1/#{actor}/following"
70
- end
71
-
72
67
  # Save the public key URL for later
73
68
  #
74
69
  # @param :url [String]
@@ -11,7 +11,9 @@ require_relative 'activity_pub/public_key'
11
11
  require_relative 'activity_pub/nodeinfo'
12
12
  require_relative 'activity_pub/nodeinfo_20'
13
13
  require_relative 'activity_pub/nodeinfo_21'
14
- require_relative 'activity_pub/instance'
14
+ require_relative 'activity_pub/instance_v1'
15
+ require_relative 'activity_pub/instance_v2'
16
+ require_relative 'activity_pub/following'
15
17
 
16
18
  module Jekyll
17
19
  # ActivityPub
@@ -29,7 +29,14 @@ Jekyll::Hooks.register :site, :post_read, priority: :low do |site|
29
29
  site.pages << site.config['webfinger'] = webfinger = Jekyll::ActivityPub::WebFinger.new(site, actor)
30
30
  site.pages << site.config['outbox'] = Jekyll::ActivityPub::Outbox.new(site, actor)
31
31
  site.pages << site.config['host-meta'] = Jekyll::ActivityPub::HostMeta.new(site, webfinger)
32
- site.pages << site.config['instance'] = Jekyll::ActivityPub::Instance.new(site)
32
+ site.pages << Jekyll::ActivityPub::Following.new(site, actor)
33
+
34
+ # Instances
35
+ site.config['instances'] = [Jekyll::ActivityPub::InstanceV1, Jekyll::ActivityPub::InstanceV2].map do |instance|
36
+ instance.new(site).tap do |i|
37
+ site.pages << i
38
+ end
39
+ end
33
40
 
34
41
  # Nodeinfo
35
42
  site.config['nodeinfos'] = [Jekyll::ActivityPub::Nodeinfo20, Jekyll::ActivityPub::Nodeinfo21].map do |nodeinfo|
@@ -97,13 +104,9 @@ Jekyll::Hooks.register(:documents, :post_convert, priority: :high) do |doc|
97
104
  outbox.data['orderedItems'] << action
98
105
 
99
106
  site.config['nodeinfos'].map(&:increase_local_posts_counter!)
100
-
101
- site.config['instance'].data['contact']['account']['statuses_count'] += 1
102
-
103
- last_status_at = site.config['instance'].data['contact']['account']['last_status_at']
104
-
105
- if !last_status_at || last_status_at < doc.date
106
- site.config['instance'].data['contact']['account']['last_status_at'] = doc.date
107
+ site.config['instances'].each do |instance|
108
+ instance.increase_local_posts_counter!
109
+ instance.increase_last_status!(doc.date)
107
110
  end
108
111
 
109
112
  site.pages << action
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.0rc16
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sutty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-17 00:00:00.000000000 Z
11
+ date: 2023-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: distributed-press-api-client
@@ -149,10 +149,12 @@ files:
149
149
  - lib/jekyll/activity_pub/delete.rb
150
150
  - lib/jekyll/activity_pub/document.rb
151
151
  - lib/jekyll/activity_pub/errors.rb
152
+ - lib/jekyll/activity_pub/following.rb
152
153
  - lib/jekyll/activity_pub/helper.rb
153
154
  - lib/jekyll/activity_pub/host_meta.rb
154
155
  - lib/jekyll/activity_pub/image.rb
155
- - lib/jekyll/activity_pub/instance.rb
156
+ - lib/jekyll/activity_pub/instance_v1.rb
157
+ - lib/jekyll/activity_pub/instance_v2.rb
156
158
  - lib/jekyll/activity_pub/nodeinfo.rb
157
159
  - lib/jekyll/activity_pub/nodeinfo_20.rb
158
160
  - lib/jekyll/activity_pub/nodeinfo_21.rb
@@ -196,9 +198,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
198
  version: '2.7'
197
199
  required_rubygems_version: !ruby/object:Gem::Requirement
198
200
  requirements:
199
- - - ">"
201
+ - - ">="
200
202
  - !ruby/object:Gem::Version
201
- version: 1.3.1
203
+ version: '0'
202
204
  requirements: []
203
205
  rubygems_version: 3.3.26
204
206
  signing_key: