From d5841809de7b8b7ba5e9da41a0f5a05eed847efa Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 19:48:13 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Add:=20#63=20NodeInfo=E3=81=A7=E3=81=AE`fea?= =?UTF-8?q?thres`=E3=81=AE=E5=85=AC=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/kmyblue_capabilities_helper.rb | 31 +++++++++++++++++++ app/serializers/nodeinfo/serializer.rb | 5 ++- app/serializers/rest/instance_serializer.rb | 26 +--------------- .../rest/v1/instance_serializer.rb | 26 +--------------- 4 files changed, 37 insertions(+), 51 deletions(-) create mode 100644 app/helpers/kmyblue_capabilities_helper.rb diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb new file mode 100644 index 0000000000..c1a67b2627 --- /dev/null +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module KmyblueCapabilitiesHelper + def fedibird_capabilities + capabilities = [ + :enable_wide_emoji, + :kmyblue_searchability, + :searchability, + :kmyblue_markdown, + :kmyblue_reaction_deck, + :kmyblue_visibility_login, + :status_reference, + :visibility_mutual, + :visibility_limited, + :kmyblue_limited_scope, + :kmyblue_antenna, + :kmyblue_bookmark_category, + :kmyblue_quote, + :kmyblue_searchability_limited, + :kmyblue_visibility_public_unlisted, + ] + + capabilities << :profile_search unless Chewy.enabled? + if Setting.enable_emoji_reaction + capabilities << :emoji_reaction + capabilities << :enable_wide_emoji_reaction + end + + capabilities + end +end diff --git a/app/serializers/nodeinfo/serializer.rb b/app/serializers/nodeinfo/serializer.rb index f70cc38f06..3555f0bd8d 100644 --- a/app/serializers/nodeinfo/serializer.rb +++ b/app/serializers/nodeinfo/serializer.rb @@ -2,6 +2,7 @@ class NodeInfo::Serializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :version, :software, :protocols, :services, :usage, :open_registrations, :metadata @@ -38,7 +39,9 @@ class NodeInfo::Serializer < ActiveModel::Serializer end def metadata - {} + { + features: fedibird_capabilities, + } end private diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index c8b4740bff..ed4e40523a 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -8,6 +8,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer end include RoutingHelper + include KmyblueCapabilitiesHelper attributes :domain, :title, :version, :source_url, :description, :usage, :thumbnail, :languages, :configuration, @@ -105,31 +106,6 @@ class REST::InstanceSerializer < ActiveModel::Serializer } end - # for third party apps - def fedibird_capabilities - capabilities = [ - :kmyblue_visibility_public_unlisted, - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - - capabilities - end - private def registrations_enabled? diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 9e801a7898..d0473f5f97 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -2,6 +2,7 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :uri, :title, :short_description, :description, :email, :version, :urls, :stats, :thumbnail, @@ -114,31 +115,6 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer UserRole.everyone.can?(:invite_users) end - # for third party apps - def fedibird_capabilities - capabilities = [ - :kmyblue_visibility_public_unlisted, - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - - capabilities - end - private def instance_presenter From 86244599d3bf109c88eb7d67275af7848ebadbda Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 19:58:26 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Add:=20NodeInfo=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/serializers/nodeinfo/serializer_spec.rb | 32 +++++++++++++++++++ .../rest/instance_serializer_spec.rb | 6 ++++ 2 files changed, 38 insertions(+) create mode 100644 spec/serializers/nodeinfo/serializer_spec.rb diff --git a/spec/serializers/nodeinfo/serializer_spec.rb b/spec/serializers/nodeinfo/serializer_spec.rb new file mode 100644 index 0000000000..c43b0b569f --- /dev/null +++ b/spec/serializers/nodeinfo/serializer_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe NodeInfo::Serializer do # rubocop:disable RSpec/FilePath + let(:serialization) do + JSON.parse( + ActiveModelSerializers::SerializableResource.new( + record, adapter: NodeInfo::Adapter, serializer: described_class, root: 'nodeinfo' + ).to_json + ) + end + let(:record) { {} } + + describe 'nodeinfo version' do + it 'returns 2.0' do + expect(serialization['version']).to eq '2.0' + end + end + + describe 'mastodon version' do + it 'contains kmyblue' do + expect(serialization['software']['version'].include?('kmyblue')).to be true + end + end + + describe 'metadata' do + it 'returns features' do + expect(serialization['metadata']['features']).to include 'emoji_reaction' + end + end +end diff --git a/spec/serializers/rest/instance_serializer_spec.rb b/spec/serializers/rest/instance_serializer_spec.rb index 15a5de18dd..a9a3259aa8 100644 --- a/spec/serializers/rest/instance_serializer_spec.rb +++ b/spec/serializers/rest/instance_serializer_spec.rb @@ -17,4 +17,10 @@ describe REST::InstanceSerializer do expect(serialization['usage']).to eq({ 'users' => { 'active_month' => 0 } }) end end + + describe 'fedibird_capabilities' do + it 'returns fedibird_capabilities' do + expect(serialization['fedibird_capabilities']).to include 'emoji_reaction' + end + end end