jekyll-activity-pub 0.1.0rc16 → 0.1.0

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: 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: