commit: 293972f716476933df2b665ad755cafe4d29d82d
parent: 9c8e602163811fc9a21c5ae78d53d46d7dbc8db7
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 23 Sep 2017 01:57:23 +0200
New API: GET /api/v1/custom_emojis to get a server's custom emojis (#5051)
Diffstat:
7 files changed, 43 insertions(+), 12 deletions(-)
diff --git a/app/controllers/admin/custom_emojis_controller.rb b/app/controllers/admin/custom_emojis_controller.rb
@@ -3,7 +3,7 @@
module Admin
class CustomEmojisController < BaseController
def index
- @custom_emojis = CustomEmoji.where(domain: nil)
+ @custom_emojis = CustomEmoji.local
end
def new
diff --git a/app/controllers/api/v1/custom_emojis_controller.rb b/app/controllers/api/v1/custom_emojis_controller.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class Api::V1::CustomEmojisController < Api::BaseController
+ respond_to :json
+
+ def index
+ render json: CustomEmoji.local, each_serializer: REST::CustomEmojiSerializer
+ end
+end
diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb
@@ -26,6 +26,8 @@ class CustomEmoji < ApplicationRecord
validates_attachment :image, content_type: { content_type: 'image/png' }, presence: true, size: { in: 0..50.kilobytes }
validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 }
+ scope :local, -> { where(domain: nil) }
+
include Remotable
class << self
diff --git a/app/serializers/rest/custom_emoji_serializer.rb b/app/serializers/rest/custom_emoji_serializer.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class REST::CustomEmojiSerializer < ActiveModel::Serializer
+ include RoutingHelper
+
+ attributes :shortcode, :url
+
+ def url
+ full_asset_url(object.image.url)
+ end
+end
diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb
@@ -17,7 +17,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
has_many :media_attachments, serializer: REST::MediaAttachmentSerializer
has_many :mentions
has_many :tags
- has_many :emojis
+ has_many :emojis, serializer: REST::CustomEmojiSerializer
def id
object.id.to_s
@@ -119,14 +119,4 @@ class REST::StatusSerializer < ActiveModel::Serializer
tag_url(object)
end
end
-
- class CustomEmojiSerializer < ActiveModel::Serializer
- include RoutingHelper
-
- attributes :shortcode, :url
-
- def url
- full_asset_url(object.image.url)
- end
- end
end
diff --git a/config/routes.rb b/config/routes.rb
@@ -188,6 +188,7 @@ Rails.application.routes.draw do
end
resources :streaming, only: [:index]
+ resources :custom_emojis, only: [:index]
get '/search', to: 'search#index', as: :search
diff --git a/spec/controllers/api/v1/custom_emojis_controller_spec.rb b/spec/controllers/api/v1/custom_emojis_controller_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Api::V1::CustomEmojisController, type: :controller do
+ render_views
+
+ describe 'GET #index' do
+ before do
+ Fabricate(:custom_emoji)
+ get :index
+ end
+
+ it 'returns http success' do
+ expect(response).to have_http_status(:success)
+ end
+ end
+end