このコミットが含まれているのは:
@@ -1,4 +1,6 @@
|
||||
class UserSettingsController < ApplicationController
|
||||
wrap_parameters false
|
||||
|
||||
def show
|
||||
return head :unauthorized unless current_user
|
||||
|
||||
@@ -8,12 +10,12 @@ class UserSettingsController < ApplicationController
|
||||
def update
|
||||
return head :unauthorized unless current_user
|
||||
|
||||
raw_attributes = request.request_parameters
|
||||
raw_attributes = editable_raw_attributes
|
||||
field_errors = validate_raw_attributes(raw_attributes)
|
||||
return render_validation_error fields: field_errors if field_errors.present?
|
||||
|
||||
setting = current_setting
|
||||
setting.assign_attributes(raw_attributes.slice(*Setting::EDITABLE_ATTRIBUTES))
|
||||
setting.assign_attributes(raw_attributes)
|
||||
|
||||
if setting.save
|
||||
render json: setting.serializable_hash, status: :ok
|
||||
@@ -32,13 +34,12 @@ class UserSettingsController < ApplicationController
|
||||
Setting.find_by!(user: current_user)
|
||||
end
|
||||
|
||||
def editable_raw_attributes
|
||||
request.request_parameters.slice(*Setting::EDITABLE_ATTRIBUTES)
|
||||
end
|
||||
|
||||
def validate_raw_attributes raw_attributes
|
||||
raw_attributes.each_with_object({ }) do |(key, value), errors|
|
||||
unless Setting::EDITABLE_ATTRIBUTES.include?(key)
|
||||
errors[key.to_sym] = ['不明な設定です.']
|
||||
next
|
||||
end
|
||||
|
||||
next if value_matches_type?(key, value)
|
||||
|
||||
errors[key.to_sym] = ['値の型が不正です.']
|
||||
|
||||
@@ -1,46 +1,20 @@
|
||||
class Setting < ApplicationRecord
|
||||
THEMES = ['system', 'light', 'dark'].freeze
|
||||
DISPLAY_DENSITIES = ['comfortable', 'compact'].freeze
|
||||
FONT_SIZES = ['small', 'normal', 'large'].freeze
|
||||
POST_LIST_LIMITS = [20, 50, 100].freeze
|
||||
POST_LIST_ORDERS = [
|
||||
'title_asc',
|
||||
'title_desc',
|
||||
'url_asc',
|
||||
'url_desc',
|
||||
'original_created_at_asc',
|
||||
'original_created_at_desc',
|
||||
'created_at_asc',
|
||||
'created_at_desc',
|
||||
'updated_at_asc',
|
||||
'updated_at_desc',
|
||||
].freeze
|
||||
VIEWED_POST_DISPLAYS = ['show', 'dim'].freeze
|
||||
AUTO_FETCH_MODES = ['auto', 'manual', 'off'].freeze
|
||||
WIKI_EDITOR_MODES = ['split', 'write', 'preview'].freeze
|
||||
|
||||
STRING_ATTRIBUTES = [
|
||||
'theme',
|
||||
'display_density',
|
||||
'font_size',
|
||||
'post_list_order',
|
||||
'viewed_post_display',
|
||||
'auto_fetch_title',
|
||||
'auto_fetch_thumbnail',
|
||||
'wiki_editor_mode',
|
||||
].freeze
|
||||
INTEGER_ATTRIBUTES = ['post_list_limit'].freeze
|
||||
BOOLEAN_ATTRIBUTES = ['tag_autocomplete_nico'].freeze
|
||||
INTEGER_ATTRIBUTES = [].freeze
|
||||
BOOLEAN_ATTRIBUTES = [].freeze
|
||||
EDITABLE_ATTRIBUTES =
|
||||
(STRING_ATTRIBUTES + INTEGER_ATTRIBUTES + BOOLEAN_ATTRIBUTES).freeze
|
||||
TYPE_BY_ATTRIBUTE = {
|
||||
'theme' => :string,
|
||||
'display_density' => :string,
|
||||
'font_size' => :string,
|
||||
'post_list_limit' => :integer,
|
||||
'post_list_order' => :string,
|
||||
'viewed_post_display' => :string,
|
||||
'tag_autocomplete_nico' => :boolean,
|
||||
'auto_fetch_title' => :string,
|
||||
'auto_fetch_thumbnail' => :string,
|
||||
'wiki_editor_mode' => :string,
|
||||
@@ -52,12 +26,6 @@ class Setting < ApplicationRecord
|
||||
validates :user_id, uniqueness: true
|
||||
|
||||
validates :theme, inclusion: { in: THEMES }
|
||||
validates :display_density, inclusion: { in: DISPLAY_DENSITIES }
|
||||
validates :font_size, inclusion: { in: FONT_SIZES }
|
||||
validates :post_list_limit, inclusion: { in: POST_LIST_LIMITS }
|
||||
validates :post_list_order, inclusion: { in: POST_LIST_ORDERS }
|
||||
validates :viewed_post_display, inclusion: { in: VIEWED_POST_DISPLAYS }
|
||||
validates :tag_autocomplete_nico, inclusion: { in: [true, false] }
|
||||
validates :auto_fetch_title, inclusion: { in: AUTO_FETCH_MODES }
|
||||
validates :auto_fetch_thumbnail, inclusion: { in: AUTO_FETCH_MODES }
|
||||
validates :wiki_editor_mode, inclusion: { in: WIKI_EDITOR_MODES }
|
||||
@@ -65,12 +33,6 @@ class Setting < ApplicationRecord
|
||||
def self.defaults
|
||||
{
|
||||
theme: 'system',
|
||||
display_density: 'comfortable',
|
||||
font_size: 'normal',
|
||||
post_list_limit: 50,
|
||||
post_list_order: 'created_at_desc',
|
||||
viewed_post_display: 'show',
|
||||
tag_autocomplete_nico: true,
|
||||
auto_fetch_title: 'manual',
|
||||
auto_fetch_thumbnail: 'manual',
|
||||
wiki_editor_mode: 'split',
|
||||
|
||||
@@ -81,6 +81,9 @@ Rails.application.routes.draw do
|
||||
end
|
||||
end
|
||||
|
||||
get 'users/settings', to: 'user_settings#show'
|
||||
patch 'users/settings', to: 'user_settings#update'
|
||||
|
||||
resources :users, only: [:create, :update] do
|
||||
collection do
|
||||
post :verify
|
||||
@@ -89,11 +92,6 @@ Rails.application.routes.draw do
|
||||
end
|
||||
end
|
||||
|
||||
scope 'users/settings', controller: :user_settings do
|
||||
get '', action: :show
|
||||
patch '', action: :update
|
||||
end
|
||||
|
||||
resources :deerjikists, only: [] do
|
||||
collection do
|
||||
scope ':platform/:code' do
|
||||
|
||||
@@ -9,28 +9,6 @@ class RebuildSettingsAsTypedUserSettings < ActiveRecord::Migration[8.0]
|
||||
change_column_null :settings, :user_id, false
|
||||
|
||||
add_column :settings, :theme, :string, null: false, default: 'system'
|
||||
add_column :settings,
|
||||
:display_density,
|
||||
:string,
|
||||
null: false,
|
||||
default: 'comfortable'
|
||||
add_column :settings, :font_size, :string, null: false, default: 'normal'
|
||||
add_column :settings, :post_list_limit, :integer, null: false, default: 50
|
||||
add_column :settings,
|
||||
:post_list_order,
|
||||
:string,
|
||||
null: false,
|
||||
default: 'created_at_desc'
|
||||
add_column :settings,
|
||||
:viewed_post_display,
|
||||
:string,
|
||||
null: false,
|
||||
default: 'show'
|
||||
add_column :settings,
|
||||
:tag_autocomplete_nico,
|
||||
:boolean,
|
||||
null: false,
|
||||
default: true
|
||||
add_column :settings,
|
||||
:auto_fetch_title,
|
||||
:string,
|
||||
|
||||
生成ファイル
-6
@@ -377,12 +377,6 @@ ActiveRecord::Schema[8.0].define(version: 2026_07_04_000000) do
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "theme", default: "system", null: false
|
||||
t.string "display_density", default: "comfortable", null: false
|
||||
t.string "font_size", default: "normal", null: false
|
||||
t.integer "post_list_limit", default: 50, null: false
|
||||
t.string "post_list_order", default: "created_at_desc", null: false
|
||||
t.string "viewed_post_display", default: "show", null: false
|
||||
t.boolean "tag_autocomplete_nico", default: true, null: false
|
||||
t.string "auto_fetch_title", default: "manual", null: false
|
||||
t.string "auto_fetch_thumbnail", default: "manual", null: false
|
||||
t.string "wiki_editor_mode", default: "split", null: false
|
||||
|
||||
新しい課題から参照
ユーザをブロックする